Discord.py:事件循环关闭后重新启动bot

问题描述 投票:2回答:1

我有一个discord.py机器人,我目前正在本地托管它成熟。我想在我的网络连接中使其能够抵御瞬间的昙花一现,但我很难过。当连接失败时,表示正常bot操作的阻塞Client.run()完成并关闭事件循环。几分钟后我不能再重新调用Client.run(),因为事件循环已关闭。

我已经尝试重新声明Client对象,但这似乎没有使用新的事件循环。我正在浏览discord.py和python事件循环文档,但无法弄清楚如何获取新的事件循环并使用它。

我已经尝试了asyncio.set_event_loop(asyncio.new_event_loop())的行,但它似乎没有任何区别 - 我仍然无法重新调用Client.run(),因为事件循环已关闭。

python python-asyncio discord discord.py
1个回答
1
投票

在互联网连接blip的情况下,现有的事件循环没有任何问题。只需不要调用关闭事件循环的Client.run。因为Client.run无论如何都是关闭事件循环的run_until_complete的简单包装器,你可以自己编写不会这样做的东西。例如:

def run_client(client, *args, **kwargs):
    loop = asyncio.get_event_loop()
    while True:
        try:
            loop.run_until_complete(client.start(*args, **kwargs))
        except Exception as e:
            print("Error", e)  # or use proper logging
        print("Waiting until restart")
        time.sleep(600)
© www.soinside.com 2019 - 2024. All rights reserved.