Esempio n. 1
0
    def __init__(self, server, channels, nick, name):
        self.nick = nick
        
        self.irc = Irc()
        self.irc.connect(server)
        self.irc.set_info(nick, nick)
        # Lock object for sending messages
        self.sendLock = threading.Lock()

        self.channels = channels

        for channel in channels:
            self.irc.join(channel)
            self.irc.me(channel, "has initiated self-destruct sequence!")

        self.input = Input.Input(self.irc)
        self.input.registerObserver(self)
        self.input.start()

        self.output = Output.Output(self.irc)
        self.output.start()

        self.callbacks = {}
        self.activity = {} # Maps usernames to activity

        # Create bot's LyricMaster
        self.lymaster = LyricMaster()

        # Create bot's RSSReader
        self.rssReader = RSSReader()

        # Create bot's simple parser and context analyser
        self.parser = SimpleParser(ContextAnalyser())
Esempio n. 2
0
class Bot(Observer):
    """
    Simple IRC bot.

    Respond to chatter by registering callbacks which
    are triggered by a regular expression pattern match.
    """
    
    def __init__(self, server, channels, nick, name):
        self.nick = nick
        
        self.irc = Irc()
        self.irc.connect(server)
        self.irc.set_info(nick, nick)
        # Lock object for sending messages
        self.sendLock = threading.Lock()

        self.channels = channels

        for channel in channels:
            self.irc.join(channel)
            self.irc.me(channel, "has initiated self-destruct sequence!")

        self.input = Input.Input(self.irc)
        self.input.registerObserver(self)
        self.input.start()

        self.output = Output.Output(self.irc)
        self.output.start()

        self.callbacks = {}
        self.activity = {} # Maps usernames to activity

        # Create bot's LyricMaster
        self.lymaster = LyricMaster()

        # Create bot's RSSReader
        self.rssReader = RSSReader()

        # Create bot's simple parser and context analyser
        self.parser = SimpleParser(ContextAnalyser())
        
        
    def notify(self, data):
        """Respond to notification that some event being observed has occurred.

        Compares the given message against a collection
        of patterns and executes any appropriate callbacks.

        * data = {"from", "to", "message"}
        """

        for pattern in self.callbacks.keys():
            if re.match(pattern, data["message"]) != None:
                
                # This makes the bot respond directly to personal messages
                if data["to"] == self.nick:
                    data["to"] = data["from"]
                
                self.callbacks[pattern](self, data)
                break

        self.activity[data["from"]] = datetime.now()


    def register(self, pattern, callback):
        """
        Registers a callback for an input pattern.
        """
        if pattern not in self.callbacks:
            self.callbacks[pattern] = callback
        
    def unregister(self, pattern):
        """
        Unregister a function
        """
        self.callbacks.pop(pattern)

    def send(self, msg, channel=""):
        """Sends a message to specified channel."""
        self.sendLock.acquire()
        self.irc.send(channel, msg)
        self.sendLock.release()


    def me(self, msg, channel=""):
        """Sends a /me message to specified channel."""
        self.irc.me(channel, msg)