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
查看哈希)
内置分布
irctokens-2.0.2-py3-none-any.whl
(10.6 kB
查看哈希)