Таймер для телеграмм бота

Таймер для телеграмм бота

Vladragone

Нужен таймер для телеграм-бота. Суть такова, что если пользователь не отправляет сообщение 1 час, то бот должен написать ему, в противном случае прервать цикл Код выглядит примерно так:

@bot.message_handler(content_typer=['text'])
def fio(message):
    text = message.text
    timing = time.time()
    while True:
        if message.text != text:
            break            
        if time.time() - timing > 3600:
            bot.send_message(message.chat.id,'ВНИМАНИЕ! Вы не ответили на вопросы!')
            timing = time.time()
        sleep(10)

Проблема в том, что message.text не изменяется, даже если написать что-то в бота. Поэтому я без понятия как выйти из этого цикла. Помогите кто-нибудь

python telegram-bot

Ответ:

Я бы предложил следующий подход для решения данной задачи.

Можно использовать библиотеку schedule. Документация находится здесь. После того как бот получает сообщение от пользователя нужно создать job примерно так:

schedule.every(1).hours.do(send_warning).tag('CHAT-ID')

Где CHAT-ID — ид чата с пользователем. В функции send_warning нужно реализовать отправку сообщения с текстом предупреждения.

Если сообщение от пользователя все же пришло, то нужно отменить job по тегу так: schedule.clear('CHAT-ID')

Ну и нужно создать фоновый поток для schedule:

def schedule_checker():
    while True:
        schedule.run_pending()
        sleep(1)

if __name__ == "__main__":
    scheduleThread = Thread(target=schedule_checker)
    scheduleThread.daemon = True
    scheduleThread.start()



Report Page