From 103184914571705721f2dcb2d6525ed554e4b9d6 Mon Sep 17 00:00:00 2001 From: Akamaru Date: Mon, 11 Jan 2016 19:38:03 +0100 Subject: [PATCH] AFK Plugin nun mit Zeitangabe --- .gitignore | 3 ++- bot/bot.lua | 1 + bot/utils.lua | 6 ++++++ plugins/afk.lua | 30 +++++++++++++++++++++++++----- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 2357e09..69ffd52 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ plugins/stats2.lua plugins/help2.lua plugins/pegelf_img.lua plugins/plex.lua -plugins/chantalle.lua \ No newline at end of file +plugins/chantalle.lua +plugins/plex_xml.lua \ No newline at end of file diff --git a/bot/bot.lua b/bot/bot.lua index 63fe075..7c2897e 100644 --- a/bot/bot.lua +++ b/bot/bot.lua @@ -107,6 +107,7 @@ end -- Apply plugin.pre_process function function pre_process_msg(msg) + --for name,plugin in orderedPairs(plugins) do for name,plugin in pairs(plugins) do if plugin.pre_process and msg then -- print('Preprocess', name) diff --git a/bot/utils.lua b/bot/utils.lua index 3c5080b..2d069d3 100644 --- a/bot/utils.lua +++ b/bot/utils.lua @@ -661,4 +661,10 @@ function cache_data(plugin, query, data, timeout, typ) redis:hmset(hash, data) end redis:expire(hash, timeout) +end + +function orderedPairs(t) + -- Equivalent of the pairs() function on tables. Allows to iterate + -- in order + return orderedNext, t, nil end \ No newline at end of file diff --git a/plugins/afk.lua b/plugins/afk.lua index ae1e4c1..7d2c4dc 100644 --- a/plugins/afk.lua +++ b/plugins/afk.lua @@ -18,7 +18,7 @@ local function get_afk_text(hash) end end -local function switch_afk(user_name, user_id, chat_id, text) +local function switch_afk(user_name, user_id, chat_id, timestamp, text) local hash = 'afk:'..chat_id..':'..user_id if is_offline(hash) then @@ -32,6 +32,8 @@ local function switch_afk(user_name, user_id, chat_id, text) print('Setting redis hash afk in '..hash..' to true') redis:hset(hash, 'afk', true) + print('Setting redis hash timestamp in '..hash..' to '..timestamp) + redis:hset(hash, 'time', timestamp) if text then print('Setting redis hash afk_text in '..hash..' to '..text) @@ -57,12 +59,29 @@ local function pre_process(msg) if is_offline(hash) then local afk_text = get_afk_text(hash) + + -- calculate afk time + local timestamp = redis:hget(hash, 'time') + local current_timestamp = msg.date + local afk_time = current_timestamp - timestamp + local seconds = afk_time % 60 + local minutes = math.floor(afk_time / 60) + local minutes = minutes % 60 + local hours = math.floor(afk_time / 3600) + if minutes == 00 and hours == 00 then + duration = seconds..' Sekunden' + elseif hours == 00 and minutes ~= 00 then + duration = string.format("%02d:%02d", minutes, seconds)..' Minuten' + elseif hours ~= 00 then + duration = string.format("%02d:%02d:%02d", hours, minutes, seconds)..' Stunden' + end + redis:hset(hash, 'afk', false) if afk_text then redis:hset(hash, 'afk_text', false) - send_msg(receiver, user_name..' ist wieder da! (war: '..afk_text..')', ok_cb, false) + send_msg(receiver, user_name..' ist wieder da! (war: '..afk_text..' für '..duration..')', ok_cb, false) else - send_msg(receiver, user_name..' ist wieder da!', ok_cb, false) + send_msg(receiver, user_name..' ist wieder da! (war '..duration..' weg)', ok_cb, false) end end @@ -77,11 +96,12 @@ local function run(msg, matches) local user_id = msg.from.id local chat_id = msg.to.id local user_name = get_name(msg) + local timestamp = msg.date if matches[2] then - return switch_afk(user_name, user_id, chat_id, matches[2]) + return switch_afk(user_name, user_id, chat_id, timestamp, matches[2]) else - return switch_afk(user_name, user_id, chat_id) + return switch_afk(user_name, user_id, chat_id, timestamp) end end