This repository has been archived on 2021-04-24. You can view files and clone it, but cannot push or open issues or pull requests.
Mikubot-2/otouto/plugins/afk.lua
Andreas Bielawski 5f010ca1ee - Neu: Settings-Plugin. Hier wird man in Zukunft einiges einstellen können, momentan wurde nur eine Einstellung zum...
- AFK-Keyboard hinzugefügt. Wenn es eingeschaltet ist (über /settings), wird ein "Wieder da." Button eingeblendet, mit dem man sich leicht wieder "online" schalten kann
- Utilites: Bei makeHumanTine() wird nun der Singular verwendet, wenn nötig ("1 Sekunde" statt "1 Sekunden")
2016-08-02 16:19:20 +02:00

117 lines
3.1 KiB
Lua

-- original plugin by Akamaru [https://ponywave.de]
-- I added Redis and automatic online switching back in 2015
local afk = {}
function afk:init(config)
afk.triggers = {
"^/([A|a][F|f][K|k])$",
"^/([A|a][F|f][K|k]) (.*)$"
}
afk.doc = [[*
]]..config.cmd_pat..[[afk* _[Text]_: Setzt Status auf AFK mit optionalem Text]]
end
afk.command = 'afk [Text]'
function afk:is_offline(hash)
local afk = redis:hget(hash, 'afk')
if afk == "true" then
return true
else
return false
end
end
function afk:get_afk_text(hash)
local afk_text = redis:hget(hash, 'afk_text')
if afk_text ~= nil and afk_text ~= "" and afk_text ~= "false" then
return afk_text
else
return false
end
end
function afk:switch_afk(user_name, user_id, chat_id, timestamp, text)
local hash = 'afk:'..chat_id..':'..user_id
if afk:is_offline(hash) then
local afk_text = afk:get_afk_text(hash)
if afk_text then
return 'Du bist bereits AFK ('..afk_text..')!'
else
return 'Du bist bereits AFK!'
end
end
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)
redis:hset(hash, 'afk_text', text)
return user_name..' ist AFK ('..text..')'
else
return user_name..' ist AFK'
end
end
function afk:pre_process(msg, self)
if msg.chat.type == "private" then
-- Ignore
return
end
local user_name = get_name(msg)
local user_id = msg.from.id
local chat_id = msg.chat.id
local hash = 'afk:'..chat_id..':'..user_id
if afk:is_offline(hash) then
local afk_text = afk: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 duration = makeHumanTime(afk_time)
redis:hset(hash, 'afk', false)
if afk_text then
redis:hset(hash, 'afk_text', false)
local afk_text = afk_text:gsub("%*","")
local afk_text = afk_text:gsub("_","")
utilities.send_reply(self, msg, user_name..' ist wieder da (war: *'..afk_text..'* für '..duration..')!', true, '{"hide_keyboard":true,"selective":true}')
else
utilities.send_reply(self, msg, user_name..' ist wieder da (war '..duration..' weg)!', false, '{"hide_keyboard":true,"selective":true}')
end
end
return msg
end
function afk:action(msg)
if msg.chat.type == "private" then
utilities.send_reply(self, msg, "Mir ist's egal, ob du AFK bist ._.")
return
end
local user_id = msg.from.id
local chat_id = msg.chat.id
local user_name = get_name(msg)
local timestamp = msg.date
local uhash = 'user:'..msg.from.id
local show_afk_keyboard = redis:hget(uhash, 'afk_keyboard')
if show_afk_keyboard == 'true' then
keyboard = '{"keyboard":[[{"text":"Wieder da."}]], "one_time_keyboard":true, "selective":true, "resize_keyboard":true}'
else
keyboard = nil
end
utilities.send_reply(self, msg, afk:switch_afk(user_name, user_id, chat_id, timestamp, matches[2]), false, keyboard)
end
return afk