From c23d205928499b578e0742363dbfd8dc0116f394 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Wed, 26 May 2010 18:33:03 +0200 Subject: Replaced module's __call__ with a keyword mechanism. --- fot.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'fot.py') 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 '' % (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) -- cgit v1.2.3