【问题标题】:Discord.py and Python Schedule, never awaited for?Discord.py 和 Python Schedule,从未等待过?
【发布时间】:2020-10-08 01:00:40
【问题描述】:

我正在尝试使用 ScheduleThreading 每天 02:39 向频道发送一次消息,但我似乎无法通过 asyncio “从未等待”

我已经看过几个类似这个问题的问题,但之前的答案都没有解决我的问题。

我的代码:

@bot.event
async def on_ready():
    t = Thread(target=timer)
    t.start()

async def announceShop():
    await bot.get_channel(00000000).send("test")

def timer():
    while True:
        schedule.run_pending()
        time.sleep(60)

schedule.every().day.at("02:39").do(bot.loop.call_soon_threadsafe, announceShop)

错误: RuntimeWarning: coroutine 'announceShop' was never awaited self._context.run(self._callback, *self._args)

我怎样才能完成我想做的事情?

【问题讨论】:

    标签: python-3.x python-asyncio discord.py-rewrite


    【解决方案1】:

    此解决方案有效,但它更像是一种“解决方法”。
    该解决方案使用 aiocron,类似于 Linux 上的 cronjob。

    pip3 install aiocron

    import aiocron
    @aiocron.crontab('2 3 * * *')
    async def announceShop():
        await bot.get_channel(00000000).send("test")
    

    【讨论】:

    • 这不允许@bot.event 触发。是否有更不和谐的逻辑?这只是让我的机器人永远挂起而不发送消息。
    • 我今天仍在使用此解决方案,它不会导致任何阻塞,所有事件都按应有的方式工作。你确定你安装了 aiocron 并在你的 async 函数之前定义了它吗? @aiocron.crontab('2 3 * * *') 在我的情况下?
    • 是的,我已经以同样的方式进行了设置。我相信不和谐装饰器可能引起了冲突。一旦我删除它,调度就起作用了,但是对于我的用例来说,这打破了我的逻辑,因为我需要 discord 装饰器。我最终只是从命令行crontab -e 使用 crontab。
    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多