在不使用命令的情况下通过irc.bot.SingleServerIRCBot将消息发送到通道

时间:2020-02-29 00:57:15

标签: python python-3.x chatbot irc

我还是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

0 个答案:

没有答案