
Ein Telegramm-Massenüberwachungs-Bot in Python

Informer (TGInformer) ist eine Bot-Bibliothek, die es Ihnen ermöglicht, sich als mehrere ECHTE Benutzer auf Telegram auszugeben und 500+ Telegram-Kanäle pro Konto zu überwachen. Details werden in einer MySQL-Datenbank, einem privaten Google Sheet und Ihrem eigenen privaten Kanal zur Analyse protokolliert.
Dies ist ein funktionierendes Proof-of-Concept-Projekt mit bekannten Fehlern. Fühlen Sie sich frei, es zu forken, zu teilen und mir eine Nachricht zu schreiben.



Unterstützt reguläre Ausdrücke zur Schlüsselwortfilterung
SQLAlchemy für anbieterunabhängige Datenpersistenz

Protokollierung von kontextuellen Nachrichten- und Kanaldaten in einem privaten Kanal und einer Datenbank
Speichert Metainformationen über den Nachrichtenabsender, den Kanal, die Anzahl der Teilnehmer im Kanal


Beibehaltung der Sitzung beigetretener Kanäle
Einmal anmelden, Bot bleibt für immer eingeloggt, ohne erneute 2FA-Authentifizierung
Bis zu 500 Kanäle pro Konto beitreten

Bearbeiten Sie die Datei informer.env, die alle erforderlichen Umgebungsvariablen für Informer enthält.
Die notwendigen Telegram-bezogenen Informationen erhalten Sie hier:
https://my.telegram.org/auth, um Ihr Konto zu authentifizieren, indem Sie eine Telefonnummer und den Bestätigungscode angeben, der an Ihre Telefonnummer (oder Telegram) gesendet wird.


Klicken Sie nach der Authentifizierung auf „API Development Tools“.

Erstellen Sie eine neue Anwendung, indem Sie das unten gezeigte Formular ausfüllen.

Sie sollten nun die erforderlichen Parameterwerte für die Felder TELEGRAM_API_HASH und TELEGRAM_API_APP_ID in der informer.env-Datei haben.

TELEGRAM_ACCOUNT_PHONE_NUMBER, und fahren Sie mit dem nächsten Abschnitt fort.
Bisher haben wir, was Telethon und Informer benötigen, um auf die Telegram-APIs zuzugreifen. Als nächstes müssen wir die Kennungen für das Konto Ihres Bots ermitteln.
userinfobot.


Sie sollten Ihren Telegram-Benutzernamen und Ihre Telegram-Konto-ID erhalten. Dies ist wichtig.

informer.env und füllen Sie die Werte für TELEGRAM_ACCOUNT_ID (Ihre Telegram-Konto-ID aus dem vorherigen Schritt) und TELEGRAM_ACCOUNT_USER_NAME aus.Optional können Sie TELEGRAM_NOTIFICATIONS_CHANNEL_ID mit Ihrem Benutzernamen oder einer Kanal-ID füllen.
TELEGRAM_ACCOUNT_PHONE_NUMBER ausgefüllt ist, da dies für die Generierung der Sitzung entscheidend ist. Informationen zum Erstellen mehrerer Konten finden Sie unten in der Burner App.Stellen Sie sicher, dass Sie Python 3 ausführen, und führen Sie einfach ./quick_start.sh im Verzeichnis aus.
Sie müssen dies zuerst ausführen, um sich beim ersten Start bei Telegram zu authentifizieren und eine lokale Sitzungsdatei zu generieren.
Sie können später die Dateien für die verschiedenen Konten in app/session kopieren und über Docker bereitstellen, falls gewünscht.

Sie werden aufgefordert, den Authentifizierungscode einzugeben, den Sie entweder über Telegram (falls Sie sich zuvor angemeldet haben) oder per SMS erhalten haben.

Drücken Sie die Eingabetaste, und Ihre Sitzung sollte im Ordner app/session mit dem Dateinamen der von Ihnen angegebenen internationalen Telefonnummer und der Erweiterung .session generiert werden.
Fahren Sie mit dem nächsten Abschnitt fort, in dem wir mit Docker Compose eine Datenbank einrichten.
Dieser Schritt ist optional. Wenn Sie jedoch einen privaten Gruppenkanal erstellen und dessen Gruppen-ID erhalten möchten, gehen Sie wie folgt vor:

