Добавить в корзинуПозвонить
Найти в Дзене
Signal Flow

Как защитить Telegram-бота от спама: пишем антифлуд-систему на Python

Флуд (от англ. flood — «потоп») — это лавина однотипных или бессмысленных сообщений, которая: В этой статье покажу, как создать легковесную систему защиты от флуда всего в 50 строк кода. AntiFloodMiddleware — это «прослойка» между пользователем и ботом, которая:
✔ Считает сообщения от каждого юзера
✔ Блокирует спамеров автоматически
✔ Отправляет предупреждения
✔ Гибко настраивается под любые задачи Пример настройки: # Разрешаем не более 3 сообщений в 5 секунд
middleware = AntiFloodMiddleware(limit=3, interval=5.0) Храним данные о сообщениях в словаре: self.user_messages = defaultdict(list) # {user_id: [timestamp1, timestamp2...]} Пропускаем не-сообщения (например, колбэки): if not event.message or not hasattr(event.message, 'from_user'):
return await handler(event, data) Удаляем устаревшие сообщения и проверяем лимит: # Оставляем только свежие сообщения (за последние N секунд)
self.user_messages[user_id] = [t for t in self.user_messages[user_id]
if ti
Оглавление
Антифлуд-мидлварь для Telegram бота: защита от спама
Антифлуд-мидлварь для Telegram бота: защита от спама

Почему флуд — это проблема для Telegram-ботов?

Флуд (от англ. flood — «потоп») — это лавина однотипных или бессмысленных сообщений, которая:

  • Затрудняет работу бота — сервер не справляется с нагрузкой.
  • Раздражает пользователей — чат превращается в помойку.
  • Может привести к бану — Telegram блокирует ботов за подозрительную активность.

В этой статье покажу, как создать легковесную систему защиты от флуда всего в 50 строк кода.

Как работает антифлуд-фильтр?

AntiFloodMiddleware — это «прослойка» между пользователем и ботом, которая:
✔ Считает сообщения от каждого юзера
✔ Блокирует спамеров автоматически
✔ Отправляет предупреждения
✔ Гибко настраивается под любые задачи

Пример настройки:

# Разрешаем не более 3 сообщений в 5 секунд
middleware = AntiFloodMiddleware(limit=3, interval=5.0)

Разбираем код по шагам

1. Инициализация

Храним данные о сообщениях в словаре:

self.user_messages = defaultdict(list) # {user_id: [timestamp1, timestamp2...]}

2. Фильтрация событий

Пропускаем не-сообщения (например, колбэки):

if not event.message or not hasattr(event.message, 'from_user'):
return await handler(event, data)

3. Логика ограничений

Удаляем устаревшие сообщения и проверяем лимит:

# Оставляем только свежие сообщения (за последние N секунд)
self.user_messages[user_id] = [t for t in self.user_messages[user_id]
if time.time() - t < self.interval]

# Если лимит превышен — блокируем
if len(self.user_messages[user_id]) > self.limit:
await event.answer("⚠️ Слишком часто! Подождите...")
return None

5 причин внедрить эту систему

  1. Защита от ботов — никаких авто-кликеров.
  2. Экономия ресурсов — снижение нагрузки на сервер.
  3. Гибкие правила — можно настроить под любой сценарий.
  4. Прозрачность — все события логируются.
  5. Простота — интеграция за 10 минут.

Где применять?

  • Чат-боты с ограниченными ресурсами
  • Публичные боты в крупных чатах
  • Сервисы с платными запросами
🔗 Готовое решение: GitHub-репозиторий с кодом

Почему это лучше других решений?

  • Не требует БД — работает на оперативной памяти.
  • Не мешает юзерам — мягкие предупреждения вместо бана.
  • Открытый код — можно адаптировать под любой фреймворк.

Хотите бота с защитой от флуда «под ключ»?

Команда ELSE разрабатывает Telegram-ботов с интегрированной антиспам-системой:
✔ Готовые решения за 3-5 дней
✔ Настройка лимитов под ваши задачи
✔ Поддержка и масштабирование

Заказать бота

Теги:
#Telegram #Python #Программирование #Боты #Код