Я работаю над ботом, который транслирует сообщения из цепочки блоков Steem (используя синхронную библиотеку beem) и отправляет сообщения, соответствующие определенным критериям, на канал Discord (используя асинхронную библиотеку Discord.py).Это мой (упрощенный) код:
bot = commands.Bot(command_prefix="!")
async def send_discord(msg):
await bot.wait_until_ready()
await bot.send_message(bot.get_channel("mychannelid"), msg)
async def scan_post(post):
"""Scan queued Comment objects for defined patterns"""
post.refresh()
if post["author"] == "myusername":
await loop.create_task(send_discord("New post found"))
async def start_blockchain():
stream = map(blockchain.stream(opNames=["comment"]))
for post in stream:
await loop.create_task(scan_post(post))
if __name__ == '__main__':
while True:
loop.create_task(start_blockchain())
try:
loop.run_until_complete(bot.start(TOKEN))
except Exception as error:
bot.logout()
logger.warning("Bot restarting "+repr(error))
До того, как я реализовал discord.py, я бы просто вызвал синхронную функцию scan_post(post)
, и она работала просто отлично, но теперь с асинхронной реализацией сообщения необрабатывается достаточно быстро, и поток имеет быстро увеличивающуюся задержку.Если я сделаю scan_post(post)
синхронной функцией, время обработки будет хорошим, но веб-розетка Discord закрывается (или даже не открывается), и бот переходит в автономный режим.Как я могу решить это простым способом (без переписывания библиотеки beem)?