Как правильно считать активных пользователей Телеграм-бота в 2026 году
Как научить Телеграм-бота автоматически удалять тех, кто его заблокировал и актуализировать статистику, отслеживая блокировки на Python (Aiogram / python-telegram-bot).
Разработчики и владельцы Telegram-ботов часто сталкиваются с проблемой: бот рапортует о 50 000 пользователях в базе, но при рассылке постов сервер зависает на полчаса, посты получают всего 3 000 просмотров, а логи трещат от ошибок Forbidden: bot was blocked by the user.
Дело в том, что пользователи получают от бота то, что хотели, и блокируют его. База данных пухнет от «мертвых душ», статистика врёт, а официальная партнерская программа Telegram показывает совершенно другие цифры активности.
В этой статье разберем механику того, как правильно происходит очистка базы бота и актуализация статистики без ущерба для серверов.
Почему «тихая» очистка базы бота так важна?
Большинство начинающих разработчиков чистят базу варварским методом: запускают рассылку, алгоритм спотыкается о заблокированных юзеров, ловит Exception и только тогда меняет им статус в БД. Это плохой подход:
- Медленно: Telegram API ставит жесткие лимиты на сообщения (около 30 сообщений в секунду на всех юзеров). Попытки отправить сообщение в заблокированный чат расходуют этот лимит впустую.
- Риски бана: Отправка тысяч сообщений «в стену» может быть расценена анти-спам алгоритмами Telegram как подозрительная активность. Если ваш python telegram bot рассылает спам мертвым душам, есть риск блокировки самого токена.
- Неактуальная статистика: До момента следующей рассылки вы думаете, что ваша аудитория гораздо больше, чем она есть на самом деле.
Элегантное решение: используем my_chat_member
Телеграм уже давно умеет сам сообщать вашему серверу о том, что юзер его заблокировал или разблокировал. Для этого существует специальный тип апдейтов — my_chat_member (обновление статуса бота в чате или личной переписке).
Когда пользователь нажимает «Остановить бота» (Stop Bot), Telegram отправляет нам апдейт, в котором new_chat_member.status равен kicked. Когда пользователь снова нажимает /start — статус меняется на member.
Вам достаточно просто слушать эти системные обновления и актуализировать статистику бота в базе данных в реальном времени.
Пример логики (на базе python-telegram-bot):
Если вы используете классическую библиотеку, вот как можно отловить событие, когда python telegram bot заблокирован пользователем:
from telegram import Update from telegram.ext import ContextTypes, ChatMemberHandler async def track_bot_blocks(update: Update, context: ContextTypes.DEFAULT_TYPE): result = update.my_chat_member # Проверяем, изменился ли статус бота if result.old_chat_member.status != result.new_chat_member.status: user_id = result.chat.id # Если юзер заблокировал бота if result.new_chat_member.status == "kicked": # Меняем статус в базе на неактивный await db.set_user_inactive(user_id) print(f"Пользователь {user_id} заблокировал бота. Отдыхай с миром.") # Если юзер разблокировал бота elif result.new_chat_member.status == "member": await db.set_user_active(user_id) print(f"Пользователь {user_id} снова с нами!") # Не забудьте зарегистрировать хэндлер: # application.add_handler(ChatMemberHandler(track_bot_blocks, ChatMemberHandler.MY_CHAT_MEMBER))
Aiogram: как отловить блокировку бота
Аналогичный механизм есть и в самом популярном фреймворке. Чтобы aiogram отловил блокировку бота, используйте встроенный фильтр статусов (kicked / member) через декоратор @router.my_chat_member():
from aiogram import Router
from aiogram.types import ChatMemberUpdated
from aiogram.filters import ChatMemberUpdatedFilter, KICKED, MEMBER
router = Router()
@router.my_chat_member(ChatMemberUpdatedFilter(member_status_changed=KICKED))
async def user_blocked_bot(event: ChatMemberUpdated):
user_id = event.chat.id
# Пользователь заблокировал бота -> отключаем в БД
await db.set_user_inactive(user_id)
@router.my_chat_member(ChatMemberUpdatedFilter(member_status_changed=MEMBER))
async def user_unblocked_bot(event: ChatMemberUpdated):
user_id = event.chat.id
# Пользователь разблокировал бота -> включаем в БД
await db.set_user_active(user_id)
С помощью этих коротких сниппетов ваш бот будет мгновенно узнавать о том, кто от него отписался. Очистка базы происходит на лету, и ваша статистика всегда будет идеально точной.
Практический кейс: как мы реализовали это у себя в ReklamaPlan
Мы не просто храним статусы True/False где-то в недрах базы данных, но и интегрировали этот механизм прямо в интерфейс администратора нашего проекта — бота для автопостинга и рассылок ReklamaPlanBot.

На скриншоте админ-панели видно два важных элемента:
- Мы выгружаем список пользователей, и те, кто заблокировал нашего бота, автоматически подсвечиваются красным фоном. Это позволяет визуально оценить процент «отвала» аудитории телеграм бота.
- Есть отдельная кнопка «Аудит базы», которая позволяет в один клик физически удалить «мертвые души» из БД.
Благодаря такому подходу наша статистика остаётся кристально чистой, а рассылки пользователям бота улетают в Telegram API без единой ошибки.
О нашем проекте: автоматизация для владельцев Телеграм-чатов
Кстати, если вам нужен не просто код, а готовый и мощный инструмент для вашего Telegram-канала — знакомьтесь с @ReklamaPlanbot Это профессиональный планировщик — бот для АвтоПостинга в телеграм, созданный специально для админов чатов и каналов, и заточенный под рекламные размещения, но не только!
Всё, что вы привыкли делать руками (или за что платили сторонним менеджерам), наш бот забирает на себя:
- Полный автопилот: отложенный постинг в 5+ чатов одновременно, строгий авто-закреп и авто-удаление по таймеру.
- Smart Marketing: бот умет зарабатывать за вас. После покупки рекламодателем размещения в ваших каналах и чатах тг — @ReklamaPlanbot автоматически напоминает о том что можно докупить опции закрепа и пуша для увеличения охвата (в зависимости от того что не купил рекламодатель).
- Перед тем как автоматически удалить рекламный пост, бот предложит заказчику докупить размещения или оставить пост навсегда (допродажи из воздуха).
- Маркетплейс заявок: загрузите свой прайс-лист в бота, и вы сможете получать заявки (и деньги) от рекламодателей, которые уже пользуются нашим сервисом.
- Обход лимитов Телеграм: устали от ограничения в 1024 символа под фото? Бот умеет обходить этот лимит — публикуйте огромные тексты (до 4096 символов) вместе с изображениями! Премиум Эмодзи и цветные кнопки — без платной подписки телеграм!
- Быстрое создание задач: просто перешлите готовый рекламный пост (с текстом, видео, галереей и т.д.) в бота — и он моментально подхватит его как черновик. Никакой настройки с нуля.
Мы зашили в этот проект всё, чтобы владельцы каналов могли расслабиться и получать доходы на автопилоте.
🔗 Подробное описание бота и как его протестировать: https://ucmod.com/reklama-planner/