我正在python中制作一个用于hackthissite挑战的IRC机器人(编程8)。 以下是连接代码的摘录:
def ping():
ircsock.send("PONG :Pong\n")
ircsock.connect((server,6667))
ircsock.send("USER "+botnick+" "+server+" "+botnick+" :"+version+"\n")
ircsock.send("NICK "+botnick+"\n")
while(connect):
ircmsg = ircsock.recv(2048)
ircmsg = ircmsg.strip('\n\r')
print(ircmsg)
if(ircmsg.find("PING :") != -1):
ping()
我认为这没有任何问题。 所有变量都已定义并具有值,此代码在某些服务器上运行时没有问题(例如freenode)。但在其他服务器(foonetic,hackthissite)上我得到以下输出:
:hub.irc.hackthissite.org NOTICE AUTH :*** Looking up your hostname...
:hub.irc.hackthissite.org NOTICE AUTH :*** Found your hostname
PING :3C8E9173
:3C8E9173!nospoof@hub.irc.hackthissite.org PRIVMSG Tadbot :VERSION
我不知道该怎么做。我已经尝试将我的机器人版本发送回“:”和“!”之间的用户名,其中(如预期的那样)没有做任何事情。在发生这种情况的服务器上,我从来没有得到我的MOTD,所以当我尝试做任何事情时,我得到“你没有注册”的错误。
谷歌取得了一些人们解释类似问题的结果,但总是他们忘记发送他们的用户和尼克,所以我真的不知道该怎么做。答案 0 :(得分:1)
您必须将PONG
响应发送到服务器的PING
,否则服务器会认为连接已经死亡。
您发布的示例中的正确回复将是
PONG :3C8E9173
3C8E9173与服务器请求的字符串相同。
答案 1 :(得分:1)
除了Truth's correct answer之外,VERSION
消息是CTCP消息。这由PRIVMSG
的有效负载表示,该有效负载由不可打印的ASCII \001
(CTRL-A)字符包围;它实际上是\001VERSION\001
。
要回复它,您需要将PRIVMSG
发送回源缺口,并将其格式化为CTCP消息:例如。 \001VERSION Nyubis Python Bot\001
。