Setzen Sie die URL in der Datei informer.env unter dem Parameter TELEGRAM_NOTIFICATIONS_CHANNEL_URL.
Um die Kanal-ID zu erhalten, führen Sie einfach python3 bot.py <TELEGRAM_ACCOUNT_ID> im Verzeichnis app aus, wobei <TELEGRAM_ACCOUNT_ID> die zuvor generierte Konto-ID ist.
Wenn das Skript lädt, werden alle Kanäle angezeigt, in denen Sie sich befinden. Kopieren Sie diesen Wert und fügen Sie ihn in den Parameter TELEGRAM_NOTIFICATIONS_CHANNEL_ID der Datei informer.env ein. Beenden Sie dann das Skript. Sie sind jetzt bereit, Informer auszuführen.
Nachdem Sie quick_start.sh ausgeführt haben, können Sie Docker Compose wie folgt ausführen:
./start.sh aus, um die Docker-Container zu erstellen, die die MySQL-Datenbank enthalten.
Führen Sie ./stop.sh aus, um die Container zu stoppen.
Führen Sie ./clean.sh aus, um alle verwaisten Container und Volumes zu entfernen. HINWEIS: Dies setzt die Datenbank ZURÜCK und alle Daten gehen verloren.
Einige Dinge zu beachten:
Früher mussten Sie Ihre eigene MySQL-Instanz ausführen, was zu Problemen mit der Verbindungszeichenfolgen-Kompatibilität und Versionierung führte. In diesem Update wird sie einfach für Sie erstellt und auf der Festplatte gespeichert.
Außerdem wird Dozzle bereitgestellt, damit Sie Protokolle in Ihrem Browser anzeigen können. Gehen Sie einfach zu http://localhost:9999 und klicken Sie auf den Container app_informer.
Wenn Sie Ihre eigene Telefonnummer nicht verwenden möchten und den Informer-Bot mit einem gewissen Maß an Anonymität betreiben möchten, können Sie die Burner App (verfügbar für iOS und Android) verwenden.
Installieren Sie die Burner App

Befolgen Sie die gleichen Schritte wie oben, indem Sie die neue Telefonnummer hier angeben: https://my.telegram.org/auth
Verifizieren Sie mit Burner. Sie erhalten einen Authentifizierungscode per SMS, den Sie angeben müssen.

