#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
функцию