我还是Python的新手,似乎无法解决这个问题。我有一个使用ib3.bot(使用irc.bot.SingleServerIRCBot)的IRC机器人,运行得很好。该机器人完全没有问题。但是,我编写了以下代码来处理WikiTech的事件流的事件。该代码在Jupyter Notebook中非常有用。
这是麻烦所在:如果我将代码放入机器人并用命令触发它,则会将机器人锁定在循环中,并且机器人将变得无响应。如果我在Bot的类之外编写循环,那么我将不知道如何使Bot向通道发送消息。
所需解决方案: 我想将代码包含在机器人的py文件中,或将所需的函数导入到单独的py文件中的新类中。像到目前为止的其他问题一样,我觉得这个答案就在我眼前,我只是没有看到答案。
我最近的尝试以行conn.privmsg(chan, "%s: A change was made to %s" % (nicks, title))
结尾,该行有效的代码位于bot设置的on_*
部分内,但这将bot锁定为仅执行此循环。
代码如下:
for line in EventSource(wiki.stream):
if line.event == 'message':
try:
change = json.loads(line.data)
except ValueError:
continue
proj = str(change['wiki'])
title = str(change['title'])
if wiki.checkPage(proj, title) is not None:
data = wiki.getPage(proj, title)
channels = []
for record in data:
if record[3] == "yes":
channels.append(record[2])
channels = list(dict.fromkeys(channels)) # Collapse duplicate channels
for chan in channels:
nicks = ""
data = wiki.getPageNicks(proj, title, chan)
for nick in data:
if nicks == "":
nicks = nick[0]
else:
nicks = nick[0] + " " + nicks
conn.privmsg(chan, "%s: A change was made to %s" % (nicks, title))
else:
pass