コード例 #1
0
    def client_timeout_set(self, conn, name, timeout, func, data=None):
        clientinfo = self.clients[conn]

        if name in clientinfo["timeouts"]:
            irssi.get_script().source_remove(clientinfo["timeouts"][name])

        clientinfo["timeouts"][name] = \
            irssi.get_script().timeout_add(timeout * 1000, func, data)
コード例 #2
0
    def socket_activity(self, fd, condition, sock):
        if sock != self.socket or sock.fileno() != fd:
            return False

        try:
            (conn, address) = self.socket.accept()
        except:
            irssi.prnt("RStatus: Socket error:")
            irssi.prnt(traceback.format_exc())

            self.socket.close()
            self.socket = None
            return False

        if self.debug:
            irssi.prnt("RStatus: new client connected")

        if address == '':
            address = 'UNIX Socket'
        self.last_set("connect", address)

        conn.setblocking(False)

        clientinfo = {
            "send_queue": "",
            "recv_buffer": "",
            "send_messages": False,
            "watches": {},
            "timeouts": {}
        }

        clientinfo["watches"]["recv"] = \
            irssi.get_script().io_add_watch(conn, self.client_try_recv,
                                            conn, irssi.IO_IN)
        clientinfo["watches"]["err"] = \
            irssi.get_script().io_add_watch(conn, self.client_drop_ioerror,
                                            conn, irssi.IO_ERR)
        clientinfo["watches"]["hup"] = \
            irssi.get_script().io_add_watch(conn, self.client_drop_ioerror,
                                            conn, irssi.IO_HUP)

        self.clients[conn] = clientinfo

        self.client_timeout_set(conn, "recv", self.timeout_heartbeat,
                self.client_drop_timeout, (conn, "RECV Timeout (HB, F)"))
        self.client_new(conn)

        return True
コード例 #3
0
    def client_sendwatch_add(self, conn, watch):
        clientinfo = self.clients[conn]
        assert "send" not in clientinfo["watches"]

        clientinfo["watches"]["send"] = \
            irssi.get_script().io_add_watch(conn, self.client_try_send,
                                            conn, irssi.IO_OUT)
コード例 #4
0
    def client_drop(self, conn, reason, notify=False):
        if self.debug:
            irssi.prnt("RStatus: Dropping client: '{0}'".format(reason))
        self.last_set("drop", reason)

        clientinfo = self.clients[conn]
        del self.clients[conn]

        tags = clientinfo["watches"].values() + clientinfo["timeouts"].values()
        for tag in tags:
            irssi.get_script().source_remove(tag)

        if notify and len(clientinfo["send_queue"]) == 0:
            try:
                conn.send(json.dumps({"type": "disconnect_notice"}) + "\n")
            except:
                self.client_conn_close(conn)
            else:
                irssi.get_script().timeout_add(self.timeout_drop_notify * 1000,
                                               self.client_conn_close, conn)
        else:
            self.client_conn_close(conn)
コード例 #5
0
    elif nick not in keys:
        return 0

    send_msg(server, nick, msg, command=command)
    irssi.signal_stop()
    return 1


def command_out(command, server, query):
    return privmsg_out(command, server, query, True)


load_keys()

irssi.get_script().theme_register([
    ('own_msg', irssi.current_theme().get_format('fe-common/core', 'own_msg')),
    ('own_action', irssi.current_theme().get_format('fe-common/irc',
                                                    'own_action')),
    ('pubmsg', irssi.current_theme().get_format('fe-common/core', 'pubmsg')),
    ('action_public', irssi.current_theme().get_format('fe-common/irc',
                                                       'action_public'))
])

irssi.command_bind('setkey', setkey)
irssi.command_bind('listkeys', listkeys)
irssi.command_bind('keyx', keyx)

irssi.signal_add('message private', privmsg_in)
irssi.signal_add('send text', privmsg_out)
irssi.signal_add('send command', command_out)