Python IRC botは無限に応答しています

私はゆっくりとPythonを学習し、チュートリアルを見ています。私はそれがどのように機能するのか基本的に理解していると感じています。

クリエイティブなプロジェクトとして、私はIRCボットを作りたいと思っています。私はあらかじめ確立されたフレームワークを使用したくありません。私は車輪を再発明するつもりはない、私は単に学習プロジェクトと創造的なアウトレットの両方として、ボトムアップからボットを構築したいと思う。私が一貫してこれを行う方法の分の知識の中で遭遇している1つの問題は、私のボットが私のコマンドad infinitumに応答しているようです。コードは次のとおりです:

HOST="irc.durd.net"
PORT=6667
NICK="Data"
IDENT="data"
REALNAME="databot"
HOME='#zela'
feedback=""

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))
s.send("JOIN #zela" + "\r\n")
s.send("PRIVMSG nickserv identify ac}pcut]eobosbec" + "\r\n")


def sendmsg(chan, msg):
    s.send("PRIVMSG "+ chan +" :"+ msg +"\n")

def ping():
    s.send("PONG :pingis\n")




while 1:
    feedback=feedback+s.recv(1024)
    print (feedback)
    if feedback.find("PING :") != -1:
        ping()
    if feedback.find("say hello Data") != -1:
        sendmsg("#zela", "Hello Data!")
    if feedback.find("tell us a joke Data") != -1:
        sendmsg("#zela", "but Captain, I don't know how.")
    if feedback.find("terminate Data") != -1:
        s.send("QUIT\r\n")

今、すべて正常に動作し、データは彼のコマンドに正しく応答します。彼は私が彼に言うときにも終了します。残念なことに、これらのコマンドの1つがトリガーされると、私は何か新しいことを言うたびに自分自身を繰り返し、そして私が彼をオフにするまで永遠に繰り返す。

<~Jordan> say hello Data
 Hello Data!
<~Jordan> a
 Hello Data!
<~Jordan> a
<~Jordan> a
 Hello Data!
 Hello Data!
 Hello Data!
 Hello Data!

私はサーバがボットにメッセージを再送しているかどうかを確認するためにテストしましたが、そうではありませんので、私の責任です。

2
私の推測では、メッセージを送信した後にフィードバックをクリアしたい場合は、同じテキストを何度も何度も見つけます。
追加された 著者 Gabe,
@Wooble - 新しいプログラマーは、このようなことを非常に簡単に逃すことができます。それについては、それほど気にする必要はありません。将来的に少し丁寧にしてください。
追加された 著者 Polynomial,
Wooble:私は空から金網が落ちると思った。
追加された 著者 Jordan,

1 答え

feedback の最後に、それをクリアすることなく繰り返し連結します:

feedback=feedback+s.recv(1024)

これにより、feedback.find( "hello Data")!= -1:の条件が常に真である場合に ifが発生します。

feedback = "" のようなやり方や、上記の式の連結部分を削除する必要があります。

2
追加された