2016-06-15 20:10:30 +02: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 = {
" ^/([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 )
2016-06-19 20:52:59 +02:00
if msg.chat . type == " private " then
-- Ignore
2016-06-15 20:10:30 +02:00
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
2016-08-07 17:52:57 +02:00
local uhash = ' user: ' .. user_id
2016-06-15 20:10:30 +02:00
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
2016-07-30 13:22:25 +02:00
local duration = makeHumanTime ( afk_time )
2016-06-15 20:10:30 +02:00
redis : hset ( hash , ' afk ' , false )
2016-08-07 17:52:57 +02:00
local show_afk_keyboard = redis : hget ( uhash , ' afk_keyboard ' )
2016-06-15 20:10:30 +02:00
if afk_text then
redis : hset ( hash , ' afk_text ' , false )
2016-08-07 17:52:57 +02:00
if show_afk_keyboard == ' true ' then
utilities.send_reply ( self , msg , user_name .. ' ist wieder da (war: <b> ' .. afk_text .. ' </b> für ' .. duration .. ' )! ' , ' HTML ' , ' {"hide_keyboard":true,"selective":true} ' )
else
utilities.send_message ( self , chat_id , user_name .. ' ist wieder da (war: <b> ' .. afk_text .. ' </b> für ' .. duration .. ' )! ' , true , nil , ' HTML ' )
end
2016-06-15 20:10:30 +02:00
else
2016-08-07 17:52:57 +02:00
if show_afk_keyboard == ' true ' then
utilities.send_reply ( self , msg , user_name .. ' ist wieder da (war ' .. duration .. ' weg)! ' , nil , ' {"hide_keyboard":true,"selective":true} ' )
else
utilities.send_message ( self , chat_id , user_name .. ' ist wieder da (war ' .. duration .. ' weg)! ' )
end
2016-06-15 20:10:30 +02:00
end
end
2016-06-17 20:44:28 +02:00
return msg
2016-06-15 20:10:30 +02:00
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
2016-08-02 16:19:20 +02:00
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
2016-06-15 20:10:30 +02:00
2016-08-02 16:19:20 +02:00
utilities.send_reply ( self , msg , afk : switch_afk ( user_name , user_id , chat_id , timestamp , matches [ 2 ] ) , false , keyboard )
2016-06-15 20:10:30 +02:00
end
return afk