Python IRC bot отвечает бесконечно



Я медленно изучаю Python и листаю учебники. Я чувствую, что у меня есть базовое понимание того, как это работает.



В качестве творческого проекта Я хочу сделать IRC-бота. Я не хочу использовать заранее установленные рамки. Я не собираюсь изобретать велосипед, я просто хочу построить бота с нуля, как учебный проект и творческий выход. Одна из проблем, с которой я постоянно сталкиваюсь в своих мельчайших знаниях о том, как это сделать, заключается в том, что мой бот, похоже, реагирует на мои приказы до бесконечности. Вот код:



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 %srn" % NICK)
s.send("USER %s %s bla :%srn" % (IDENT, HOST, REALNAME))
s.send("JOIN #zela" + "rn")
s.send("PRIVMSG nickserv identify ac}pcut]eobosbec" + "rn")


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

def ping():
s.send("PONG :pingisn")




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("QUITrn")


Теперь все работает нормально, и Дейта правильно реагирует на его команды. Он даже уходит, когда я ему говорю. К сожалению, как только одна из этих команд срабатывает, он будет повторять себя каждый раз, когда я говорю что-то новое, а затем повторять себя вечно, пока я не выключу его.

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


Я проверил, не пересылает ли сервер сообщения боту, и это не так, поэтому я считаю, что это моя вина, и, вероятно, есть что-то очень важное. просто мне здесь чего-то не хватает.

452   1  

1 ответ:

Вы соединяетесь с концом feedback неоднократно, не очищая его:

feedback=feedback+s.recv(1024)
Это приведет к тому, что условие if feedback.find("say hello Data") != -1: всегда будет истинным.

Вам нужно сделать что-то вроде feedback="" или удалить конкатенационную часть вышеприведенного выражения.

Comments

    Ничего не найдено.