IRC 机器人:尽管已设置 USER 和 NICK,MOTD 仍未到达

1 投票
2 回答
829 浏览
提问于 2025-04-17 09:45

我正在用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 这个字符串和服务器要求的一样。

撰写回答