Функция-таймер для Telegram-бота
Друзья, добрый день!
Наверняка этот вопрос уже кем-то задавался, но соответствующего топика не нашёл.
Есть Telegram-бот, принимающий сообщения пользователей и пересылающий их администратору. Необходимо реализовать антиспам-защиту, чтобы один и тот же пользователь не мог отправлять сообщения чаще одного раза в пять минут.
Создал в папке с хэндлерами файл "global_data.py", имеющий следующее содержание:
import time
# Глобальная переменная-флаг с таймером отправки сообщений.
timer_flag = False
def start_timer() -> None:
"""
Функция - таймер для отправки сообщений.
"""
global timer_flag
timer_flag = True
while True:
duration = 5 * 60 # Время в секундах.
start_time = time.time()
remaining_time = duration - (time.time() - start_time)
time.sleep(1)
if remaining_time <= 0:
timer_flag = False
break
В файле с хендлерами сделал импорт
from . import global_data as data
и добавил
data.start_timer()
в конце функции отправки сообщения администратору.
Проблема в том, что функция "start_timer" запускается, но цикл, по-видимому, почему-то никогда не прерывается, и, соответственно, глобальной переменной "timer_flag" не передаётся значение False.
Проверка в самом хендлере выглядит так:
elif data.timer_flag:
bot.send_message(message.chat.id, f'<b>Анти-спам</b>: Вы сможете отправить '
f'новое сообщение через 5 минут',
parse_mode='html')
Помогите, пожалуйста, с решением этой проблемы или предложите какую-нибудь более изящную реализацию.
Заранее спасибо :)