根据 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
参考文献:
我想添加一个基于 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