Exemple #1
0
 def show_version(self, event):
     if ibid_version():
         event.addresponse(u'I am version %s', ibid_version())
     else:
         event.addresponse(u"I don't know what version I am :-(")
Exemple #2
0
 def ctcpQuery_VERSION(self, user, channel, data):
     nick = user.split("!")[0]
     self.ctcpMakeReply(nick,
                        [('VERSION', 'Ibid %s' % (ibid_version() or '', ))])
Exemple #3
0
 def ctcpQuery_VERSION(self, user, channel, data):
     nick = user.split("!")[0]
     self.ctcpMakeReply(nick, [('VERSION', 'Ibid %s' % (ibid_version() or '',))])
Exemple #4
0
Fichier : dc.py Projet : vhata/ibid
class DCBot(dcwords.DCClient):
    version = ibid_version() or 'dev'
    client = 'Ibid'

    def connectionMade(self):
        self.keepalive = True
        self.ping_interval = self.factory.ping_interval
        self.pong_timeout = self.factory.pong_timeout

        self.my_nickname = self.factory.nick
        self.my_password = self.factory.password
        self.my_interest = self.factory.interest
        self.my_speed = self.factory.speed
        self.my_email = self.factory.email
        self.my_sharesize = self.factory.sharesize
        self.my_slots = self.factory.slots

        dcwords.DCClient.connectionMade(self)

        self.factory.resetDelay()
        self.factory.send = self.send
        self.factory.proto = self

        self.auth_callbacks = {}

        self.factory.log.info(u"Connected")

    def connectionLost(self, reason):
        self.factory.log.info(u"Disconnected (%s)", reason)

        event = Event(self.factory.name, u'source')
        event.status = u'disconnected'
        ibid.dispatcher.dispatch(event)

        dcwords.DCClient.connectionLost(self, reason)

    def signedOn(self):
        names = ibid.config.plugins['core']['names']
        if self.my_nickname not in names:
            self.factory.log.info(u'Adding "%s" to plugins.core.names',
                                  self.my_nickname)
            names.append(self.my_nickname)
            ibid.config.plugins['core']['names'] = names
            ibid.reloader.reload_config()

        event = Event(self.factory.name, u'source')
        event.status = u'connected'
        ibid.dispatcher.dispatch(event)

        event = Event(self.factory.name, u'source')
        event.channel = u'$public'
        event.status = u'joined'
        ibid.dispatcher.dispatch(event)

        self.factory.log.info(u"Signed on")

    def _create_event(self, type, user):
        event = Event(self.factory.name, type)
        event.sender['connection'] = user
        event.sender['id'] = user
        event.sender['nick'] = user
        event.channel = u'$public'
        event.public = True
        return event

    def _state_event(self, user, action):
        event = self._create_event(u'state', user)
        event.state = action
        ibid.dispatcher.dispatch(event).addCallback(self.respond)

    def _message_event(self, msgtype, user, private, msg):
        event = self._create_event(msgtype, user)
        event.message = msg
        self.factory.log.debug(u'Received %s from %s in %s: %s', msgtype,
                               event.sender['id'], private and u'private'
                               or u'public', event.message)

        if private:
            event.addressed = True
            event.public = False
            event.channel = event.sender['connection']
        else:
            event.public = True

        ibid.dispatcher.dispatch(event).addCallback(self.respond)

    def privmsg(self, user, private, msg):
        self._message_event(u'message', user, private, msg)

    def userJoined(self, user):
        self._state_event(user, u'online')

    def userQuit(self, user):
        self._state_event(user, u'offline')

    def respond(self, event):
        for response in event.responses:
            self.send(response)

    def send(self, response):
        message = response['reply']

        if message:
            for prefix in self.factory.banned_prefixes:
                if message.startswith(prefix):
                    self.factory.log.info(u'Suppressed banned response: %s',
                                          message)
                    return

        target = response['target']
        if target == '$public':
            target = None

        if response.get('topic', False):
            self.topic(message)
            self.factory.log.debug(u'Set topic to %s', message)
        elif response.get('action', False):
            if self.factory.action_prefix and target is None:
                self.say(target,
                         u'%s %s' % (self.factory.action_prefix, message))
            elif self.factory.action_prefix:
                self.say(target, u'*%s*' % message)
            else:
                self.say(target, message)

            self.factory.log.debug(u"Sent action to %s: %s", target, message)
        else:
            self.say(target, message)
            self.factory.log.debug(u"Sent privmsg to %s: %s", target, message)

    def authenticate(self, nick, callback):
        self.auth_callbacks[nick] = callback
        self.sendLine('$GetNickList')

    def dc_OpList(self, params):
        dcwords.DCClient.dc_OpList(self, params)
        done = []
        for nick, callback in self.auth_callbacks.iteritems():
            if nick in self.hub_users and self.hub_users[nick].op is True:
                callback(nick, True)
            else:
                callback(nick, False)
            done.append(nick)
        for nick in done:
            del self.auth_callbacks[nick]