非常基本的Python IRC b上的“注册超时”

2024-10-04 09:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python3构建一个非常基本的Python机器人;由于我只是在学习这门语言,所以主要是从几本手册和教程中汲取经验。我现在的问题是连接到服务器,我只收到以下信息:

:ircserver NOTICE * :*** Looking up your hostname...
:ircserver NOTICE * :*** Couldn't resolve your hostname; using your IP address instead
PING :CFC3BEE0
:ircserver 451 JOIN :You have not registered
ERROR :Closing Link: Botski[serverIPaddress] (Registration Timeout)

而ircserver是服务器的地址;serverIPaddress是IP,之所以被省略是因为它与服务器无关

我在某处读到“注册超时”是由于未能响应PING而导致的。我可以看到上面写着平:CFC3BEE0

我是这样回应的

^{pr2}$

所以,我认为它应该做的是,如果它接收到一条消息,它说PING:;它应该接受字符6到13(在本例中是CFC3BEE0),将它们放入变量pongvalor并将它们发送到PING();而PING()是:

def ping(pong):
    ircsock.send(bytes("PONG :" + pong + "\r\n", "UTF-8"))

所以,它应该回应PONG:CFC3BEE0;我做错什么了吗?在

代码,以防必要时:https://pastebin.com/2HdgBF58

谢谢你的时间。在


Tags: ip服务器语言your机器人pinghostnamepython3
1条回答
网友
1楼 · 发布于 2024-10-04 09:22:36

你把这里的一些事情搞混了。在

首先,“注册超时”错误表示您没有及时注册连接,服务器关闭了连接。第二,您不需要向服务器发送PING消息;serveryou发送一个PING,而you会回复一个匹配的PONG,但这不是(通常情况下,请参见结束)连接注册的一部分。这些消息用于测试连接另一端的存在性,这几乎总是为了确保连接仍然有效。在

Connection Registration是指初始的NICK和{}消息,必须在发送任何其他消息之前由连接客户端发送到IRC服务器。如RFC 1459所述,基本连接注册是一个2-3步的过程:

  1. 可选PASS包含服务器密码的消息
  2. NICK消息
  3. USER消息

PASS消息是可选的,但是如果需要,则必须在NICK和{}消息之前发送该消息。在

功能协商也在此时进行,但这超出了这个答案的范围,而且实际上是基本的rfc1459遵从性。现在不用担心。在

一旦服务器接收到NICKUSER消息,连接注册将完成,然后服务器将继续执行RPL_WELCOMERPL_ISUPPORT、服务器信息、MOTD等常规程序。此时您可以发送任何其他任意的IRC消息,例如JOIN。在

一些服务器在接收到NICK/USER对后也会立即发送PING,并在完成连接注册之前期待一个匹配的PONG,因此请确保您的recv循环足够早地开始处理这个问题。在

总结

您需要在连接到服务器后立即注册连接。{{cda}在此阶段,{cda}可能不需要发送。如果注册成功,服务器将向您致意,并发送诸如MOTD之类的常规消息。在

相关问题 更多 >