我正在慢慢学习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")
现在,一切正常,数据正确响应了他的命令。当我告诉他时,他甚至会退出。不幸的是,一旦触发了其中一个命令,每当我说出新的东西时,他都会重复自己,然后永远重复自己,直到我把他关掉。
<~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 :(得分:2)
你反复连接到feedback
的末尾,而不是清除它:
feedback=feedback+s.recv(1024)
这将导致if feedback.find("say hello Data") != -1:
条件始终为真。
您需要执行feedback=""
之类的操作或删除上述表达式的连接部分。