
Un bot de surveillance de masse Telegram en Python

Informer (TGInformer) est une bibliothèque de bots qui vous permet de vous faire passer pour de multiples utilisateurs RÉELS sur Telegram et d'espionner plus de 500 canaux Telegram par compte. Les détails sont enregistrés dans une base de données MySQL, un Google Sheet privé et votre propre canal privé pour analyse.
Il s'agit d'un projet fonctionnel de preuve de concept avec des bugs connus. N'hésitez pas à forker, partager et me contacter.



Prend en charge les expressions régulières pour le filtrage par mots-clés
SQLAlchemy pour une persistance de données agnostique

Journalisation des messages contextuels et des données de canal vers un canal privé et une base de données
Stocke les méta-informations sur l'expéditeur du message, le canal, le nombre de participants dans le canal


Conserve la session des canaux rejoints
Connexion unique, le bot reste connecté indéfiniment sans nécessiter de ré-authentification 2FA
Rejoindre jusqu'à 500 canaux par compte

Modifiez le fichier informer.env qui contient toutes les variables d'environnement requises pour informer
Vous pouvez récupérer les informations nécessaires liées à Telegram ici :
https://my.telegram.org/auth pour authentifier votre compte en fournissant un numéro de téléphone et le code de confirmation envoyé à votre numéro de téléphone (ou Telegram)


Une fois authentifié, cliquez sur "API Development Tools"

Créez une nouvelle application en remplissant le formulaire ci-dessous

Vous devriez maintenant avoir les valeurs de paramètres nécessaires pour les champs du fichier informer.env : TELEGRAM_API_HASH et TELEGRAM_API_APP_ID

TELEGRAM_ACCOUNT_PHONE_NUMBER, et passez à la section suivante
Jusqu'à présent, nous avons ce dont nous avons besoin pour que Telethon et Informer accèdent aux API Telegram. Ensuite, nous devons obtenir les identifiants pour le compte de votre bot.
userinfobot.


Vous devriez recevoir votre nom d'utilisateur Telegram et votre ID de compte Telegram. C'est important

informer.env et remplissez les valeurs pour TELEGRAM_ACCOUNT_ID qui doit être votre ID de compte Telegram de l'étape précédente et TELEGRAM_ACCOUNT_USER_NAME.Vous pouvez éventuellement remplir TELEGRAM_NOTIFICATIONS_CHANNEL_ID avec votre nom d'utilisateur ou un ID de canal.
TELEGRAM_ACCOUNT_PHONE_NUMBER car c'est la clé pour générer la session. Pour créer plusieurs comptes, veuillez consulter l'application Burner ci-dessous.Assurez-vous d'exécuter python 3 et exécutez simplement ./quick_start.sh dans le répertoire.
Vous devez d'abord exécuter ceci pour vous authentifier auprès de Telegram lors de la première exécution et générer un fichier de session local
Vous pouvez ensuite copier les fichiers pour les différents comptes dans app/session et les monter via Docker si vous le souhaitez.

Il vous sera demandé de saisir le code d'authentification que vous avez reçu soit via Telegram si vous vous êtes déjà connecté, soit par SMS

Appuyez sur Entrée et votre session devrait être générée dans le dossier app/session avec le nom de fichier correspondant au numéro de téléphone international que vous avez fourni, avec une extension .session.
Passez à la section suivante où nous utilisons Docker Compose pour configurer une base de données.
Cette étape est facultative, mais si vous souhaitez créer un canal de groupe privé et obtenir l'ID du groupe, procédez comme suit :

Définissez l'URL dans le fichier informer.env sous le paramètre TELEGRAM_NOTIFICATIONS_CHANNEL_URL
Pour obtenir l'ID du canal, exécutez simplement python3 bot.py <TELEGRAM_ACCOUNT_ID> dans le répertoire app où <TELEGRAM_ACCOUNT_ID> est l'ID de compte que vous avez précédemment généré.
Lorsque le script se charge, il affichera tous les canaux dont vous faites partie. Copiez simplement cette valeur et placez-la dans le paramètre TELEGRAM_NOTIFICATIONS_CHANNEL_ID du fichier informer.env et tuez le script. Vous êtes maintenant prêt à exécuter Informer.
Après avoir exécuté quick_start.sh, vous pouvez exécuter docker compose en :
./start.sh pour construire les conteneurs Docker qui incluent la base de données MySQL
Exécutez ./stop.sh pour arrêter les conteneurs
Exécutez ./clean.sh pour supprimer les conteneurs et volumes orphelins. ** REMARQUE ** cela RÉINITIALISERA la base de données et vous perdrez toutes vos données.
Quelques points à noter :
Auparavant, vous deviez exécuter votre propre instance MySQL, ce qui créait des problèmes de compatibilité de chaîne de connexion et de version. Dans cette mise à jour, elle est simplement créée pour vous et persistée sur le disque.
De plus, Dozzle est fourni pour vous permettre de visualiser les logs dans votre navigateur. Allez simplement sur http://localhost:9999 et cliquez sur le conteneur app_informer.
Si vous ne souhaitez pas utiliser votre propre numéro de téléphone et souhaitez exécuter le bot Informer avec un certain degré d'anonymat, vous pouvez utiliser l'application Burner disponible sur iOS et Android.
Installez l'application Burner

