"注册超时"在非常基本的Python IRC bot上

时间:2017-11-01 00:56:20

标签: python python-3.x irc

我正在Python 3中构建一个非常基本的Python BOT;因为我刚学习语言,所以主要提供了几本手册和教程。我现在的问题是连接到服务器,我收到的是以下内容:

: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,因为它是无关的

我已经阅读了#34;注册超时"是由于未能回应PING而引起的。我可以在那里看到PING:CFC3BEE0

我这样回答

if ircmsg.find("PING :") != -1: 
    pongvalor = ircmsg[6:13]
    ping(pongvalor)

所以,我认为应该做的是,如果它收到一条消息,说它是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

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

你在这里混淆了几件事。

首先,&#34;注册超时&#34;错误表示您没有及时注册连接,服务器关闭了连接。其次,您不需要向服务器发送PING消息; 服务器将<{1}}发送给以匹配的PING回复,但这不是(通常;见末尾)连接注册的一部分。这些消息用于测试连接另一端的存在,这几乎总是用于确保连接仍然存在。

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

  1. 可选USER消息,其中包含服务器密码
  2. PASS消息
  3. NICK消息
  4. USER邮件是可选的,但如果需要,则必须才会在PASSNICK邮件之前发送。

    此时也会进行能力协商,但这超出了本答案的范围,实际上是基本的RFC 1459合规性。暂时不要担心。

    服务器收到USERNICK消息后,连接注册将完成,然后服务器将继续执行USER {{1}的常规例程现在,您可以在此时发送任何其他任意IRC消息,例如RPL_WELCOME

    有些服务器在收到RPL_ISUPPORT / JOIN对后立即发送PING,并且在完成连接注册之前需要匹配NICK,因此请确保{{1}循环开始得足以处理这个问题。

    摘要

    连接服务器后,您需要立即注册连接。在此阶段,服务器可能会或可能不会发送USER并期望PONG。如果注册成功,服务器将迎接您,并发送常用消息,如MOTD。