根据 UTC 时间制作 discord.py(重写版本)计时器

Making a discord.py (rewrite version) timer based off of UTC time

我想添加一个基于 UTC 时间的计时器来刷新我每天下载的 API 文件。我正在使用 Discord.py 的重写版本。下面是我的制作方法:

@client.event
# Updates API files daily
async def clock_timer():
    from datetime import datetime
    import pytz

    datetime_utc = datetime.now(pytz.utc)

    await datetime_utc.strftime("%H:%M:%S") == "03:00:00"
    if datetime_utc.strftime("%H:%M:%S") == "03:00:00":
        processes.api_grabber()

我这样做对吗?

await 将“等待”直到事件发生,因此 if 语句应该是无用的。如果您要导入的模块 ALWAYS 在程序 运行 时使用,请在文件顶部导入它们,而不是在函数内部。

await datetime_utc.strftime("%H:%M:%S") == "03:00:00" 不是有效的陈述,您需要做的是获取 time_delta 并一直睡到那个。

datetime_utc = datetime.now(pytz.utc)
three_am_tmr = datetime_utc.replace(hour=3, minute=0, second=0) + timedelta(days=1)
delta = (three_am_tmr - datetime_utc).total_seconds()
await asyncio.sleep(delta)
#process api here

但是,如果您希望计时器每天执行一次,则必须使用 discord.py 任务或类似 APS

的任务
from discord.ext import tasks

@tasks.loop(days=1)
async def grab(something):
     #proccess api here


@grab.before_loop()
async def waiter():
   datetime_utc = datetime.now(pytz.utc)
   three_am_tmr = datetime_utc.replace(hour=3, minute=0, second=0) + 
   timedelta(days=1)
   delta = (three_am_tmr - datetime_utc).total_seconds()
   await asyncio.sleep(delta)

#start task in a command

参考文献: