From e22d2670fdbc81a59b78329174ac28557e5062b0 Mon Sep 17 00:00:00 2001 From: yago Date: Thu, 1 Jan 2015 16:06:43 +0100 Subject: [PATCH] stats with local scope --- plugins/stats.lua | 81 +++++++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 35 deletions(-) diff --git a/plugins/stats.lua b/plugins/stats.lua index 12800b4..320f8c5 100644 --- a/plugins/stats.lua +++ b/plugins/stats.lua @@ -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" - f:close() - return json:decode(c) + print ('Stats loaded: '.._file_stats) + f:close() 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 -} \ No newline at end of file +} + +end \ No newline at end of file