2012-02-06 4 views
2

나는 서서히 파이썬을 배우고 튜토리얼을 통해 익숙해집니다. 나는 그것이 어떻게 작동하는지에 대한 기본적인 이해를 가지고 있다고 느낍니다.Python IRC bot이 끊임없이 응답하고 있습니다.

창조적 인 프로젝트로서 나는 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") 

이제 모든 것이 정상적으로 작동하고 데이터가 명령에 올바르게 응답합니다. 그는 내가 그에게 말할 때 그만두기도한다. 불행히도 이러한 명령 중 하나가 실행되면, 나는 새로운 것을 말할 때마다 자신을 반복하고, 내가 그를 끌 때까지 자신을 영원히 반복 할 것입니다.

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

나는 서버가 봇에 메시지를 재전송되어 있는지 테스트 한, 그것은하지, 그래서 내 잘못이고 내가 여기에 놓친 거지 아주 간단한 일이 아마이 그림.

+0

내 생각에 메시지를 보낸 후에 의견을 지우고 싶다면 그 메시지에서 동일한 텍스트를 반복해서 찾아야합니다. – Gabe

+0

우 블레 : 나는 하늘에서 껌을 떨어 뜨릴 것으로 예상했다. – Jordan

+0

@Wooble - 새로운 프로그래머는 아주 쉽게 이런 것들을 놓칠 수 있습니다. 그렇게 생각할 필요가 없습니다. 앞으로 조금 더 예절 바꿔보십시오. – Polynomial

답변

2

당신은 그것을 삭제하지 않고, 반복 feedback의 말에 합치하고 있습니다 : 이것은 if feedback.find("say hello Data") != -1: 조건이 항상 진실하게됩니다

feedback=feedback+s.recv(1024) 

.

feedback="" 같은 것을하거나 위의 표현식의 연결 부분을 제거해야합니다.

관련 문제