
Un bot de vigilancia masiva de Telegram en Python

Informer (TGInformer) es una biblioteca de bots que te permite hacerte pasar por múltiples usuarios REALES en Telegram y espiar más de 500 canales de Telegram por cuenta. Los detalles se registran en una base de datos MySQL, una hoja de Google privada y tu propio canal privado para su análisis.
Este es un proyecto de prueba de concepto funcional con errores conocidos. Siéntete libre de bifurcar (fork), compartir y enviarme un mensaje.



Compatibilidad con expresiones regulares para el filtrado de palabras clave
SQLAlchemy para persistencia de datos agnóstica

Registro de datos contextuales de mensajes y canales en un canal privado y base de datos
Almacena metainformación sobre el remitente del mensaje, el canal y el número de participantes en el canal


Persiste la sesión de los canales unidos
Inicia sesión una vez, el bot permanece conectado para siempre sin necesidad de reautenticación 2FA
Únete a hasta 500 canales por cuenta

Edita el archivo informer.env que contiene todas las variables de entorno requeridas para Informer
Puedes obtener la información necesaria relacionada con Telegram aquí:
https://my.telegram.org/auth para autenticar tu cuenta proporcionando un número de teléfono y el código de confirmación enviado a tu número de teléfono (o a Telegram)


Una vez autenticado, haz clic en "API Development Tools"

Procede a crear una Nueva Aplicación completando el formulario que se muestra a continuación

Ahora deberías tener los valores de parámetros necesarios para los campos del archivo informer.env: TELEGRAM_API_HASH y TELEGRAM_API_APP_ID

TELEGRAM_ACCOUNT_PHONE_NUMBER, y continúa con la siguiente sección
Hasta ahora tenemos lo necesario para que Telethon e Informer accedan a las APIs de Telegram; a continuación necesitamos obtener los identificadores de la cuenta de tu bot.
userinfobot.


Deberías recibir tu nombre de usuario de Telegram y tu ID de cuenta de Telegram. Esto es importante.

informer.env y completa los valores de TELEGRAM_ACCOUNT_ID (que debería ser tu ID de cuenta de Telegram del paso anterior) y TELEGRAM_ACCOUNT_USER_NAME.Opcionalmente, puedes completar TELEGRAM_NOTIFICATIONS_CHANNEL_ID con tu nombre de usuario o el ID de un canal.
TELEGRAM_ACCOUNT_PHONE_NUMBER, ya que esto es clave para generar la sesión. Para crear múltiples cuentas, consulta la aplicación Burner más abajo.Asegúrate de estar ejecutando Python 3 y simplemente ejecuta ./quick_start.sh en el directorio.
Debes ejecutar esto primero para poder autenticarte con Telegram en la primera ejecución y generar un archivo de sesión local
Más tarde puedes copiar los archivos para las diferentes cuentas en app/session y montarlos mediante Docker si así lo decides.

Se te pedirá que ingreses el código de autenticación que recibiste, ya sea a través de Telegram si has iniciado sesión antes, o mediante SMS

Presiona Enter y tu sesión debería generarse en la carpeta app/session con el nombre de archivo como el número de teléfono internacional que proporcionaste con una extensión .session.
Continúa con la siguiente sección, donde usamos Docker Compose para configurar una base de datos.
Este paso es opcional, pero si deseas crear un canal de grupo privado y quieres obtener el ID del grupo, haz lo siguiente:

Establece la URL en el archivo informer.env bajo el parámetro TELEGRAM_NOTIFICATIONS_CHANNEL_URL
Para obtener el ID del canal, simplemente ejecuta python3 bot.py <TELEGRAM_ACCOUNT_ID> en el directorio app, donde <TELEGRAM_ACCOUNT_ID> es el ID de cuenta que generaste anteriormente.
Cuando el script se cargue, mostrará todos los canales en los que estás; simplemente copia este valor y colócalo en el parámetro TELEGRAM_NOTIFICATIONS_CHANNEL_ID del archivo informer.env y mata el script. Ya estás listo para ejecutar Informer.
Después de ejecutar quick_start.sh, puedes ejecutar docker compose de la siguiente manera:
./start.sh para construir los contenedores Docker que incluyen la base de datos MySQL
Ejecuta ./stop.sh para detener los contenedores
Ejecuta ./clean.sh para eliminar contenedores y volúmenes huérfanos. ** NOTA ** esto REINICIARÁ la base de datos y perderás todos tus datos.
Algunas cosas a tener en cuenta:
Antes se requería ejecutar tu propia instancia de MySQL, lo que generaba problemas de compatibilidad de cadenas de conexión y versiones. En esta actualización, se crea automáticamente y se persiste en el disco.
Además, se proporciona Dozzle para que puedas ver los registros en tu navegador; simplemente ve a http://localhost:9999 y haz clic en el contenedor app_informer.
Si no quieres usar tu propio número de teléfono y deseas ejecutar el bot Informer con cierto grado de anonimato, puedes usar la aplicación Burner disponible en iOS y Android.
Instala la aplicación Burner

