0

Pythonで作成したIRCクライアントを改善するにはどうすればよいですか。改善点は次のとおりです。ユーザーがHOST、PORT、NICK、INDENT、REALNAMEの文字列とメッセージを入力できるものをどのように配置できますか?そして、これがプログラムのコードです:

simplebot.py

import sys
import socket
import string

HOST="irc.freenode.net"
PORT=6667
NICK="MauBot"
IDENT="maubot"
REALNAME="MauritsBot"
readbuffer=""

s=socket.socket( )
s.connect((HOST, PORT))
s.send("NICK %s\r\n" % NICK)
s.send("USER %s %s bla :%s\r\n" % (IDENT, HOST, REALNAME))

while 1:
    readbuffer=readbuffer+s.recv(1024)
    temp=string.split(readbuffer, "\n")
    readbuffer=temp.pop( )

    for line in temp:
        line=string.rstrip(line)
        line=string.split(line)

        if(line[0]=="PING"):
            s.send("PONG %s\r\n" % line[1])

私はPython開発を始めていることを忘れないでください。これが私がこのコードを見つけた場所です:http://oreilly.com/pub/h/1968。ありがとう。

4

5 に答える 5

2

あなたはそれがしたいことのための青写真をすでにそこに持っています。あなたはやっている:

if(line[0]=="PING"):

PORTNICKなどの入力を受け入れるようにそのスキームを適応させることができなかった理由はありません。

また、1はあまりPythonicではありませんが。はい、動作しますが、実際にはを使用しない理由はありませんTrue。大したことではありませんが、コードが少し読みやすくなります。

于 2009-07-13T17:51:36.977 に答える
2

では、IRCクライアントが使用する正確な接続情報をユーザーが制御できるようにしたいですか?これを行うには、raw_input関数を使用して接続を開始する前に、ユーザーから入力を収集する必要があります。

注:raw_inputは、末尾の改行文字を削除します。

HOST = raw_input('Enter Host: ')
PORT = int(raw_input('Enter Port: '))

...ユーザーが構成できるようにするすべての値。

例:

HOST = raw_input('Enter host: ')
print HOST

>>> 
Enter host: stackoverflow.com
stackoverflow.com
>>> 
于 2009-07-13T18:15:52.277 に答える
1

直接的な答えではありませんが、Pythonで記述されたイベント駆動型ネットワークエンジンであるtwistedIRCの実装を確認する必要があります。これには、のサポートが含まれています。irctwisted.words.protocols.irc

于 2009-07-13T18:04:39.943 に答える
1

ユーザー入力に応じてアクションを実行しようとしている場合は、cmdモジュールが役立つ可能性があります。

IRCプロトコル自体に興味がある場合は、ソケットを使用してPythonでIRCクライアントを作成するためのこのチュートリアルが役立つ場合があります。

于 2009-07-13T18:19:30.883 に答える
0

Pythonを初めて使用する場合、特に他の言語で同様のクライアントを使用したことがない場合は、IRCクライアントは非常に困難です。

IRCハンドラーを別のスレッドに配置し、別のスレッドでユーザー入力を受け取ることができるように、スレッドを調べることをお勧めします(同じスレッドで両方を実行すると、一方が他方をブロックし、悪い結果になります経験。)

あなたの質問に答えるために、コンソールでユーザーから入力を得る最も簡単な方法はを使用することin = raw_input()ですが、私が言ったように、それは同じスレッドのソケットとうまく相互作用しません。

于 2009-07-13T18:15:05.587 に答える