【问题标题】:Python: IRC Bot stopped workingPython:IRC Bot 停止工作
【发布时间】:2012-05-18 03:14:48
【问题描述】:

我曾经有一个可以工作的 IRC 机器人,我亲切地称之为“shakybot”,因为它一开始非常不稳定。

现在,我正在重新编码。但是,每当我运行它时,都会遇到问题。这是从 IRC 通道检测到的输出:

NOTICE AUTH :*** Please wait while we scan your connection for open proxies...
:Tigh.GeekShed.net NOTICE AUTH :*** Looking up your hostname...
:Tigh.GeekShed.net NOTICE AUTH :*** Found your hostname (cached)
:Tigh.GeekShed.net NOTICE AUTH :*** Checking ident...

然后它就进入了主循环。它从不连接或任何东西,它只是打印这个。我正在使用旧版本中的相同代码。

irc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
irc.connect((network, port))
a=irc.recv (4096) #Setting up the Buffer
print a
irc.send('NICK ' + nick + '\r\n')
irc.send('USER shakybot shakybot bla :shakybot\r\n')
irc.send('JOIN :' + chan + '\r\n')
irc.send('PRIVMSG ' + chan + ' :Hello.\r\n')

我怎样才能让它连接起来?

编辑:在比较了用 Mibbit 和这个程序连接到 IRC 的调试消息后,我应该得到:

Tigh.GeekShed.net *** Looking up your hostname... 
Tigh.GeekShed.net *** Checking ident... 
Tigh.GeekShed.net *** Found your hostname 
Tigh.GeekShed.net *** Received identd response 

【问题讨论】:

  • 你至少应该使用twisted或asyncore。
  • 为什么要让事情变得比应有的复杂?如果我可以单独使用套接字,为什么要使用 Twisted?
  • 你将重新发明一个你不必重新发明的轮子,作为一个正方形。

标签: python sockets irc


【解决方案1】:

irc.recv(4096) 返回时,这意味着您已从远程服务器收到至少一个字节。远程服务器可能尚未准备好发送NICK 命令。您应该等到您从服务器收到一条适当的消息,说明它已准备好接收您的登录信息(抱歉,我现在不记得该消息是什么了)。

【讨论】:

    【解决方案2】:

    Greg 说的是正确的。请根据RFC1459查看此代码(http://code.activestate.com/recipes/299411-connect-to-an-irc-server-and-store-messages-into-a/),您需要检查PING消息。

    您还可以查看一些 python IRC 库。
    http://pypi.python.org/pypi/lalita/0.1.1
    http://pypi.python.org/pypi/irc/1.1

    别忘了在pypi中搜索(http://pypi.python.org/pypi?%3Aaction=search&term=irc&submit=search)

    【讨论】:

    • 困扰我的不是 PING/PONG,而是 IRC 服务器无法接收我的昵称和用户信息。
    • 我已经尝试过 time.sleep(3), 3.5, 4, 2, 2.5,有很多任意值要等待,但它仍然不起作用。
    • 收据?你是说收吗?我该怎么做?
    • 是的,这很有趣,尽管这正是我在代码中所做的,只是没有函数调用。无论如何,我猜你帮助让代码工作,所以回答你!
    【解决方案3】:

    我发现以下是连接到 IRC 服务器的解决方案。

        irc.send('NICK %s\r\n' % nick)
        irc.send('USER %i 8 * :%s\r\n' % (ident, nick))
        irc.send('JOIN %s\r\n' % channel)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-16
      • 2021-03-26
      • 2018-03-17
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多