Skip to content

empenoso/telegram-channel-pruner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Telegram Channel Pruner 🤖🧹

Скрипт на Python для удаления нежелательных подписчиков из вашего Telegram-канала по дате их присоединения. Эффективно борется с последствиями бот-атак, работая в обход ограничений Telegram API.

Python License


🤷‍♂️ Зачем удалять подписчиков?

Казалось бы, все бьются над увеличением количества подписчиков в своих Telegram-каналах. Зачем уменьшать их число?

Я сам заинтересовался этой темой после странного всплеска трафика. Опубликовал статью про голосовых ассистентов — и из-за неудачного заголовка она внезапно стала вирусной. Обычно мои тексты собирают около 7 тысяч просмотров, но в этот раз счётчик вырос до 140 тысяч.

Я слышал истории, как на каналы без рекламы «наливаются» сотни или тысячи подписчиков. Звучит как подарок судьбы, но на практике это тревожный сигнал: чаще всего — это фейковые аккаунты или боты.

Мёртвая аудитория — это падение вовлеченности (ER, ERR), потеря интереса со стороны рекламодателей и снижение позиций канала в поиске Telegram. Особенно сейчас, когда алгоритмы всё больше ориентируются на наличие Premium-подписчиков.

⚙️ Как работает скрипт

Проблема: ограничения Telegram API

Telegram ограничивает доступ к полному списку подписчиков канала через официальное API. Максимум, что можно получить — это 200 последних подписчиков методом ChannelParticipantsRecent. Это ограничение является защитой от массового сбора данных, но мешает администраторам проводить чистку.

Решение: итеративная очистка

Этот скрипт работает в цикле, запрашивая самые свежие порции по 200 подписчиков. Он анализирует дату присоединения каждого пользователя и удаляет тех, кто подписался ПОСЛЕ указанной вами даты (например, после начала бот-атаки).

Как только скрипт встречает подписчика, который присоединился ДО нужной даты, он понимает, что все последующие пользователи в списке еще старше, и завершает работу. Это позволяет эффективно очистить канал от "свежих" ботов, несмотря на ограничения API.

✨ Основные возможности

  • Удаление по дате: Главная функция, позволяющая удалить всех, кто присоединился после определённого времени.
  • Безопасность:
    • Встроенные задержки между удалениями, чтобы избежать временных блокировок (FloodWaitError).
    • Запрос на подтверждение перед массовым удалением (можно отключить флагом --yes).
  • Логирование: Все удалённые пользователи сохраняются в файл kicked_users.csv для последующего анализа.
  • Информативность: Возможность получить диагностическую информацию о канале.
  • Сохранение списка: Команда для сохранения последних 200 подписчиков в CSV-файл (для анализа или "белого списка").

🚀 Установка

  1. Клонируйте репозиторий:

    git clone https://github.com/empenoso/telegram-channel-pruner.git
    cd telegram-channel-pruner
  2. (Рекомендуется) Создайте и активируйте виртуальное окружение:

    python -m venv venv
    # Windows
    .\venv\Scripts\activate
    # macOS / Linux
    source venv/bin/activate
  3. Установите зависимости:

    pip install -r requirements.txt

    Примечание для Windows: Если возникнет ошибка, связанная с часовыми поясами, библиотека tzdata из requirements.txt должна ее решить.

🛠️ Настройка

  1. Получите учетные данные Telegram API:

    • Перейдите на сайт my.telegram.org и войдите в свой аккаунт.
    • Откройте раздел "API development tools".
    • Создайте новое приложение. Вы получите api_id и api_hash.
  2. Заполните файл .env:

    # Учетные данные с my.telegram.org
    api_id=12345678
    api_hash=ВАШ_СЕКРЕТНЫЙ_ХЭШ
    
    # Ваш номер телефона в международном формате
    phone_number=+79123456789
  3. Настройте скрипт:

    • Откройте файл channel_cleaner.py.
    • Найдите строку CHANNEL_USERNAME = 'homeinv' и замените 'homeinv' на юзернейм вашего канала (например, '@my_channel').

👨‍💻 Использование

Все команды выполняются из терминала в папке проекта.

1. Диагностика канала (рекомендуется перед началом)

Эта команда покажет основную информацию о вашем канале и проверит, есть ли у скрипта доступ к списку участников.

python channel_cleaner.py info

2. Сохранение "белого списка"

Сохраняет последних 200 подписчиков в файл ГГГГ_ММ_ДД_subscribers_whitelist.csv. Полезно для анализа перед чисткой.

python channel_cleaner.py save

3. Удаление подписчиков по дате (основная команда)

Это главная команда для очистки канала. Она удаляет всех, кто присоединился ПОСЛЕ указанной даты и времени.

⚠️ Внимание: Указывайте время в Московском часовом поясе (Europe/Moscow). Скрипт автоматически конвертирует его в UTC для сравнения.

Пример: удалить всех, кто подписался после 10:40 утра 1 августа 2025 года

python channel_cleaner.py kickbydate --after-date "2025-08-01 10:40:00"

⚠️ Важные моменты

  • Необратимость: Используйте на свой страх и риск. Удаление подписчиков - необратимый процесс.
  • Права администратора: Вы должны быть админом канала с правами на удаление сообщений
  • Лимиты API: Скрипт автоматически обрабатывает лимиты Telegram
  • Безопасность: API ключи хранятся локально в файле .env

Подробности использования в статье:

🔗 Хабр: https://habr.com/p/933128/

🔗 Смартлаб: https://smart-lab.ru/mobile/topic/1188250/

🔗 Пикабу: https://pikabu.ru/story/_13039124


Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

About

A Python script to prune Telegram channel subscribers who joined after a specific date. Ideal for cleaning up after bot attacks.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages