
Как я сделал Telegram-бота для единой блокировки в каналах и чатах
Оглавление
У одного Telegram-проекта редко бывает только одна площадка. Обычно есть основной чат, закрытый канал, отдельная группа для участников, тематические ветки и ещё несколько мест, куда приходит одна и та же аудитория.
Пока всё спокойно, такая структура удобна. Но когда появляется нарушитель, администратору приходится открывать каждую площадку и повторять одно действие вручную. В одном месте человека заблокировали, в другом забыли. Где-то нашли похожий username и рискуют забанить не того пользователя.
Так появился АвтоБанСервис — Telegram-бот, который переносит уже принятое решение администратора из главного чата во все связанные каналы и группы.

Попробовать
АвтоБанСервис
Синхронизирует бан и разбан пользователя во всех связанных каналах и чатах проекта.

В чём была проблема
Представим сообщество с основным чатом и несколькими закрытыми каналами. Человек нарушает правила, модератор блокирует его в чате, но доступ к остальным площадкам у пользователя остаётся.
Дальше начинается ручная работа:
- Найти пользователя в каждой группе.
- Убедиться, что это тот же человек.
- Проверить права администратора.
- Повторить блокировку.
- Не забыть сделать то же самое при разблокировке.
Чем больше площадок, тем выше вероятность пропустить одну из них или совершить ошибку. При этом само решение уже принято: администратору не нужен ещё один инструмент модерации, ему нужно аккуратно повторить действие в нужных местах.
Идея АвтоБанСервиса
Я решил собрать связанные площадки в проекты.
У каждого проекта есть:
- главный чат, где команда обычно модерирует участников;
- список каналов и чатов, куда нужно переносить действия;
- владельцы и администраторы, которых нельзя случайно заблокировать;
- журнал операций и отдельный канал для итоговых уведомлений.
Бот не анализирует переписку и не решает, кого наказывать. Он реагирует только на постоянный бан или разбан, который уже сделал администратор.
Если человека заблокировали в главном чате, АвтоБанСервис получает его точный Telegram ID, проверяет настройки проекта и создаёт задачи для подключённых площадок. При разблокировке работает тот же принцип в обратную сторону.
Как всё работает
Первичная настройка проходит внутри Telegram:
- Владелец создаёт новый проект в боте.
- Подключает главный чат.
- Выбирает связанные каналы и группы через системное меню Telegram.
- Добавляет бота администратором с необходимыми правами.
- Запускает проверку доступов.

После этого обычный сценарий модерации не меняется. Администратор блокирует нарушителя там же, где делал это раньше, а бот берёт повторяющуюся работу на себя.
Перед каждой операцией сервис проверяет:
- активен ли проект;
- есть ли у бота нужные права;
- не относится ли пользователь к защищённым участникам;
- не выполнялось ли это действие раньше;
- не достигнут ли установленный лимит;
- можно ли безопасно продолжить очередь.
Владелец получает итог по каждой площадке. Если действие невозможно, бот не ограничивается сообщением «ошибка», а показывает причину и следующий шаг: например, вернуть права администратора или проверить настройки канала.
Почему используется точный Telegram ID
Username в Telegram можно поменять, удалить или передать другому человеку. У разных пользователей могут быть очень похожие имена. Поэтому строить чувствительное действие только на тексте @username небезопасно.
Основной идентификатор в АвтоБанСервисе — числовой Telegram ID. Он приходит вместе с событием блокировки и однозначно указывает на пользователя.
Есть и ручной сценарий: владелец может отправить ID, увидеть карточку подтверждения и проверить список площадок перед запуском. Username принимается только тогда, когда бот уже может уверенно связать его с известным пользователем. Если такой связи нет, сервис просит точный ID вместо попытки угадать.
Это менее эффектно, чем обещание «найдём кого угодно по нику», зато безопаснее. Для инструмента блокировки такая честность важнее удобной, но ненадёжной магии.
Защита от ошибочного бана
Автоматизация опасна, если она просто быстро повторяет ошибку. Поэтому вокруг основного действия пришлось построить несколько уровней защиты.
Бот не блокирует:
- владельца проекта;
- самого себя;
- администраторов целевого чата;
- пользователей из защищённого списка.
Перед ручным запуском показывается подтверждение: кого именно заблокируют и в каких каналах. Повторные события не создают бесконечные дубли, а уже обработанные операции не запускаются заново без причины.
АвтоБанСервис также намеренно игнорирует муты, временные ограничения, выходы из чата и удаление сообщений. Эти события нельзя уверенно считать постоянным баном. Лучше ничего не сделать, чем распространить по всему проекту неверное решение.
Очередь вместо одновременного штурма
Одно действие в главном чате может превратиться в несколько операций Telegram API. Если одновременно блокируют нескольких пользователей, задач становится ещё больше.
Запускать их все разом неудобно: можно упереться в ограничения Telegram, получить нестабильные ответы и потерять понимание, что уже выполнено.
Поэтому операции идут через последовательную очередь. Каждая задача имеет своё состояние, может быть повторена после временной проблемы и не теряется при перезапуске сервиса.
Лимит считается по людям, а не по количеству подключённых каналов. Если лимит достигнут, новые действия остаются в очереди. После изменения настроек или начала нового периода выполнение продолжается с того места, где остановилось.
Для такой задачи отдельный Redis оказался необязательным. Очередь хранится в PostgreSQL, а блокировки строк не дают нескольким процессам забрать одну задачу одновременно.
Что видит владелец проекта
Весь рабочий интерфейс находится в Telegram. Владелец может:
- создавать и переименовывать проекты;
- подключать главный чат и площадки назначения;
- проверять права бота;
- запускать ручной бан или разбан;
- менять лимиты;
- смотреть список заблокированных пользователей;
- открывать журнал последних событий;
- подключать канал с итоговыми отчётами.

