【问题标题】:Discord Python Bot - Send Message in Aux Function Using APSchedulerDiscord Python Bot - 使用 APScheduler 在 Aux 函数中发送消息
【发布时间】:2020-06-08 10:19:12
【问题描述】:

我觉得我做错了什么。

我想要完成的是具有一个功能,只要用户保持耳聋的时间超过特定时间,它就会向文本频道发送一条消息。

编译时不会崩溃。它运行。它只给出:

RuntimeWarning:从未等待协程“check_pomada_state”

计时器工作正常,因此它们应该没有问题。每个方法都是异步的。

我确实认为问题与 scheduler.add_job(...) 的调用有关。我可能遗漏了一些论点或其他东西,但在文档中没有提到它。

import ...

client = commands.Bot(command_prefix = ids.prefix)
times_check_pomada = [5, 3600, 10800, 18000]
timers_da_pomada = {...}

scheduler = BackgroundScheduler()
scheduler.start()

@client.event
async def on_ready():
    print('Bot is ready.')

@client.event
async def on_voice_state_update(member, before, after):
    if before.self_mute != after.self_mute and before.self_deaf != after.self_deaf:
        if after.self_mute and after.self_deaf:
            t = Timer()
            t.start()
            timers_da_pomada[member] = t
            scheduler.add_job(check_pomada_state, 'interval', seconds = 1, id=f'{member}_sched', args=[member])
        else:
            if member in timers_da_pomada and timers_da_pomada[member].isRunning():
                timers_da_pomada[member].stop()
                scheduler.remove_job(f'{member}_sched')

async def check_pomada_state(member):
    if not timers_da_pomada[member].isRunning():
        scheduler.remove_job(f'{member}_sched')

    else:
        curr = timers_da_pomada[member].current()
        if curr in times_check_pomada:
            channel = client.get_channel(<channel_id>)
            await channel.send(f'{member}... {curr // 60} minutes deafened')

client.run(ids.TOKEN)

【问题讨论】:

    标签: python python-3.x asynchronous discord.py apscheduler


    【解决方案1】:

    您必须使用AsyncIOScheduler 而不是BackgroundScheduler。其随附的AsyncIOExecutor 是唯一能够运行预定协程函数的执行器。

    【讨论】:

    • 非常感谢!不知道那个Scheduler的存在。它现在确实有效!
    猜你喜欢
    • 2020-08-16
    • 2018-05-03
    • 2020-12-01
    • 2021-03-02
    • 2021-01-12
    • 2021-06-05
    • 2020-08-31
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多