2016-11-29 18:28:21 +01:00
-- 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 = {
" ^/([Aa][Ff][Kk])$ " ,
" ^/([Aa][Ff][Kk]) (.*)$ "
}
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 )
if msg.chat . type == " private " then
-- Ignore
return msg
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
local uhash = ' user: ' .. 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 )
local show_afk_keyboard = redis : hget ( uhash , ' afk_keyboard ' )
if afk_text then
redis : hset ( hash , ' afk_text ' , false )
if show_afk_keyboard == ' true ' then
utilities.send_reply ( msg , user_name .. ' ist wieder da! (war: <b> ' .. afk_text .. ' </b> für ' .. duration .. ' ) ' , ' HTML ' , ' {"hide_keyboard":true,"selective":true} ' )
else
utilities.send_message ( chat_id , user_name .. ' ist wieder da! (war: <b> ' .. afk_text .. ' </b> für ' .. duration .. ' ) ' , true , nil , ' HTML ' )
end
else
if show_afk_keyboard == ' true ' then
utilities.send_reply ( msg , user_name .. ' ist wieder da! (war ' .. duration .. ' weg) ' , nil , ' {"hide_keyboard":true,"selective":true} ' )
else
utilities.send_message ( chat_id , user_name .. ' ist wieder da! (war ' .. duration .. ' weg) ' )
end
end
end
return msg
end
function afk : action ( msg , config , matches )
if msg.chat . type == " private " then
utilities.send_reply ( 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 ( msg , afk : switch_afk ( user_name , user_id , chat_id , timestamp , matches [ 2 ] ) , false , keyboard )
end
2016-07-17 13:22:27 +02:00
return afk