All pastes #741910 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-10-19 02:05 UTC
rendered paste body
#!/usr/bin/env python

import sys
sys.path.append('./irclib-0.3.1')
import ircbot
import Config
import os
import glob
import imp
from types import ClassType
from irclib import nm_to_n, nm_to_uh

VERSION="benzo-0.3 http://www.sourceforge.net/projects/benzo"

class Benzo(ircbot.SingleServerIRCBot):
    def __init__(self):
        self.version = VERSION
        self.config = Config
        # this is hackish - find away for events to expose this themselves
        self.nm_to_n = nm_to_n
        self.nm_to_uh = nm_to_uh
        ircbot.SingleServerIRCBot.__init__(self, self.config.SERVER_LIST,
                                         self.config.NICKNAME,
                                         self.config.REALNAME)

        self.event_dict = {}    # dict of event->(priority, handler)
        self.modules = {}       # dict of handler modules
        self.interfaces = {}    # dict of module-provided interfaces
        self.init_modules()
        self.connection.add_global_handler("all_events",
                                           self.dispatcher, -10)

    def dispatcher(self, connection, event):
        """ dispatch events to handlers. """
        # TODO:  abstract away from the irclib 'event' and 'connection classes
        #        to provide a more high-level interface to modules. pubmsg
        #        and privmsg are 99% of what this bot deals with, so make those
        #        easy to work with

        # lets not doubly dispatch events
        if event.eventtype() == "all_raw_messages": return
        if self.event_dict.has_key(event.eventtype()):
            handler_list = self.event_dict[event.eventtype()]
            # sort the handler list by priority - lowest wins
            handler_list.sort()
            print "Got %d handlers for %s" % (len(handler_list),  on and on