summaryrefslogtreecommitdiff
path: root/fot.py
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2010-05-26 18:33:03 +0200
committerJon Bergli Heier <snakebite@jvnv.net>2010-05-26 18:33:03 +0200
commitc23d205928499b578e0742363dbfd8dc0116f394 (patch)
tree3b28becd52bd3cee3af26b6bcbd484df8bc4dd9f /fot.py
parentb4b59bf076d8d4ec22b489174707ecda72a1c06e (diff)
Replaced module's __call__ with a keyword mechanism.
Diffstat (limited to 'fot.py')
-rwxr-xr-xfot.py18
1 files changed, 15 insertions, 3 deletions
diff --git a/fot.py b/fot.py
index cd7b1ed..64939d4 100755
--- a/fot.py
+++ b/fot.py
@@ -56,10 +56,16 @@ class Bot(irc.IRCClient):
def __init__(self):
bots.append(self)
self.modules = {}
+ self.keywords = {}
def __repr__(self):
return '<Bot %s@%s>' % (self.nickname, self.factory.server)
+ def register_keyword(self, kw, mod):
+ if kw in self.keywords and self.keywords[kw] != mod:
+ raise Exception('Keyword "%s" already in use' % kw)
+ self.keywords[kw] = mod
+
def apply_modules(self):
# Call stop() for each module if neccessary (can't rely on __del__ here)
for m in self.modules.itervalues():
@@ -80,9 +86,15 @@ class Bot(irc.IRCClient):
self.join(chan)
def privmsg(self, nick, channel, msg):
- for m in self.modules.keys():
- if (config.has_option(self.factory.server, m) and channel in config.get(self.factory.server, m)) or (channel == self.nickname and nick.split('!')[0] != self.nickname):
- self.modules[m](nick, channel, msg)
+ msg = msg.split(None, 1)
+ if not len(msg):
+ return
+ elif len(msg) == 1:
+ kw, msg = msg[0], ''
+ else:
+ kw, msg = msg
+ if kw in self.keywords:
+ self.keywords[kw].keyword(nick, channel, kw, msg)
def kickedFrom(self, channel, kicker, message):
self.join(channel)