2012-05-18 48 views
0

我曾經有一個有效的IRC機器人,我深深地將其命名爲「shakybot」,因爲它在開始時非常不穩定。Python:IRC Bot停止工作

現在,我正在重新編碼它。但是,每當我運行它,我遇到一個問題。這是從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') 

我該如何連接?

編輯:比較連接到IRC與Mibbit以及與此程序的調試信息後,我應該得到:

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

您應該至少使用扭曲或異步。 – jordanm

+1

爲什麼要讓事情比它應該更復雜?如果我可以單獨使用套接字,爲什麼要使用Twisted? – beary605

+0

你會重新發明一個輪子,你不必重塑,就像一個廣場。 – jordanm

回答

1

什麼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

+0

這不是打擾我的PING/PONG的事情,這是IRC服務器不會接收我的暱稱和用戶信息的事實。 – beary605

+0

如果IRC服務器沒有準備好它如何接收? – Kracekumar

+0

我試過time.sleep(3),3.5,4,2,2.5,許多arbritrary值等待,它仍然無法正常工作。 – beary605

2

irc.recv(4096)回報,這意味着你已經收到至少一個字節來自遠程服務器的。遠程服務器可能尚未準備好發送NICK命令。你應該等到你從服務器收到一條適當的消息說它已準備好接收你的登錄信息(對不起,我不記得現在的消息是什麼)。

0

我發現下面是用於連接到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)