""" MegaHAL - MegaHAL bot for IRC Copyright (C) 2010 Brian S. Stephan This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ from ConfigParser import NoOptionError import os import re from extlib import irclib from extlib import megahal from Module import Module class MegaHAL(Module): """Have an annoying, dumb, and hilarious chatterbot on IRC.""" def __init__(self, config, server, modlist): """ Upon creation, open the MegaHAL brain and get ready for doing actual stuff. """ Module.__init__(self, config, server, modlist) try: filename = self.config.get(self.__class__.__name__, 'brainfile') self.megahal = megahal.MegaHAL(None, filename, 1) except NoOptionError: self.megahal = megahal.MegaHAL() def reload(self, connection, event, nick, userhost, replypath, what, admin_unlocked): """ Broken. Don't do anything. TODO: figure out why this is broken. (probably because nothing closes the old brain file or deletes the old object, and then all hell breaks loose.) """ def do(self, connection, event, nick, userhost, replypath, what, admin_unlocked): """ Say something on IRC if the bot is being addressed, or at least learn what was said. """ line = what reply = "" append_nick = False if re.search(connection.get_nickname(), line, re.IGNORECASE) is not None: addressed_pattern = '^' + connection.get_nickname() + '[:,]\s+' addressed_re = re.compile(addressed_pattern) if addressed_re.match(line): line = addressed_re.sub('', line) append_nick = True reply = self.megahal.get_reply(line) elif re.search('^megahal$', line, re.IGNORECASE) is not None: reply = self.megahal.get_reply_nolearn('') elif replypath is not None: # only learn if the command is not an internal one self.megahal.learn(line) self.megahal.sync() if reply is not "": if append_nick: reply = nick + ": " + reply return self.reply(connection, replypath, reply) # vi:tabstop=4:expandtab:autoindent # kate: indent-mode python;indent-width 4;replace-tabs on;