示例#1
0
 def on_pubmsg(self, event):
     name = event.target()
     if name not in self.channels:
         channel = Channel(self, name)
         self.channels[name] = channel
     else:
         channel = self.channels[name]
     channel.add_message(event.source(), event.arguments()[0])
示例#2
0
    def __init__(self, name, config, irc):
        self.irc = irc

        self.name = name
        self.config = config
        self.nick = config['nick']
        self.server = config['servers'].keys()[0]
        self.password = config['servers'][self.server]['password']
        self.port = config['servers'][self.server]['port']
        self.ssl = config['servers'][self.server]['ssl']
        self.verify = config['servers'][self.server]['verify']

        self.connected = False
        self.connection = None
        self.root = Channel(self, '')
        self.channels = {}

        async_ui_message('new_channel', self, self.root)
示例#3
0
class Network(Listener):
    def __init__(self, name, config, irc):
        self.irc = irc

        self.name = name
        self.config = config
        self.nick = config['nick']
        self.server = config['servers'].keys()[0]
        self.password = config['servers'][self.server]['password']
        self.port = config['servers'][self.server]['port']
        self.ssl = config['servers'][self.server]['ssl']
        self.verify = config['servers'][self.server]['verify']

        self.connected = False
        self.connection = None
        self.root = Channel(self, '')
        self.channels = {}

        async_ui_message('new_channel', self, self.root)

    def __repr__(self):
        return '<pyranha.Network({0})>'.format(self.name)

    def __str__(self):
        return 'Network({0})'.format(self.name)

    def connect(self):
        self.connection = self.irc.server()
        self.connection.connect(self.server,
                                self.port,
                                self.nick,
                                password=self.password,
                                username='******',
                                ircname='pyranha',
                                ssl=self.ssl,
                                )

        self.connected = False
        self.nick_retry = 0

        return self.connection

    def disconnect(self):
        if self.connection is not None:
            self.connection.disconnect()
        self.connected = False

    def raw(self, message):
        self.connection.send_raw(message)

    def on_join(self, event):
        name = event.target()
        channel = Channel(self, name)
        self.channels[name] = channel

        async_ui_message('new_channel', self, channel)

    def on_ping(self, event):
        self.root.add_message(event.source(), 'PING!')
        self.connection.pong(*event.arguments())
        self.root.add_message(event.source(), 'PONG!')

    def on_pubmsg(self, event):
        name = event.target()
        if name not in self.channels:
            channel = Channel(self, name)
            self.channels[name] = channel
        else:
            channel = self.channels[name]
        channel.add_message(event.source(), event.arguments()[0])

    def on_nicknameinuse(self, event):
        if not self.connected:
            if self.nick_retry < 2:
                self.nick += ''
            else:
                self.nick = 'pyranha' + str(random.randint(1000, 9999))

            self.nick_retry += 1
            self.connection.nick(self.nick)

        else:
            self.root.add_message(event.source(), event.arguments()[1])

    def on_welcome(self, event):
        log_irc_event(event)
        self.connected = True
        self.nick = event.target()
        self.root.add_message(event.source(), event.arguments()[0])

        for channel in self.config['channels']:
            key = self.config['channels'][channel]
            key = '' if key is None else key

            if not channel.startswith('#'):
                channel = '#' + channel

            log.info('auto-joining {0}'.format(channel))
            self.connection.join(channel, key=key)