Api Telegram-бота как запланировать уведомление?

#python #telegram #telegram-bot #python-telegram-bot

Вопрос:

Я создал бота, который получает сегодняшние футбольные матчи, и если пользователь хочет, он может получить напоминание за 10 минут до выбранного матча.

 while current_time != new_hour:
        now = datetime.now()
        current_time = now.strftime("%H:%M")
#return notification
    text_caps = "Your match starts in 10 minutes"
    context.bot.send_message(chat_id=update.effective_chat.id, text=text_caps)
 

Очевидно, что во время выполнения цикла я не могу использовать другую команду . Я новичок в программировании, как я мог бы реализовать это, чтобы я все еще получал уведомление, но пока оно выполняется, я могу использовать другие команды?

Спасибо!

Ответ №1:

Попробуйте использовать aiogram, и вы сможете выполнять запланированные задачи с помощью aiocron (храните пользователей, которые хотят получать уведомления в базе данных или в global dict).

Ответ №2:

Вы можете запланировать работу.
Допустим, у вас есть CommandHandler("watch_match", watch_match) компьютер, который прослушивает сообщение /watch_match , и через 10 минут должно прийти сообщение

 def watch_match(update: Update, context: CallbackContext):
    chat_id = update.effective_chat.id
    ten_minutes = 60 * 10 # 10 minutes in seconds  
    context.job_queue.run_once(callback=send_match_info, when=ten_minutes, context=chat_id) 
    # Whatever you pass here as context is available in the job.context variable of the callback

def send_match_info(context: CallbackContext):
    chat_id = context.job.context
    context.bot.send_message(chat_id=chat_id, text="Yay")
 

Более подробный пример в официальном репозитории
И в официальной документации вы можете увидеть run_once функцию