根据 UTC 时间制作 discord.py(重写版本)计时器
Posted
技术标签:
【中文标题】根据 UTC 时间制作 discord.py(重写版本)计时器【英文标题】:Making a discord.py (rewrite version) timer based off of UTC time 【发布时间】:2021-06-16 11:23:44 【问题描述】:我想添加一个基于 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()
我这样做对吗?
【问题讨论】:
【参考方案1】: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
参考资料:
datetime tasks【讨论】:
【参考方案2】:await 将“等待”直到事件发生,所以 if 语句应该没用。如果您正在导入的模块将在程序运行时始终使用,请将它们导入文件的顶部,而不是函数内部。
【讨论】:
以上是关于根据 UTC 时间制作 discord.py(重写版本)计时器的主要内容,如果未能解决你的问题,请参考以下文章