Crosser bot
Описание
@crosser_bot - это инструмент для админов каналов и чатов. С помощью бота вы сможете получить детальную аналитику (Рис.1 и Рис.2) по своему каналу/чату:
- Количество реальных людей;
- Количество ботов;
- Время последнего появления подписчиков в Telegram;
- Время жизни пользователя на канале.


Также бот предоставляет инструмент для очистки канала/чата от:
- Неактивных пользователей (Которые заходили в Telegram больше месяца назад);
- Возможность очистить подписчиков которые вступили в канал/чат в определенный период времени;
- Была возможность очистить Удаленные аккаунты, но начиная с мая 2019 Telegram API перестал отдавать эти аккаунты.
Бот предоставляет поиск каналов/чатов у которых схожая аудитория с вашим каналом/чатом (Рис.3).

Есть функция которая позволяет получать каждый час отчет об онлайне вашего канала/чата (Рис.4).

Техническая сторона
Язык: Python 3.7.
Основные фреймворки и библиотеки: Asyncio, Aiohttp, Asyncpg, Aioredis, Aiogram, Telethon, Celery, Plotly.
Хранилища: PostgreSQL, Redis.
Используем Docker (swarm mode) для контейнеризации и удобного деплоя проекта.
Как происходит получение данных на основе которых работает весь функционал бота:
- Бот должен иметь минимальные права (Возможность добавления других админов в канал/чат);
- Пользователь который инициирует запрос для получение отчета (Рис.1, Рис.2), должен быть админом этого канала/чата;
- После того как все условия были удовлетворены, создается задача на получение и обработку данных которая попадает в очередь (Celery);
- С общего пула бот получает свободного агента (Реальный Telegram аккаунт);
- Далее агент обращается к Telegram API для того что бы вступить в канал/чат, после того как агент вступил в канал/чат, бот дает ему минимальные права админа;
- Агент рекурсивным поиском (смотреть ниже) начинает получать данные подписчиков с помощью запроса на поиск к Telegram API, в поиске используются символы английского и русского алфавита, emoji символы:
* Агент делает запрос на поиск по символу "a", если в ответ от Telegram API пришло данных о 200 подписчиков (Telegram API лимит), агент углубляется дальше, и поисковая строка становится "ab" и так далее, пока по поисковому запросу количество полученных подписчиков не будет меньше значения которое задается в конфигурации проекта;
* На каждой итерации бот делает одновременно 26 http запросов на поиск (в случае английского алфавита);
* В зависимости от количества подписчиков канала/чата бот делает большое количество запросов (в случае когда на канале есть 1000 подписчиков, количество запросов к Telegram API может равняться 400-600).

- После того как все данные были получены, агент выходит с канала/чата происходит вставка данных о пользователях и канале/чате в базу данных;
- Далее создается задача (Celery) на формирование и отправку отчета админам канала.
Трудности
- Количество поисковых запросов к Telegram API в случае большого канала/чата может быть очень большим, что очень замедляет получение отчета пользователем бота;
- С первой проблемы вытекает вторая проблема, когда определенному агенту Telegram API дает временный бан (FloodWaitError), в некоторых случаях бан может быть на 2 дня и более;
- Агенты долго не живут - Telegram может деактивировать агента (Deleted Account) сразу после регистрации или через некоторое время;
- Постоянная необходимость регистрировать большое количество аккаунтов (агентов) для стабильной работы бота.
- Невозможность получить данных о 100% аудитории.
Итог
В данный момент ботом воспользовалось 35 000+ пользователей, получено данных с 15 000+ каналов/чатов, общее количество уникальных пользователей которые были получены в результате выгрузки становит 27 000 000+.
Смотря на выше указанные показатели данный инструмент пользуется большим спросом среди админов каналов/чатов.
-