pieces = line.split()
if not self.conn.registered() and pieces[0] == "NOTICE":
- self.conn.register()
+ self.conn.register()
+ return
- elif pieces[1] == "001":
+ if self.parent.hasnumhook(pieces[1]):
+ hooks = self.parent.getnumhook(pieces[1])
+ for callback in hooks:
+ callback(self, line)
+
+ if pieces[1] == "001":
self.conn.registered(True)
for c in self.chans:
self.join(c.name)
cmd = pieces[0].lower()
if self.parent.hashook(cmd):
- callback = self.parent.gethook(cmd)
- if chan is None and callback.needchan:
- self.msg(user, "You need to specify a channel for that command.")
- return
- if user.glevel >= callback.reqglevel:
- #TODO TODO TODO check reqclevel
- cbret = callback(self, user, chan, target, *pieces[1:])
- if cbret is NotImplemented:
- self.msg(user, "Command not implemented.")
- return
+ for callback in self.parent.gethook(cmd):
+ if chan is None and callback.needchan:
+ self.msg(user, "You need to specify a channel for that command.")
+ continue
+ if user.glevel >= callback.reqglevel:
+ #TODO TODO TODO check reqclevel
+ cbret = callback(self, user, chan, target, *pieces[1:])
+ if cbret is NotImplemented:
+ self.msg(user, "Command not implemented.")
+ continue
self.msg(user, "No such command, or you don't have access.")
bots = {}
fds = {}
mods = {}
+ numhandlers = {}
msghandlers = {}
users = {}
chans = {}
#bind functions
def hook(self, word, handler):
- self.msghandlers[word] = handler
- def unhook(self, word):
- del self.msghandlers[word]
+ try:
+ self.msghandlers[word].append(handler)
+ except:
+ self.msghandlers[word] = [handler]
+ def unhook(self, word, handler):
+ if word in self.msghandlers and handler in self.msghandlers[word]:
+ self.msghandlers[word].remove(handler)
def hashook(self, word):
- return word in self.msghandlers
+ return word in self.msghandlers and len(self.msghandlers[word]) != 0
def gethook(self, word):
return self.msghandlers[word]
+ def hooknum(self, word, handler):
+ try:
+ self.numhandlers[word].append(handler)
+ except:
+ self.numhandlers[word] = [handler]
+ def unhooknum(self, word, handler):
+ if word in self.numhandlers and handler in self.numhandlers[word]:
+ self.numhandlers[word].remove(handler)
+ def hasnumhook(self, word):
+ return word in self.numhandlers and len(self.numhandlers[word]) != 0
+ def getnumhook(self, word):
+ return self.numhandlers[word]
+
def setup():
global cfg, main
return True
def modstop(self, parent):
for cmd, func in self.hooks.iteritems():
- self.parent.unhook(cmd)
+ self.parent.unhook(cmd, func)
return True
def hook(self, cmd, needchan=True, glevel=ANYONE, clevel=PUBLIC):