Beispiel #1
0
 def __init__(self):
     self.logger = getlogger(self)
     self.plugin_manager = PluginManager(self)
Beispiel #2
0
class Core(irc.IRCClient):
    def __init__(self):
        self.logger = getlogger(self)
        self.plugin_manager = PluginManager(self)


    def lineReceived(self, line):
        if isinstance(line, str):
            line = line.decode(self.encoding, 'replace')
        irc.IRCClient.lineReceived(self, line)

    def sendLine(self, line):
        if isinstance(line, unicode):
            line = line.encode(self.encoding, 'replace')
        irc.IRCClient.sendLine(self, line)


    def connectionMade(self):
        self.config = self.factory.config
        self.host = self.config.general['host']
        self.port = self.config.general['port']
        self.encoding = self.config.general['encoding']

        # connect
        self.nickname = self.config.general['nickname']
        self.password = self.config.general['password']
        irc.IRCClient.connectionMade(self)
        self.logger.info('connected')

        # load plugins
        self.plugin_manager.load_plugins(self.config.general['plugin_dir'])
        self.plugin_manager.push(events.CONNECTION_MADE)

    def connectionLost(self, reason):
        irc.IRCClient.connectionLost(self, reason)
        self.logger.info('disconnected')
        self.plugin_manager.push(events.CONNECTION_LOST, reason=reason)

    def signedOn(self):
        self.logger.info('signed on')
        self.plugin_manager.push(events.SIGNED_ON)


    def joined(self, channel):
        self.userJoined(self.nickname, channel)

    def userJoined(self, user, channel):
        self.logger.debug('<%s> %s has joined', channel, user)
        self.plugin_manager.push(events.JOIN, user=user, channel=channel)

    def left(self, channel):
        self.userLeft(self.nickname, channel)

    def userLeft(self, user, channel):
        self.logger.debug('<%s> %s has left', channel, user)
        self.plugin_manager.push(events.LEFT, user=user, channel=channel)

    def userQuit(self, user, message):
        self.logger.debug('%s has quit (%s)', user, message)
        self.plugin_manager.push(events.QUIT, user=user, message=message)

    def modeChanged(self, user, channel, added, modes, params):
        user = user.split('!', 1)[0]
        params = tuple([param for param in params if param])
        self.logger.debug('<%s> %s has changed mode: %c%s %s', channel, user, if_(added, '+', '-'), modes, ' '.join(params))
        self.plugin_manager.push(events.MODE, user=user, channel=channel, added=added, params=params)

    def privmsg(self, user, channel, message):
        user = user.split('!', 1)[0]
        self.logger.debug('<%s> %s: %s', channel, user, message)

        if channel == self.nickname:
            self.plugin_manager.push(events.TALK, user=user, message=message)
        else:
            params = message.split()
            if len(params) >= 1:
                command = params.pop(0)
                self.plugin_manager.push(events.COMMAND, command=command, user=user, channel=channel, params=params)
            self.plugin_manager.push(events.PRIVMSG, user=user, channel=channel, message=message)

    def noticed(self, user, channel, message):
        user = user.split('!', 1)[0]
        self.logger.debug('(NOTICE) <%s> %s: %s', channel, user, message)
        self.plugin_manager.push(events.NOTICE, user=user, channel=channel, message=message)

    def nickChanged(self, newnick):
        oldnick = self.nickname
        self.nickname = newnick
        self.userRenamed(oldnick, newnick)

    def userRenamed(self, oldnick, newnick):
        self.logger.debug('%s is now known as %s', oldnick, newnick)
        self.plugin_manager.push(events.NICK, oldnick=oldnick, newnick=newnick)

    def kickedFrom(self, channel, kicker, message):
        self.userKicked(self.nickname, channel, kicker, message)

    def userKicked(self, kicked, channel, kicker, message):
        self.logger.debug('<%s> %s has kicked %s (%s)', channel, kicker, kicked, message)
        self.plugin_manager.push(events.KICK, kicked=kicked, kicker=kicker, channel=channel, message=message)

    def topicUpdated(self, user, channel, topic):
        self.logger.debug('<%s> %s has set topic: %s', channel, user, topic)
        self.plugin_manager.push(events.TOPIC, user=user, topic=topic, channel=channel)