Skip to main content

RFC1459 和 IRCv3 协议标记器

项目描述

代币

构建状态

理由

世界上有太多的 IRC 客户端实现无法正确标记数据,因此成为冒号之类的牺牲品,它们要么在您不期望的地方,要么不在您期望的地方。

用法

安装

$ pip3 install irctokens

代币化

>>> import irctokens
>>> line = irctokens.tokenise(
...     "@id=123 :jess!~jess@hostname PRIVMSG #chat :hello there!")
>>>
>>> line.tags
{'id': '123'}
>>> line.source
'jess!~jess@hostname'
>>> line.hostmask
Hostmask(nickname='jess', username='~jess', hostname='hostname')
>>> line.command
'PRIVMSG'
>>> line.params
['#chat', 'hello there!']

格式化

>>> irctokens.build("USER", ["user", "0", "*", "real name"]).format()
'USER user 0 * :real name'

有状态的

下面是一个完全基于套接字的安全 IRC 客户端连接示例,它将连接并加入通道。协议发送和接收都由 irctokens 处理。

import irctokens, socket

NICK = "nickname"
CHAN = "#channel"

d = irctokens.StatefulDecoder()
e = irctokens.StatefulEncoder()
s = socket.socket()
s.connect(("127.0.0.1", 6667))

def _send(line):
    print(f"> {line.format()}")
    e.push(line)
    while e.pending():
        e.pop(s.send(e.pending()))

_send(irctokens.build("USER", ["username", "0", "*", "real name"]))
_send(irctokens.build("NICK", [NICK]))

while True:
    lines = d.push(s.recv(1024))
    if lines == None:
        print("! disconnected")
        break

    for line in lines:
        print(f"< {line.format()}")
        if line.command == "PING":
            to_send = irctokens.build("PONG", [line.params[0]])
            _send(to_send)

        elif line.command == "001":
            to_send = irctokens.build("JOIN", [CHAN])
            _send(to_send)

接触

#irctokensirc.libera.chat 打个招呼

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

irctokens-2.0.2.tar.gz (7.0 kB 查看哈希

已上传 source

内置分布

irctokens-2.0.2-py3-none-any.whl (10.6 kB 查看哈希

已上传 py3