39 lines
936 B
Plaintext
39 lines
936 B
Plaintext
ln = require "ln"
|
|
stringx = require "pl.stringx"
|
|
|
|
class CommandRouter
|
|
new: (bot, cmdchar = "?") =>
|
|
@bot = bot
|
|
@cmdchar = cmdchar
|
|
@commands = {}
|
|
|
|
register: (verb, action) =>
|
|
self.commands[verb] = action
|
|
|
|
run: (sender, target, verb, args) =>
|
|
verb = string.upper verb
|
|
cmd = self.commands[verb]
|
|
if cmd == nil
|
|
@bot.irc\NOTICE @bot.name, sender, "unknown command verb " .. verb
|
|
return
|
|
|
|
cmd sender, target, verb, args
|
|
|
|
privmsg: (sender, params) =>
|
|
cmdchar = params[2]\sub 1, 1
|
|
destsigil = params[1]\sub 1, 1
|
|
|
|
if params[1]\lower! == @bot.name\lower!
|
|
sp = stringx.split params[2]
|
|
cmd = sp[1]
|
|
table.remove sp, 1
|
|
@run sender[1], params[1], cmd, sp
|
|
|
|
if cmdchar == @cmdchar and destsigil == "#"
|
|
sp = stringx.split params[2]
|
|
cmd = string.sub sp[1], (#@cmdchar + 1)
|
|
table.remove sp, 1
|
|
@run sender[1], params[1], cmd, sp
|
|
|
|
CommandRouter
|