Suivez les mêmes étapes que ci-dessus en fournissant le nouveau numéro de téléphone ici : https://my.telegram.org/auth
Validez avec Burner. Vous recevrez un code d'authentification par SMS, vous devrez le fournir

Connectez-vous à Telegram
Essayez de vous connecter avec l'application en exécutant
python3 bot.py <api_user_id> dans le répertoire app.
Celui-ci a été envoyé via un message Telegram ou SMS.
Fournissez-le et il enregistrera vos identifiants de session dans le fichier de session mentionné ci-dessous. Vous n'aurez plus besoin de vous authentifier tant que vous avez le fichier de session sauvegardé.
Les sessions sont sauvegardées dans le dossier app/session/ sous la forme <telegram_phone_number>.session
Répétez l'opération jusqu'à ce que vous ayez tous les fichiers de session nécessaires et montez-les simplement dans Docker.
Comprendre comment mettre à l'échelle les comptes a été un peu un cauchemar car j'avais besoin d'un processus automatisé. Telegram exige que vous utilisiez un vrai numéro de téléphone pouvant recevoir des SMS d'un code court.
Malheureusement, les services avec API comme Twilio ont interdiction de recevoir des SMS de codes courts aux États-Unis, au Canada et au Royaume-Uni https://support.twilio.com/hc/en-us/articles/223181668-Can-Twilio-numbers-receive-SMS-from-a-short-code- pour des raisons de fraude. Cela aurait été idéal, zut.
Une soirée entière a été gâchée sur cette entreprise jusqu'à ce que je me souvienne d'une excellente application que j'avais utilisée dans le passé : Burner (https://www.burnerapp.com/) — qui, par coïncidence, possède une API (https://developer.burnerapp.com/api-documentation/incoming-webhooks/). Cela signifie que vous pouvez générer dynamiquement des numéros, instancier un nouveau compte et l'authentifier entièrement via le SDK client Telegram en Python (Telethon : https://docs.telethon.dev/en/latest/)
Le meilleur aspect est que les numéros Burner sont gratuits pendant 14 jours. Les comptes Telegram connectés via l'API client n'ont besoin de se connecter qu'une seule fois et les sessions persistent indéfiniment. Je n'ai pas intégré l'API Burner, mais le processus est simple.
Le bot est construit sur le SDK Python Telethon (https://docs.telethon.dev/en/latest/)
Quelques points à noter et pièges rencontrés lors de la construction de cette preuve de concept :
Les FloodWaitErrors peuvent survenir lorsque vous soumettez trop de requêtes à l'API, que ce soit pour interroger les informations des utilisateurs ou rejoindre trop de canaux trop rapidement.
TelegramClient(<session_file_name>, <api_user_id>, <api_user_hash>)
Ce fichier se trouve être une base de données sqlite à laquelle vous pouvez vous connecter. Il
agit comme un cache et stocke les données historiques ainsi que vos informations d'authentification
de session afin que vous n'ayez pas à vous ré-authentifier avec
la 2FA de Telegram. Notez que vous devrez vous connecter une première fois et
vous authentifier lors de la première utilisation de l'API.
Lorsque le bot s'exécute et rejoint des canaux, vous verrez votre client se mettre à jour en temps réel et afficher les nouveaux canaux que vous avez rejoints.

ASTUCE : TelegramX est de loin le meilleur client à utiliser à ces fins car il prend en charge la connexion multiple. Téléchargez ici :
Remarque : L'intégration Google Sheets est complètement OPTIONNELLE. L'application fonctionne parfaitement avec seulement la base de données MySQL.
Si vous souhaitez activer la journalisation Google Sheets :
app/credentials/README.mdAperçu rapide :
app/credentials/google_credentials.jsonCeci est facultatif et le bot fonctionnera sans.
bot.py deux fois, une fois pour le laisser rejoindre les canaux et une autre fois pour les surveiller. Je suis conscient de ce bug flagrant et le corrigerai dans la prochaine révision.Avez-vous trouvé ce projet intéressant ? Si oui, merci de lui mettre une étoile.
Il a été réalisé en deux jours comme preuve de concept pour un ami dans le domaine des cryptomonnaies. Si vous trouvez des applications intéressantes ou lucratives, je suis toujours heureux de collaborer. Vous pouvez me joindre à :
@paulpierre sur Twitter ou hi (at) paulpierre (dot) com
La plupart de mes projets intéressants sont privés sur github, mais n'hésitez pas à les consulter : http://www.github.com/paulpierre ou mes travaux passés sur 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.