
Бот для массовой слежки в Telegram на Python

Informer (TGInformer) — это библиотека ботов, которая позволяет маскироваться под несколько РЕАЛЬНЫХ пользователей Telegram и шпионить за 500+ каналами Telegram на один аккаунт. Детали записываются в базу данных MySQL, частную Google Таблицу и ваш собственный приватный канал для анализа.
Это работающий прототип проекта с известными ошибками. Не стесняйтесь форкать, делиться и писать мне.



Поддержка регулярных выражений для фильтрации ключевых слов
SQLAlchemy для агностического хранения данных

Запись контекстных данных сообщений и каналов в приватный канал и базу данных
Хранение метаинформации об отправителе сообщения, канале, количестве участников канала


Сохранение сессии вступления в каналы
Вход один раз — бот остается в системе навсегда без повторной 2FA-аутентификации
Вступление до 500 каналов на аккаунт

Отредактируйте файл informer.env, который содержит все необходимые переменные окружения для Informer.
Вы можете получить необходимую информацию, связанную с Telegram, здесь:
https://my.telegram.org/auth, чтобы аутентифицировать вашу учетную запись, предоставив номер телефона и код подтверждения, отправленный на ваш номер телефона (или в Telegram)


После аутентификации нажмите на «API Development Tools»

Создайте новое приложение, заполнив форму, показанную ниже

Теперь у вас должны быть необходимые значения параметров для полей файла informer.env: TELEGRAM_API_HASH и TELEGRAM_API_APP_ID

TELEGRAM_ACCOUNT_PHONE_NUMBER, и переходите к следующему разделу
Пока у нас есть все необходимое для доступа Telethon и Informer к Telegram APIs, далее нам нужно получить идентификаторы для аккаунта вашего бота.
userinfobot.


Вы должны получить имя пользователя Telegram и ID учетной записи Telegram. Это важно

informer.env и заполните значения для TELEGRAM_ACCOUNT_ID (это должен быть ID вашей учетной записи Telegram из предыдущего шага) и TELEGRAM_ACCOUNT_USER_NAME.Вы можете опционально заполнить TELEGRAM_NOTIFICATIONS_CHANNEL_ID вашим именем пользователя или ID канала.
TELEGRAM_ACCOUNT_PHONE_NUMBER заполнено, так как это ключ к генерации сессии. Для создания нескольких аккаунтов обратитесь к разделу Burner App ниже.Убедитесь, что у вас запущен Python 3, и просто выполните ./quick_start.sh в директории.
Это необходимо выполнить сначала, чтобы аутентифицироваться в Telegram при первом запуске и сгенерировать локальный файл сессии.
Позже вы можете скопировать файлы для разных учетных записей в app/session и смонтировать их через Docker, если решите это сделать.

Вам будет предложено ввести код аутентификации, который вы получили либо через Telegram (если вы ранее входили в систему), либо через SMS.

Нажмите Enter, и ваша сессия будет создана в папке app/session с именем файла, соответствующим международному номеру телефона, который вы указали, с расширением .session.
Перейдите к следующему разделу, где мы используем Docker Compose для настройки базы данных.
Этот шаг необязателен, но если вы хотите создать приватный групповой канал и получить ID группы, сделайте следующее:

Установите URL в файле informer.env в параметре TELEGRAM_NOTIFICATIONS_CHANNEL_URL
Чтобы получить ID канала, просто выполните python3 bot.py <TELEGRAM_ACCOUNT_ID> в директории app, где <TELEGRAM_ACCOUNT_ID> — это ID учетной записи, который вы ранее сгенерировали.
Когда скрипт загрузится, он отобразит все каналы, в которых вы находитесь. Просто скопируйте это значение и поместите его в параметр TELEGRAM_NOTIFICATIONS_CHANNEL_ID файла informer.env, затем завершите скрипт. Теперь вы готовы запустить Informer.
После выполнения quick_start.sh вы можете запустить docker compose:
./start.sh, чтобы собрать Docker-контейнеры, включая базу данных MySQL
Выполните ./stop.sh, чтобы остановить контейнеры
Выполните ./clean.sh, чтобы удалить висящие контейнеры и тома. ** ВНИМАНИЕ ** это СБРОСИТ базу данных, и вы потеряете все свои данные.
Несколько моментов, на которые стоит обратить внимание:
Раньше нужно было запускать собственный экземпляр MySQL, что вызывало некоторые проблемы с совместимостью строк подключения и версионированием. В этом обновлении база данных создается для вас и сохраняется на диске.
Кроме того, предоставляется Dozzle, чтобы вы могли просматривать логи в браузере: просто перейдите на http://localhost:9999 и нажмите на контейнер app_informer.
Если вы не хотите использовать свой номер телефона и хотите запустить бота Informer с некоторой степенью анонимности, вы можете использовать приложение Burner, доступное на iOS и Android.
Установите приложение Burner

Следуйте тем же шагам, что и выше, указав новый номер телефона здесь: https://my.telegram.org/auth
Подтвердите через Burner. Вам будет отправлен код аутентификации по SMS, который необходимо будет предоставить

