Как передавать или не передавать сообщение следующему обработчику в боте тг по условию?
Функция антифлуда, 20ая версия ext.telegram, пытаюсь сделать так, чтобы она хватала текст, стикеры и команды, записывала в лист отправителя сообщения, сверялась с ним, и, если это команда, передавала её дальше другим обработчикам, либо тормозила пользователя на заданное время и уже ничего никому не передавала. Пока что хукает, но не отдаёт.
user_message_times = {}
user_command_times = {}
async def antiflood_message(update, context):
# Получаем id пользователя и id чата
user_id = update.effective_user.id
chat_id = update.effective_chat.id
# Получаем список временных меток для текущего пользователя
user_times = user_message_times.get(user_id, [])
# Удаляем из списка все временные метки, которые были более messages_delay секунд назад
current_time = datetime.now()
user_times = [
t
for t in user_times
if current_time - t < timedelta(seconds=config["messages_delay"])
]
# Проверяем, сколько сообщений уже отправил пользователь
if len(user_times) >= config["messages_count"]:
# Если пользователь отправил уже messages_count сообщений за последние messages_delay секунд, то отвечаем ему об этом
await context.bot.send_message(
chat_id=chat_id,
text="Вы отправляете сообщения слишком часто, подождите немного.",
)
return
# Если пользователь может отправить сообщение, то добавляем текущую временную метку в список
user_times.append(current_time)
user_message_times[user_id] = user_times
# Пытаемся передать сообщение следующим хендлерам
update.update_id += 1
app = Application.builder().token(config["telegram_bot_token"]).build()
# Объявляем обработчик для сообщений
message_handler = MessageHandler(
filters.TEXT | filters.PHOTO | filters.Sticker.ALL | filters.Dice.ALL,
antiflood_message,
)
app.add_handler(message_handler)
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("link", link))
app.add_handler(CommandHandler("help", help))
app.run_polling()