python - 用 Python 编写 Discord 机器人 - 如何让它每天在特定时间发送消息?
问题描述
我想让机器人每天下午 1 点发送一条消息。这是我的代码:
@tasks.loop(hours=24)
async def called_every_day():
channel = client.get_channel(800476409587171369)
print(f"Got channel {channel}")
await channel.send("Your message")
@called_every_day.before_loop
async def before():
await client.wait_until_ready()
print("Finished waiting")
called_every_day.start()
如果我在下午 1 点启动机器人,这很有效。但是,每当我编辑代码并重新启动机器人时,它都会重新启动循环。我想防止这种情况发生,我该怎么做?我是编程新手,所以任何见解都将不胜感激。
解决方案
您可以使用APScheduler
和Cron
安排您的命令在特定时间发送,例如下午 12:00
文档:https : //apscheduler.readthedocs.io/en/stable/,https: //apscheduler.readthedocs.io/en/stable/modules/triggers/cron.html
这是一个例子:
# Async scheduler so it does not block other events
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.cron import CronTrigger
from discord.ext import commands
import discord
bot = commands.Bot(command_prefix="!")
async def func():
await bot.wait_until_ready()
c = bot.get_channel(800476409587171369)
await c.send("Your Message")
@bot.event
async def on_ready():
print("Ready")
# Initializing scheduler
scheduler = AsyncIOScheduler()
# Executes your function at 24:00 (Local Time)
scheduler.add_job(func, CronTrigger(hour="24", minute="0", second="0"))
# Starting the scheduler
scheduler.start()
推荐阅读
- google-apps-script - insertColumnsAfter 创建的列多于请求的列
- python - NameError:名称''未在 python 文件的 powershell 中定义
- java - 使用“AppCompat.NoActionBar”后,我的应用程序不断崩溃,有什么解决方案吗?
- path - 如何在 SConscript 中运行刚刚编译的程序
- azure - 使用 /mnt/ 将数据从 Azure Blob 存储读取到 Azure Databricks
- ios - "Use of unresolved indentifier 'self'" with button.addTarget
- java - Wrong Behavior with my JFrame and JDialog Login System
- python - 从二维数组单元格的熊猫列中获取唯一值
- reactjs - 如何将数据从 chrome 扩展程序发送到反应应用程序
- mysql - 创建集群时是否需要知道 ipWhitelist 中包含的所有主机?