Sigue los mismos pasos anteriores proporcionando el nuevo número de teléfono aquí: https://my.telegram.org/auth
Valida con Burner. Se te enviará un código de autenticación por SMS, que deberás proporcionar.

Inicia sesión en Telegram
Intenta iniciar sesión con la aplicación ejecutando python3 bot.py <api_user_id> en el directorio app.
Dado que estás iniciando sesión con Telethon, te pedirá tu código de autenticación en la terminal como antes.
Esto se envió mediante un mensaje de Telegram o SMS.
Proporciónalo y guardará tus credenciales de sesión en el archivo de sesión mencionado anteriormente. Ya no necesitarás autenticarte mientras tengas el archivo de sesión guardado.
Las sesiones se guardan en la carpeta app/session/ como <telegram_phone_number>.session
Repite el proceso hasta que tengas todos los archivos de sesión necesarios y simplemente móntalos en Docker.
Descubrir cómo escalar cuentas fue una pesadilla, ya que necesitaba un proceso automatizado. Telegram requiere que uses un número de teléfono real que pueda recibir mensajes de texto de un código corto.
Desafortunadamente, servicios con API como Twilio tienen prohibido recibir SMS de códigos cortos en EE. UU., Canadá y Reino Unido https://support.twilio.com/hc/en-us/articles/223181668-Can-Twilio-numbers-receive-SMS-from-a-short-code- por motivos de fraude. Esto habría sido ideal, bahumbug.
Pasé una noche entera en este esfuerzo hasta que recordé una gran aplicación que usé en el pasado: Burner (https://www.burnerapp.com/) — que casualmente tiene una API (https://developer.burnerapp.com/api-documentation/incoming-webhooks/). Lo que significa que puedes generar números dinámicamente, instanciar una nueva cuenta y autenticarla todo a través del SDK de cliente de Telegram en Python (Telethon: https://docs.telethon.dev/en/latest/)
Lo mejor es que los números de Burner son gratuitos durante 14 días. Las cuentas de Telegram conectadas a través de la API de cliente solo necesitan iniciar sesión una vez y las sesiones persisten permanentemente. No he integrado con la API de Burner, pero el proceso es sencillo.
El bot está construido sobre el SDK de Telethon para Python (https://docs.telethon.dev/en/latest/)
Algunas cosas a tener en cuenta y problemas encontrados al construir esta prueba de concepto:
FloodWaitErrors pueden ocurrir cuando estás enviando demasiadas solicitudes a la API, ya sea consultando información de usuarios o uniéndote a demasiados canales demasiado rápido.
TelegramClient(<session_file_name>, <api_user_id>, <api_user_hash>)
Este archivo resulta ser una base de datos sqlite a la que puedes conectarte.
Actúa como una caché y almacena datos históricos, así como tu información de
autenticación de sesión, para que no tengas que reautenticarte con la 2FA de
Telegram. Ten en cuenta que deberás iniciar sesión por primera vez y
autenticarte cuando uses la API por primera vez.
A medida que el bot se ejecuta y se une a canales, verás que tu cliente se actualiza en tiempo real y muestra los nuevos canales a los que te has unido.

CONSEJO: TelegramX es, con diferencia, el mejor cliente para estos fines, ya que admite inicio de sesión múltiple. Descárgalo aquí:
Nota: La integración con Google Sheets es completamente OPCIONAL. La aplicación funciona perfectamente solo con la base de datos MySQL.
Si deseas habilitar el registro en Google Sheets:
app/credentials/README.mdResumen rápido:
app/credentials/google_credentials.jsonEsto es opcional y el bot funcionará sin ello.
bot.py dos veces: una para que se una a los canales y otra para monitorearlos. Soy consciente de este error evidente y lo corregiré en la próxima revisión.¿Te pareció interesante este proyecto? Por favor, dale una estrella si es así.
Fue hecho en dos días como prueba de concepto para un amigo en el espacio de las criptomonedas. Si encuentras aplicaciones interesantes o lucrativas, siempre estoy feliz de colaborar. Puedes contactarme en:
@paulpierre en Twitter o hi (arroba) paulpierre (punto) com
La mayoría de mis proyectos interesantes son privados en GitHub, pero siéntete libre de echarles un vistazo: http://www.github.com/paulpierre o trabajos anteriores en http://www.paulpierre.com
Copyright (c) 2020 Paul Pierre Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.