IRC 机器人:尽管已设置 USER 和 NICK,MOTD 仍未到达
我正在用Python制作一个IRC机器人,目的是为了完成hackthissite的挑战(prog 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(消息),所以当我尝试做任何事情时,就会出现“你没有注册”的错误。
我在谷歌上查了一些类似的问题,发现大家的情况通常是忘记发送他们的USER和NICK,所以我真的不知道该怎么做了。
2 个回答
1
除了Truth的正确答案,VERSION
消息是一种CTCP消息。这个消息的特点是它的内容被一些不可见的ASCII字符包围,这些字符是\001
(也就是CTRL-A)。实际上,它的格式是\001VERSION\001
。
要回复这个消息,你需要发送一个PRIVMSG
回去,格式也要是CTCP消息,比如说\001VERSION Nyubis Python Bot\001
。
1
你必须对服务器发来的 PING
发送 PONG
的回应,否则服务器会认为连接已经断开了。
在你发的例子中,正确的回复应该是
PONG :3C8E9173
3C8E9173 这个字符串和服务器要求的一样。