Задать вопрос
Этот вопрос закрыт для ответов, так как повторяет вопрос Как сделать таймер в тестах через бота в Telegram?
@Arda4ek
Начинающий веб-разработчик

Как сделать таймер для сообщения для бота в телеграмм?

Первый раз пишу бота, Пайтон тоже знаю очень-очень плохо. Я хотел чтобы после сообщения "Привет! Ты стал участником акции "Кофе с собой". Результаты пришлем тебе уже скоро. Ожидай:)", пошел таймер допустим на 30 минут, и после окончание таймера должно прийти сообщение

from multiprocessing.sharedctypes import Value
import telebot;







from telebot import types
bot = telebot.TeleBot('Здесь токен');

@bot.message_handler(content_types=['text'])
def get_text_messages(message):

    if message.chat.type == 'private':
        if message.text == '/start':
            bot.send_message(message.from_user.id, 'Привет! Ты стал участником акции "Кофе с собой". Результаты пришлем тебе уже скоро. Ожидай:)')
            



bot.polling(none_stop=True, interval=0)
  • Вопрос задан
  • 2273 просмотра
Подписаться 1 Простой
Решения вопроса 1
@swimmwatch
Python software engineer
Тут можно решить данную задачу разными способами:
  • В этом же обработчике запустить в отдельном потоке (чтобы не стопить основной поток) schedule программу, которая будет ждать 30 мин, а потом выполнять нужную логику.
  • Создать маленький скриптик (в нём будет нужная логика) на Python и запустить его через утилиту cron
  • Использовать асинхронную очередь задач (например, Celery) - самый лучщий способ (по моему субъективному мнению)


Пример того, как это будет выглядить на Celery:
from datetime import datetime, timedelta

import celery

# инициализация бота...

@celery.task()
def reply_after_30min(user_id):
    bot.send_message(user_id, "some message")

user_id = 'some userid'
started_at = datetime.now() + timedelta(minutes=30)
reply_after_30min.apply_async((user_id, ), eta=started_at)
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы