IRC bot:即使我做了USER和NICK,MOTD也没有来

时间:2012-01-07 18:55:23

标签: python version irc bots

我正在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,所以当我尝试做任何事情时,我得到“你没有注册”的错误。

谷歌取得了一些人们解释类似问题的结果,但总是他们忘记发送他们的用户和尼克,所以我真的不知道该怎么做。

2 个答案:

答案 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