Я все еще новичок в Python и не могу обойти эту проблему. У меня бот IR C работает довольно хорошо, который использует ib3.bot (который использует ir c .bot.SingleServerIRCBot). Никаких проблем с ботом. Тем не менее, я написал приведенный ниже код для обработки событий для потока событий WikiTech. Этот код прекрасно работает в Jupyter Notebook.
Вот в чем проблема: если я помещу код в бот и запускаю его с помощью команды, он блокирует бота в l oop и бот перестает отвечать на запросы. Если я пишу l oop вне класса бота, я не могу понять, как заставить бота отправлять сообщения на каналы.
Желаемое решение: я бы хотел включить код в py-файл бота или импортируйте требуемую функцию в новый класс в отдельном py-файле. Как и другие мои вопросы, я чувствую, что этот ответ находится прямо передо мной, и я просто не вижу ответа.
Моя последняя попытка закончилась строкой conn.privmsg(chan, "%s: A change was made to %s" % (nicks, title))
, которая работает, код внутри on_*
часть установки бота, но это блокирует бот только для этого l oop.
Код следует:
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