2012-10-25 51 views
0

我有一個工作的機器人(感謝abarnert),它有一個bug:它不會加入一個頻道。他可以讓它工作,但我不能。我意識到這可能是我的一個問題,但我在X-Chat上連接得很好。加入一個IRC頻道不似乎功能

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命令。我的機器人連接到服務器,並停在「:愛麗絲模式愛麗絲:+ x」

回答

2

正如我在your other question中所解釋的,您確實需要記錄輸入和輸出以查看發生了什麼。這是你或其他人能夠調試的唯一方式。

同樣,有多種方法可以做到這一點:將您的bot源打包以打印它在套接字上發送和發送的所有內容,使用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快速搜索將向您展示的那樣。

+1

如果你這樣做是爲了學習,那麼你應該閱讀IRC RFC,當你成功發送NICK和USER後,你應該得到一個PING ,你在那裏回覆PONG 然後你得到歡迎消息並且可以加入一個房間之後MOTD – Gunner

+0

+1給Gunner - 如果你不知道如何找到RFC,請參閱上面我的答案中的鏈接。同時,如果你想學習,學習如何通過觀察通信和尋找錯誤消息來調試網絡協議是最重要的教訓之一。 – abarnert

+0

我正在使用它來學習。我想我已經學會了足夠的基礎知識。我會去找那些機器人之一,併爲它學習更多。感謝您的幫助! –