1

単純なPythonツイストクライアントを取得しようとしています-サーバーアプリケーションが機能しています。これを使用して、いくつかのIRCボットを制御することを目的としています。すべての(5ish)ボットにコマンドを発行するマスターコンソールのようなものです。

添付されたコードは、いつかサーバーコードになります。今のところ、私はtelnetを使用して、「パーティライン」に接続しているIRCボット(クライアント)をシミュレートしています。

私が立ち往生しているのは、接続されているサーバーアプリケーションからすべてのボットにsendLineを送信するにはどうすればよいですか?raw_inputを取得するためのループを作成するたびに、実行が停止することになります。接続状態関数に対してテストすることを考えましたが、それを見つけることができないようです(接続がtrueの場合、raw_inputのようなロジック)。

from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor

class bottalk(LineReceiver):

    botlist = []

    def lineReceived(self, line):
        botlistspot = len(self.botlist)
        self.botlist.append(line)
        print self.botlist[botlistspot] + " checked in."

class botfactory(Factory):

    def buildProtocol(self, addr):
        return bottalk()

reactor.listenTCP(8123, botfactory())
reactor.run() 

次のraw_inputをLineReceiverクラスの内部、外部に配置しようとしました。全体的に..このraw_inputプロンプトが、受信した行のようなイベントの直後ではなく、常に入力を求めるプロンプトを表示するようにします。サーバーボットコンソールが常に入力を受け入れ、すべてのボットにSendLineを送信できるようにします。

sendLine(raw_input("> "))
4

1 に答える 1

2

全く使用しないでくださいraw_input。代わりに、をインスタンス化しstdio.StandardIO、そのコンストラクターにLineReceiverサブクラスのインスタンスを与えます。lineReceivedサブクラスで定義したあなたは、で新しい行が利用可能になるたびに呼び出されstdin、ボットにブロードキャストできます。

Twistedサイトのこの例は、このアイデアを示しています。

于 2012-10-06T15:58:06.950 に答える