]> jfr.im git - erebus.git/commitdiff
Added numeric handlers.
authorJohn Runyon <redacted>
Thu, 23 Jan 2014 23:06:22 +0000 (17:06 -0600)
committerJohn Runyon <redacted>
Thu, 23 Jan 2014 23:06:22 +0000 (17:06 -0600)
bot.py
erebus.py
modlib.py

diff --git a/bot.py b/bot.py
index 0f2c7e6e782541d35ed09c3438cb30fbb084c4fd..55c205df6cdfc88068ba9a7231a76db05c4065e2 100644 (file)
--- a/bot.py
+++ b/bot.py
@@ -45,9 +45,15 @@ class Bot(object):
                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)
@@ -105,16 +111,16 @@ class Bot(object):
                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.")
 
index c91e24cc49b0f1603eddaff8c1467b23a2d5d9e5..38e865dd6429727590a989cf3d9deb4bbc50a716 100644 (file)
--- a/erebus.py
+++ b/erebus.py
@@ -12,6 +12,7 @@ class Erebus(object):
        bots = {}
        fds = {}
        mods = {}
+       numhandlers = {}
        msghandlers = {}
        users = {}
        chans = {}
@@ -148,14 +149,31 @@ class Erebus(object):
 
        #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
 
index 717406a6109b46149d2ae8f61a54704650fb5307..696288104f4aecb3b476ad34e942fd2cc2e552e7 100644 (file)
--- a/modlib.py
+++ b/modlib.py
@@ -44,7 +44,7 @@ class modlib(object):
                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):