Python IRC бот отвечает бесконечно - PullRequest
2 голосов
/ 06 февраля 2012

Я медленно изучаю 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 %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")

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

<~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!

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

1 Ответ

2 голосов
/ 06 февраля 2012

Вы конкатенируете в конец feedback несколько раз, не очищая его:

feedback=feedback+s.recv(1024)

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

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

...