stats with local scope
This commit is contained in:
parent
a889d410f1
commit
e22d2670fd
@ -1,5 +1,14 @@
|
||||
-- Saves the number of messages from a user
|
||||
-- Can check the number of messages with !stats
|
||||
|
||||
do
|
||||
|
||||
local socket = require('socket')
|
||||
local _file_stats = './res/stats.lua'
|
||||
local _stats
|
||||
|
||||
function update_user_stats(msg)
|
||||
-- Save user to _users table
|
||||
-- Save user to stats table
|
||||
local from_id = tostring(msg.from.id)
|
||||
local to_id = tostring(msg.to.id)
|
||||
local user_name = get_name(msg)
|
||||
@ -7,54 +16,53 @@ function update_user_stats(msg)
|
||||
-- If last name is nil dont save last_name.
|
||||
local user_last_name = msg.from.last_name
|
||||
local user_print_name = msg.from.print_name
|
||||
if _users[to_id] == nil then
|
||||
_users[to_id] = {}
|
||||
if _stats[to_id] == nil then
|
||||
print ('New stats key to_id: '..to_id)
|
||||
_stats[to_id] = {}
|
||||
end
|
||||
if _users[to_id][from_id] == nil then
|
||||
_users[to_id][from_id] = {
|
||||
if _stats[to_id][from_id] == nil then
|
||||
print ('New stats key from_id: '..to_id)
|
||||
_stats[to_id][from_id] = {
|
||||
name = user_name,
|
||||
last_name = user_last_name,
|
||||
print_name = user_print_name,
|
||||
msg_num = 1
|
||||
}
|
||||
else
|
||||
local actual_num = _users[to_id][from_id].msg_num
|
||||
_users[to_id][from_id].msg_num = actual_num + 1
|
||||
print ('Updated '..to_id..' '..from_id)
|
||||
local actual_num = _stats[to_id][from_id].msg_num
|
||||
_stats[to_id][from_id].msg_num = actual_num + 1
|
||||
-- And update last_name
|
||||
_users[to_id][from_id].last_name = user_last_name
|
||||
_stats[to_id][from_id].last_name = user_last_name
|
||||
end
|
||||
end
|
||||
|
||||
function load_user_stats()
|
||||
local f = io.open('res/users.json', "r+")
|
||||
function read_file_stats( )
|
||||
local f = io.open(_file_stats, "r+")
|
||||
-- If file doesn't exists
|
||||
if f == nil then
|
||||
f = io.open('res/users.json', "w+")
|
||||
f:write("{}") -- Write empty table
|
||||
f:close()
|
||||
return {}
|
||||
-- Create a new empty table
|
||||
print ('Created user stats file '.._file_stats)
|
||||
serialize_to_file({}, _file_stats)
|
||||
else
|
||||
local c = f:read "*a"
|
||||
print ('Stats loaded: '.._file_stats)
|
||||
f:close()
|
||||
return json:decode(c)
|
||||
end
|
||||
return loadfile (_file_stats)()
|
||||
end
|
||||
|
||||
function save_stats()
|
||||
|
||||
local function save_stats()
|
||||
-- Save stats to file
|
||||
local json_users = json:encode_pretty(_users)
|
||||
vardump(json_users)
|
||||
file_users = io.open ("./res/users.json", "w")
|
||||
file_users:write(json_users)
|
||||
file_users:close()
|
||||
serialize_to_file(_stats, _file_stats)
|
||||
end
|
||||
|
||||
function get_stats_status( msg )
|
||||
-- vardump(_users)
|
||||
local function get_stats_status( msg )
|
||||
-- vardump(stats)
|
||||
local text = ""
|
||||
local to_id = tostring(msg.to.id)
|
||||
|
||||
for id, user in pairs(_users[to_id]) do
|
||||
for id, user in pairs(_stats[to_id]) do
|
||||
if user.last_name == nil then
|
||||
text = text..user.name.." ["..id.."]: "..user.msg_num.."\n"
|
||||
else
|
||||
@ -65,25 +73,28 @@ function get_stats_status( msg )
|
||||
return text
|
||||
end
|
||||
|
||||
function run(msg, matches)
|
||||
-- TODO: I need to know wich patterns matches.
|
||||
if matches[1] == "!stats" then
|
||||
return get_stats_status(msg)
|
||||
local function run(msg, matches)
|
||||
if matches[1] == "stats" then -- Hack
|
||||
return get_stats_status(msg)
|
||||
else
|
||||
print ("update stats")
|
||||
update_user_stats(msg)
|
||||
print(socket.gettime())
|
||||
save_stats()
|
||||
print(socket.gettime())
|
||||
end
|
||||
end
|
||||
|
||||
-- TODO: local vars
|
||||
_users = load_user_stats()
|
||||
_stats = read_file_stats()
|
||||
|
||||
return {
|
||||
description = "Numer of messages by user",
|
||||
usage = "!stats",
|
||||
patterns = {
|
||||
".*",
|
||||
"^!stats"
|
||||
".*",
|
||||
"^!(stats)"
|
||||
},
|
||||
run = run
|
||||
}
|
||||
|
||||
end
|
Reference in New Issue
Block a user