首页 > 解决方案 > 在 discord.py 中的特定日期和时间每周触发一个事件

问题描述

我想在每周三 3:30 UTC 使用 discord.py 在 Discord 机器人上触发一些事情。我尝试修改此答案中的代码,但无法弄清楚如何让它每周而不是每天运行。我对任务不是很熟悉,所以我也无法从头开始工作。

标签: discorddiscord.py

解决方案


这不是一个理想的方法,但它会起作用。

从那个问题中得到我的答案,你可以让它每 7 天循环一次,但这将从机器人开始时开始。使用 abefore_loop设置循环的开始时间。

import asyncio
import datetime as dt


@bot.event
async def on_ready():
    print("Logged in as")
    print(bot.user.name)
    print("------")
    msg1.start()


# 7 days => 24 hour * 7 days = 168
@tasks.loop(hours=168)
async def msg1():
    message_channel = bot.get_channel(123)
    await message_channel.send("test 1")


@msg1.before_loop
async def before_msg1():
    # loop the whole 7 day (60 sec 60 min 24 hours 7 days)
    for _ in range(60*60*24*7):  
        if dt.datetime.utcnow().strftime("%H:%M UTC %a") == "03:30 UTC Wed":
            print('It is time')
            return

        # wait some time before another loop. Don't make it more than 60 sec or it will skip
        await asyncio.sleep(30)

文件:


推荐阅读