Melden Sie sich bei Telegram an.
Versuchen Sie, sich mit der App anzumelden, indem Sie
python3 bot.py <api_user_id> im Verzeichnis app ausführen.
Dieser wurde per Telegram-Nachricht oder SMS gesendet.
Geben Sie diesen ein, und Ihre Sitzungsanmeldeinformationen werden in der unten erwähnten Sitzungsdatei gespeichert. Sie müssen sich nicht erneut authentifizieren, solange Sie die Sitzungsdatei gespeichert haben.
Sitzungen werden im Ordner app/session/ als <telefonnummer>.session gespeichert.
Wiederholen Sie den Vorgang, bis Sie alle erforderlichen Sitzungsdateien haben, und binden Sie diese einfach in Docker ein.
Die Skalierung von Konten zu bewerkstelligen, war ein kleiner Albtraum, da ich einen automatisierten Prozess benötigte. Telegram verlangt die Verwendung einer echten Telefonnummer, die SMS von einer Kurzwahl empfangen kann.
Leider sind Dienste mit APIs wie Twilio aus Betrugsgründen daran gehindert, SMS von Kurzwahlen in den USA, Kanada und Großbritannien zu empfangen: https://support.twilio.com/hc/en-us/articles/223181668-Can-Twilio-numbers-receive-SMS-from-a-short-code- . Das wäre ideal gewesen – schade.
Ein ganzer Abend wurde mit diesem Vorhaben verschwendet, bis ich mich an eine großartige App erinnerte, die ich früher benutzt hatte: Burner (https://www.burnerapp.com/) – die zufälligerweise auch eine API hat (https://developer.burnerapp.com/api-documentation/incoming-webhooks/). Das bedeutet, dass Sie dynamisch Nummern generieren, ein neues Konto erstellen und alles über das Telegram-Client-SDK in Python (Telethon: https://docs.telethon.dev/en/latest/) authentifizieren können.
Das Beste daran ist, dass Burner-Nummern 14 Tage lang kostenlos sind. Telegram-Konten, die über die Client-API verbunden sind, müssen sich nur einmal anmelden und Sitzungen dauerhaft speichern. Ich habe keine Integration mit der Burner-API vorgenommen, aber der Prozess ist unkompliziert.
Der Bot basiert auf dem Telethon Python SDK (https://docs.telethon.dev/en/latest/).
Einige Dinge, die bei der Erstellung dieses Proof-of-Concept aufgefallen sind und Fallstricke:
FloodWaitErrors können auftreten, wenn Sie zu viele Anfragen an die API senden, sei es das Abfragen von Benutzerinformationen oder das Beitreten zu vielen Kanälen zu schnell.
TelegramClient(<sitzungsdateiname>, <api_user_id>, <api_user_hash>)
Diese Datei ist eine SQLite-Datenbank, mit der Sie eine Verbindung herstellen können. Sie fungiert als Cache und speichert historische Daten sowie Ihre Sitzungsauthentifizierungsinformationen, sodass Sie sich nicht erneut bei der 2FA von Telegram authentifizieren müssen. Beachten Sie, dass Sie sich beim ersten Gebrauch der API einmal anmelden und authentifizieren müssen.
Während der Bot läuft und Kanälen beitritt, sehen Sie, wie sich Ihr Client in Echtzeit aktualisiert und die neuen Kanäle anzeigt, denen Sie beigetreten sind.

TIPP: TelegramX ist bei weitem der bessere Client für diese Zwecke, da er mehrere Anmeldungen unterstützt. Hier herunterladen:
Hinweis: Die Google Sheets-Integration ist vollständig OPTIONAL. Die Anwendung funktioniert auch ohne sie einwandfrei mit der MySQL-Datenbank.
Wenn Sie die Google Sheets-Protokollierung aktivieren möchten:
app/credentials/README.mdKurzer Überblick:
app/credentials/google_credentials.jsonDies ist optional, und der Bot funktioniert auch ohne.
bot.py zweimal ausführen müssen: einmal, um Kanälen beizutreten, und ein weiteres Mal, um sie zu überwachen. Mir ist dieser offensichtliche Fehler bekannt und ich werde ihn in der nächsten Version beheben.Fanden Sie dieses Projekt interessant? Bitte geben Sie ihm einen Stern, wenn ja.
Es wurde in zwei Tagen als Proof-of-Concept für einen Freund im Kryptowährungsbereich erstellt. Wenn Sie interessante oder lukrative Anwendungen finden, bin ich immer offen für eine Zusammenarbeit. Sie erreichen mich unter:
@paulpierre auf Twitter oder hi (at) paulpierre (dot) com
Die meisten meiner interessanten Projekte sind privat auf GitHub, aber schauen Sie sich gerne meine öffentlichen an: http://www.github.com/paulpierre oder frühere Arbeiten unter http://www.paulpierre.com
Copyright (c) 2020 Paul Pierre Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, die Software ohne Einschränkung zu nutzen, einschließlich und ohne Einschränkung der Rechte zur Verwendung, Vervielfältigung, Änderung, Zusammenführung, Veröffentlichung, Verteilung, Unterlizenzierung und/oder zum Verkauf von Kopien der Software, und Personen, denen die Software zur Verfügung gestellt wird, dies unter den folgenden Bedingungen zu gestatten: Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein. DIE SOFTWARE WIRD OHNE MÄNGELGEWÄHR UND OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG BEREITGESTELLT, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG VON RECHTEN DRITTER. IN KEINEM FALL SIND DIE AUTOREN ODER URHEBERRECHTSINHABER HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE VERPFLICHTUNGEN, OB AUS VERTRAG, UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE SICH AUS ODER IM ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN GESCHÄFTEN MIT DER SOFTWARE ERGEBEN.