plugins/simple_commands.lua

1
-- simple_commands.lua
2
 
3
 
4
 
5
local st = require 'util.stanza'
6
 
7
function riddim.plugins.simple_commands(bot)
8
   -- reply to message (but don't prepend the sender's nick like groupchat's
9
   -- event:reply does)
10
   local function bare_reply(command, reply)
11
      if command.stanza.attr.type == 'groupchat' then
12
	 local r = st.reply(command.stanza)
13
	 local room_jid = jid.bare(command.sender.jid);
14
	 if bot.rooms[room_jid] then
15
	    bot.rooms[room_jid]:send(r:tag("body"):text(reply));
16
	 end
17
      else
18
	 return command:reply(reply);
19
      end
20
   end
21
 
22
   local function exec(command)
23
      local reply = bot.config.simple_commands[command.command]
24
      if type(reply) == 'table' then
25
	 reply = reply[math.random(#reply)]
26
      end
27
      if type(reply) == 'string' then
28
	 if reply:match('%%s') then
29
	    if command.param then
30
	       bare_reply(command, reply:format(command.param))
31
	    end
32
	 else
33
	    bare_reply(command, reply)
34
	 end
35
      elseif type(reply) == 'function' then
36
	 bare_reply(command, reply(command.param))
37
      end
38
   end
39
 
40
   for k,v in pairs(bot.config.simple_commands) do
41
      bot:hook('commands/'..k, exec)
42
   end
43
end
44
 
45
-- end of simple_commands.lua