2011-04-09 218 views
2
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sck.connect((irc, port)) 
sck.send('PRIVMSG ' + 'NICKSERV' + 'ghost' + 'supaBOT' + 'htown') 
sck.send('NICK supaBOT\r\n') 
sck.send('PRIVMSG ' + 'NICKSERV' + 'IDENTIFY' + 'password') 
sck.send('USER supaBOT supaBOT supaBOT :supaBOT Script\r\n') 
sck.send('JOIN ' + " " + chan + '\r\n') 

當我嘗試運行腳本我得到這個錯誤:IRC BOT(蟒蛇)

trix.gonullyourself.org 451 PRIVMSG You have not registered 
trix.gonullyourself.org 451 PRIVMSG You have not registered 
trix.gonullyourself.org 451 JOIN You have not registered 
: You 

尼克supaBOT註冊的服務器上,但我不知道如何識別服務器,因爲上面的代碼不起作用。

回答

4

像邁克說,你沒有發送你應該發送的數據。您需要在那裏添加空格,如果它們有空格,則在最終命令參數前需要:。一些線路也缺少'\r\n'

也就是說,對於PRIVMSG格式爲:'PRIVMSG nick :message with spaces\r\n'

PRIVMSG只有兩個參數,所以你需要把:存在,表明該行的其餘部分只有一個值,它可以包含空格。

您得到的原因"You have not registered"是因爲您必須在任何其他命令之前發送USERNICK命令。如果NICK命令失敗(缺口衝突),則必須檢測到錯誤並嘗試另一個。一旦你已經發送了有效的USERNICK命令,一些IRC網絡也是一個PING,送你去,你必須有一個PONG之前,服務器會認爲你「註冊」作出迴應。之後,您可以使用其他命令。

+0

這工作,我沒有得到任何錯誤,但機器人不識別nickserv一些奇怪的原因: – SourD 2011-04-09 06:19:39

+0

@SourD您是否在使用PRIVMSG NICKSERV:識別密碼\ r \ n''?它有什麼迴應嗎?你使用什麼irc網絡? – 2011-04-09 13:26:44

+0

好的,謝謝你的幫助,我已經用''PRIVMSG NICKSERV IDENTIFY password \ r \ n''來解決這個問題,如果沒有':' – SourD 2011-04-09 18:26:38

0

檢查你的字符串,'PRIVMSG ' + 'NICKSERV' + 'IDENTIFY' + 'password'打印PRIVMSG NICKSERVIDENTIFYpassword這顯然不是你想要發送

FTR什麼,最好使用字符串替換或.format(),因爲他們炮製,即增加了額外的開銷,因爲每個字母在添加字母之前強制python在字符串中循環。即:'PRIVMSG NICKSERV IDENTIFY %s' %(password)'PRIVMSG NICKSERV IDENTIFY {0}'.format(password)

如果你想使用它(和supybot存在/存在,並且是一個純粹的python irc bot),那麼也存在一個irclib。