pieces.pop(0) # command actually starts with next word
msg = ' '.join(pieces) # command actually starts with next word
elif not triggerused:
- return # not to bot, don't process!
+ if self.parents.haschanhook(target.lower()):
+ for callback in self.parent.getchanhook(target.lower()):
+ cbret = callback(self, user, chan, *pieces[1:])
+ if cbret is NotImplemented:
+ self.msg(user, "Command not implemented.")
+ else:
+ return # not to bot, don't process!
except IndexError:
return # Fix if you feel like it /BiohZn
def getnumhook(self, word):
return self.numhandlers[word]
+ def hookchan(self, chan, handler):
+ try:
+ self.chanhandlers[word].append(handler)
+ except:
+ self.chanhandlers[word] = [handler]
+ def unhookchan(self, chan, handler):
+ if chan in self.chanhandlers and handler in self.chanhandlers[chan]:
+ self.chanhandlers[chan].remove(handler)
+ def haschanhook(self, chan):
+ return chan in self.chanhandlers and len(self.chanhandlers[chan]) != 0
+ def getchanhook(self, chan):
+ return self.chanhandlers[chan]
class MyCursor(MySQLdb.cursors.DictCursor):
def __init__(self, name):
self.hooks = {}
self.numhooks = {}
+ self.chanhooks = {}
self.parent = None
self.name = name
self.parent.hook(cmd, func)
for num, func in self.numhooks.iteritems():
self.parent.hooknum(num, func)
+ for chan, func in self.chanhooks.iteritems():
+ self.parent.hookchan(chan, func)
return True
def modstop(self, parent):
for cmd, func in self.hooks.iteritems():
self.parent.unhook(cmd, func)
for num, func in self.numhooks.iteritems():
self.parent.unhooknum(num, func)
+ for chan, func in self.chanhooks.iteritems():
+ self.parent.hookchan(chan, func)
return True
def hooknum(self, num):
return func
return realhook
+ def hookchan(self, chan, glevel=ANYONE, clevel=PUBLIC):
+ def realhook(func):
+ self.chanhooks[chan] = func
+ if self.parent is not None:
+ self.parent.hookchan(chan, func)
+ return func
+ return realhook
+
def hook(self, cmd, needchan=True, glevel=ANYONE, clevel=PUBLIC):
def realhook(func):
func.needchan = needchan