Войдите в Telegram
Попробуйте войти в приложение, выполнив python3 bot.py <api_user_id> в директории app.
Поскольку вы входите с помощью Telethon, он запросит ваш код аутентификации в терминале, как и ранее.
Он был отправлен через сообщение Telegram или SMS.
Предоставьте его, и он сохранит учетные данные сессии в файле сессии, упомянутом ниже. Вам больше не нужно будет аутентифицироваться, если у вас сохранен файл сессии.
Сессии сохраняются в папке app/session/ как <telegram_phone_number>.session
Повторяйте, пока не получите все необходимые файлы сессий, и просто смонтируйте их в Docker.
Разобраться, как масштабировать аккаунты, было немного кошмаром, так как мне нужен был автоматизированный процесс. Telegram требует использования реального номера телефона, который может получать сообщения с короткого номера.
К сожалению, услуги с API, такие как Twilio, запрещены для получения SMS с коротких номеров в США, Канаде и Великобритании https://support.twilio.com/hc/en-us/articles/223181668-Can-Twilio-numbers-receive-SMS-from-a-short-code- из-за мошенничества. Это было бы идеально, bahumbug.
Целый вечер был потрачен на эту попытку, пока я не вспомнил отличное приложение, которое использовал раньше: Burner (https://www.burnerapp.com/) — которое, кстати, имеет API (https://developer.burnerapp.com/api-documentation/incoming-webhooks/). Это означает, что вы можете динамически генерировать номера, создавать новый аккаунт и аутентифицировать его через клиентский SDK Telegram на Python (Telethon: https://docs.telethon.dev/en/latest/)
Лучшая часть в том, что номера Burner бесплатны в течение 14 дней. Аккаунты Telegram, подключенные через клиентский API, нуждаются только в однократном входе и постоянно сохраняют сессии. Я не интегрировался с API Burner, но процесс прост.
Бот построен на основе Telethon Python SDK (https://docs.telethon.dev/en/latest/)
Несколько моментов, на которые стоит обратить внимание, и подводные камни, обнаруженные при создании этого прототипа:
Telegram применяет жесткое ограничение частоты, которое вызывает FloodWaitErrors. Согласно моим исследованиям, похоже, никто не знает алгоритма этого ограничения, но вы хотите, чтобы ваши задержки при откате масштабировались в ответ, потому что при нарушении и превышении неизвестного лимита задержки становятся экспоненциальными. Я нашел золотую середину в своем подходе к ожиданию.
FloodWaitErrors могут возникать, когда вы отправляете слишком много запросов к API, будь то запрос информации о пользователях или вступление в слишком много каналов слишком быстро.
Telethon создаст файл сессии. Вы можете задать имя файла сессии при создании экземпляра клиента Telethon: TelegramClient(<session_file_name>, <api_user_id>, <api_user_hash>)
Этот файл на самом деле является базой данных sqlite, к которой вы можете подключиться. Он действует как кэш и хранит исторические данные, а также информацию аутентификации сессии, так что вам не придется повторно проходить 2FA Telegram. Обратите внимание, что при первом использовании API вам нужно будет войти в систему и пройти аутентификацию.
По мере работы бота и вступления в каналы вы будете видеть обновление клиента в реальном времени и отображение новых каналов, к которым вы присоединились.

СОВЕТ: TelegramX — на сегодняшний день лучший клиент для этих целей, так как он поддерживает множественный вход. Скачать здесь:
Примечание: интеграция с Google Sheets полностью ОПЦИОНАЛЬНА. Приложение отлично работает и без нее, используя только базу данных MySQL.
Если вы хотите включить ведение журнала в Google Sheets:
app/credentials/README.mdКраткий обзор:
app/credentials/google_credentials.jsonЭто опционально, и бот будет работать и без этого.
bot.py дважды: один раз для вступления в каналы и второй раз для их мониторинга. Я знаю об этой вопиющей ошибке и исправлю ее в следующей версии.Проект показался вам интересным? Пожалуйста, поставьте звезду, если это так.
Он был создан за два дня как прототип для друга из сферы криптовалют. Если вы найдете какие-либо интересные или прибыльные применения, я всегда рад сотрудничеству. Вы можете связаться со мной:
@paulpierre в Twitter или hi (at) paulpierre (dot) com
Большинство моих интересных проектов приватны на github, но не стесняйтесь посмотреть: http://www.github.com/paulpierre или предыдущие работы на http://www.paulpierre.com
Copyright (c) 2020 Paul Pierre Настоящим предоставляется разрешение, бесплатно, любому лицу, получившему копию этого программного обеспечения и связанных с ним файлов документации (далее — «Программа»), на использование Программы без ограничений, включая, без ограничения, права на использование, копирование, модификацию, слияние, публикацию, распространение, сублицензирование и/или продажу копий Программы, а также на разрешение лицам, которым предоставляется Программа, делать это, при соблюдении следующих условий: Указанное выше уведомление об авторских правах и это уведомление о разрешении должны быть включены во все копии или значительные части Программы. ПРОГРАММА ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И ОТСУТСТВИЯ НАРУШЕНИЙ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА КАКИЕ-ЛИБО ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ИНУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ ТО В СИЛУ ДОГОВОРА, ДЕЛИКТА ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКШУЮ ИЗ ИЛИ В СВЯЗИ С ПРОГРАММОЙ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММОЙ.