Программирование бота Discord на Python — как мне заставить его отправлять сообщения каждый день в определенное время?

#python #discord.py

#python #discord.py

Вопрос:

Я хочу, чтобы бот отправлял сообщение каждый день в 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 час дня. Однако каждый раз, когда я редактирую код и перезапускаю бота, он перезапускает цикл. Я хочу предотвратить это, как мне это сделать? Я новичок в программировании, поэтому буду признателен за любую информацию.

Комментарии:

1. Вы видели API расписания ? Может быть, это может вам помочь

Ответ №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()