2012-01-07 6 views
1

私はhackthissiteチャレンジのためにpythonでIRCボットを作っています(prog 8)。IRC bot:USERとNICKをしてもMOTDは来ません

def ping(): 
    ircsock.send("PONG :Pong\n") 
ircsock.connect((server,6667)) 
ircsock.send("USER "+botnick+" "+server+" "+botnick+" :"+version+"\n") 
ircsock.send("NICK "+botnick+"\n") 
while(connect): 
    ircmsg = ircsock.recv(2048) 
    ircmsg = ircmsg.strip('\n\r') 
    print(ircmsg) 
    if(ircmsg.find("PING :") != -1): 
     ping() 

私はこれに何か問題があることとは思わない: はここに接続コードの抜粋です。 すべての変数が定義されており、値を持っているため、このコードは一部のサーバーで問題なく動作します(たとえば、freenode)。しかし、他のサーバーでは、私は次のような結果を得ています。

:hub.irc.hackthissite.org NOTICE AUTH :*** Looking up your hostname... 
:hub.irc.hackthissite.org NOTICE AUTH :*** Found your hostname 
PING :3C8E9173 
:[email protected] PRIVMSG Tadbot :VERSION 

私はこれをどうするべきか分かりません。私はボットのバージョンを ":"と "!"の間のユーザ名に返送しようとしましたが、(期待どおり)何もしませんでした。このような状況が発生したサーバーでは、MOTDを取得することはないので、何かしようとすると「登録していません」というエラーが表示されます。

Googleは、同様の問題を説明している人々の結果をいくつか得ましたが、彼らはUSERとNICKを送信するのを忘れていたので、ここで何をすべきかについて本当に迷っています。

答えて

1

サーバのPINGに応答を送信する必要があります。そうしないと、サーバは接続が切断されたとみなします。

あなたが投稿の例の正しい応答が要求されたサーバと同じ文字列であること

PONG :3C8E9173 

3C8E9173だろう。

+0

正しい構文は、サーバーを模倣することです。その場合は、mIRCをデバッグモード( '/ debug @ debug')で起動してサーバに接続すると、サーバとクライアント間の通信がはっきりと分かります。 –

+0

私はあなたのためにソースファイルを手配したいと思うIRCボット(PHPのみ)を作成しましたか?それはOOPに基づいており、完全ではありませんが、サーバとクライアントの通信は完全です。 –

1

Truth's correct answerに加えて、VERSIONメッセージはCTCPメッセージです。これは、PRIVMSGのペイロードが印刷不可能なASCII \001(CTRL-A)文字で囲まれていることによって示されます。実際には\001VERSION\001です。

これに返信するには、PRIVMSGをCTCPメッセージとしてフォーマットされたソースニックに戻す必要があります。 \001VERSION Nyubis Python Bot\001

関連する問題