【问题标题】:JOINing an IRC Channel Doesn't Seem to Function加入 IRC 频道似乎不起作用
【发布时间】:2012-10-26 08:00:59
【问题描述】:

我有一个工作机器人(感谢 abarnert),但它有一个错误:它不会加入频道。他可以让它工作,但我不能。我意识到这可能是我这边的一个问题,但我在 X-Chat 上连接得很好。

host = "irc.kbfail.net"
port = 6667
nick = "Alice"
ident = "Alice"
realname = "Alice"
channel = "#nb"
readbuffer = ""

irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( host, port ) )
print irc.recv ( 4096 )
irc.send ("NICK %s\r\n" % nick)
irc.send ("USER %s %s bla :%s\r\n" % (ident, host, realname))
irc.send ("JOIN %s\r\n" % channel)

这完全取决于 JOIN 命令。我的机器人已连接到服务器并停在 ":Alice MODE Alice :+x"

【问题讨论】:

    标签: python irc


    【解决方案1】:

    正如我在your other question 中解释的那样,您确实需要记录输入和输出以查看发生了什么。这是您(或其他任何人)能够对此进行调试的唯一方法。

    同样,有多种方法可以做到这一点:破解你的机器人源以打印它在套接字上接收和发送的所有内容,使用 netcat 运行假服务器,将 netcat 设置为代理,运行已设置的本地 IRC 服务器要记录所有内容,请使用 Wireshark 捕获网络上的消息……您选择哪一个并不重要,但您需要做其中之一。

    通过在我自己的本地副本上执行此操作,我可以看到您发送 JOIN 太早,并且您从服务器收到了错误:

    :asgard.kbfail.net 451 JOIN :You have not registered
    

    同时,您的机器人停在 MODE 行的原因是在那之后没有人向您发送任何内容。启动客户端和/MSG Alice foo,您会发现您仍然可以正常接收消息。

    那么,什么时候发送 JOIN 合适呢?我的猜测是您需要等到 /MOTD 之后,或者可能在自动 MODE 命令之后,或者在它确认您的 NICK 命令之后。但实际上,你不应该在这里猜测。 The IRC protocol is very well documented,并没有那么复杂。

    除此之外,除非您将此作为学习如何编写基于套接字的客户端应用程序的练习,否则您会浪费大量时间;有几十个开源 Python IRC 机器人和模块可帮助编写 IRC 机器人,因此您不必自己处理所有这些低级的东西,因为快速的 Google 搜索会告诉您。

    【讨论】:

    • 如果你这样做是为了学习,那么你应该阅读 IRC RFC,在你成功发送 NICK 和 USER 后,你应该得到一个 PING ,在其中你回复 PONG 然后你得到欢迎信息,并且可以在 MOTD 之后加入房间
    • +1 致 Gunner——如果您不知道如何找到 RFC,请参阅上面我的答案中的链接。同时,如果您想学习,学习如何通过观察通信和查找错误消息来调试网络协议是最重要的课程之一。
    • 我正在用这个来学习。我想我已经学到了足够的知识来涵盖基础知识。我将获得其中一个机器人并对其进行深入了解以了解更多信息。感谢您的帮助!
    • 问题出在服务器上 (kbfail)。我尝试了其他几个,它的工作原理。我正在使用 Progbot,发现它非常好:)
    • 这是一个很好的观点——ircd 有几种不同的实现,所有这些都可以配置,并且一些强制执行 RFC 不需要的东西。因此,即使您在技术上被允许在 MOTD 之前加入频道,您也可能无法在任何服务器上。您可能需要进行一些调查,然后才能得到适用于任何地方的东西。无论如何,我从未使用过 Progbot,但我很高兴你发现它很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 2011-04-25
    • 1970-01-01
    • 2018-02-21
    • 2016-11-29
    相关资源
    最近更新 更多