Mon, 21 Dec 2009 19:27:08 +0000
Initial commit, hello world!
0 | 1 | require "util.xstanza" |
2 | ||
3 | function riddim.plugins.commands(bot) | |
4 | local function handle_message(message) | |
5 | -- Parse message body | |
6 | end | |
7 | ||
8 | local command_pattern = "^%"..(bot.config.command_prefix or "@").."([%a%-%_%d]+)(%s?)(.*)$"; | |
9 | ||
10 | local function process_command(event) | |
11 | local body, sender = event.body, event.sender; | |
12 | if not body then return; end | |
13 | if event.delay then return; end -- Don't process old messages | |
14 | ||
15 | local command, hasparam, param = body:match(command_pattern); | |
16 | ||
17 | if not command then | |
18 | command, hasparam, param = body:match("%[([%a%-%_%d]+)(%s?)(.*)%]"); | |
19 | end | |
20 | ||
21 | if hasparam ~= " " then param = nil; end | |
22 | ||
23 | if command then | |
24 | local command_event = { | |
25 | command = command, | |
26 | param = param, | |
27 | sender = sender, | |
28 | stanza = event.stanza, | |
29 | reply = event.reply, | |
30 | room = event.room, | |
31 | }; | |
32 | local ret = bot:event("commands/"..command, command_event); | |
33 | if type(ret) == "string" then | |
34 | event:reply(ret); | |
35 | end | |
36 | return ret; | |
37 | end | |
38 | end | |
39 | ||
40 | -- Hook messages to bot and from rooms, fire a command event on the bot | |
41 | bot:hook("message", process_command); | |
42 | ||
43 | bot:hook("groupchat/joining", function (room) | |
44 | room:hook("message", process_command); | |
45 | end); | |
46 | end |