【发布时间】:2021-09-15 14:56:54
【问题描述】:
我用 Python 构建了一个 Discord 机器人。该机器人有一些任务需要在一天中的不同时间运行,还有一些命令需要随时运行。
@bot.command(name = "how_are_you", help = "Asks: How Are You?")
async def ask_how_are_you(ctx):
await ctx.send("How are you?")
@tasks.loop(hours = 24)
async def say_hello():
channel = bot.get_channel(int(CHANNEL))
await channel.send("Hello World")
@say_hello.before_loop
async def before():
now = datetime.datetime.now()
start_time = datetime.datetime(now.year, now.month, now.day, 20, 00)
delta = start_time - now
time.sleep(delta.total_seconds())
await bot.wait_until_ready()
print("Finished waiting")
然后我按如下方式运行机器人:
say_hello.start()
bot.run(TOKEN)
它是如何工作的:我希望say_hello() 每天在 20:00 运行。 before() 函数获取当前时间并检查在 20.00 之前错过了多少秒,然后等待该秒数。
问题是,在能够向机器人发送命令之前,我需要等待 before() 函数完成等待。这可能需要一段时间,因为如果现在是 17.00,我需要等到 20.00 before() 完成等待。
更糟糕的是,如果我有一个每周运行的任务,比如说,每个星期五 @ 20.00 而今天是星期二,我需要等待 3 天才能发送命令。
如何让任务在后台等待并同时向机器人发送命令?提前致谢。
【问题讨论】:
标签: python discord discord.py python-asyncio