В журнале важно разделять три ситуации: действие выполнено, действие безопасно пропущено и действие не удалось. Например, пропуск администратора — это не техническая ошибка, а нормальная работа защиты.
Статистика помогает быстро проверить работу проекта: отдельно видны блокировки за сутки, неделю, месяц и всё время, а также количество разбанов.

Из чего собран бот
АвтоБанСервис работает на Python и aiogram 3. Данные проектов, площадок и операций хранятся в PostgreSQL. Для асинхронной работы используются SQLAlchemy и asyncpg, а изменения структуры базы проходят через Alembic.
Сервис разворачивается через Docker Compose. Это упрощает перенос между серверами: приложение и база запускаются предсказуемо, а конфигурация и секреты остаются вне репозитория.
При разработке особенно важными оказались не сами команды Telegram Bot API, а поведение вокруг них:
- как не потерять событие;
- как продолжить незавершённую очередь;
- как пережить временную проблему с сетью;
- как не выполнить одно действие дважды;
- как объяснить ошибку человеку без доступа к серверным логам.
Именно эти детали превращают небольшой скрипт в сервис, которым можно пользоваться в реальном сообществе.
Что я понял во время разработки
Первая мысль была простой: «увидел бан — повторил бан». Но чувствительные операции быстро заставляют думать шире.
Нужно учитывать права в разных чатах, защищённых пользователей, лимиты, повторные события, неполные настройки и ограничения самого Telegram. Ещё важнее предусмотреть обратное действие: если человека разблокировали, система должна синхронно вернуть доступ там, где это возможно.
Главный вывод: хорошая автоматизация не просто экономит клики. Она делает процесс предсказуемым. Администратор должен понимать, почему действие выполнилось, почему было пропущено и что нужно исправить.
Кому подойдёт АвтоБанСервис
Бот полезен проектам, у которых одна аудитория распределена между несколькими Telegram-площадками:
- закрытым клубам и сообществам;
- образовательным проектам;
- авторам с каналом и отдельным чатом;
- командам модерации;
- сеткам тематических групп.
Если у проекта только один чат, отдельная система синхронизации обычно не нужна. Но когда одни и те же правила действуют сразу в нескольких местах, бот снимает рутину и уменьшает вероятность человеческой ошибки.
Попробовать
АвтоБанСервис уже работает в Telegram: @AutoBanSer_bot.
Для полного теста понадобятся собственный чат и канал, где вы можете выдать боту права администратора. Начать можно с тестового проекта и двух площадок, проверить бан и разбан, а затем подключать рабочее сообщество.
Если коротко: АвтоБанСервис не решает, кого блокировать. Он безопасно переносит решение администратора туда, где оно тоже должно действовать.
Похожую автоматизацию можно собрать под процессы конкретного проекта — подробнее об услуге Telegram-боты под ключ.

Глеб Цыгалов | Блог
В Telegram-канале больше цифр, кейсов и полезных материалов про рекламу, каналы, ботов и инструменты для бизнеса.


