Таймер для телеграмм бота
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()