Anleitung: Telegram-Terminal-Client installieren und nutzen
Für Linux gibt es für Telegram einen kompletten, gut zu nutzenden und sogar hübschen CLI-Client. Das ist nicht nur eine schöne Spielerei (das ist es!), sondern auch nützlich, da Ihr so super einfach Nachrichten, Dateien, Fotos oder Videos per Skript an Telegram senden könnt. Und eine kleine Gemeinheit für Gruppen-Chats gibt's obendrein :)
Damit Ihr wisst, worauf das Ganze hinausläuft, hier mal ein Bild des Clients im Einsatz:
1. Telegram messenger CLI installieren
Nicht ganz untypisch für CLI-Programme: Die Installation ist deutlich einfacher als später der Einstieg ;) Zunächst klont Ihr die Programmdaten von Github auf Euren Rechner und wechselt in das neue Verzeichnis "tg":
git clone --recursive https://github.com/vysheng/tg.git && cd tg
Installiert nun allerlei Abhängigkeiten. Die folgende Zeile gilt für Debian, Ubuntu, Mint und Ubuntu-Derivate. Die Befehle für andere Systeme findet Ihr auf der Homepage.
sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev libpython-dev make
Anschließend muss der geklonte Quellcode noch zu einem ausführbaren Programm verwurstet werden - daher die beiden üblichen Befehle:
./configure
make
Und damit ist die Installation abgeschlossen.
2. Telegram im Terminal nutzen
So schön das Tool auch ist, die Dokumentation lässt Laien nach der Installation komplett im Regen stehen und auch erfahrenere Nutzer müssen sich ein wenig umschauen. Wenn aber weiß wie es geht, ist die Nutzung erstaunlich einfach.
Zunächst müsst Ihr das Programm starten - ein sinnvoller, einfacher Befehl:
bin/telegram-cli -W -N -k tg-server.pub
Die Option -k tg-server.pub braucht Ihr immer, da sich in der Datei der öffentliche Schlüssel des Servers befindet, der für die Authentifizierung benötigt wird - muss Euch nicht weiter kümmern. Das W sorgt dafür, dass beim Start die Liste Eurer Chats geladen wird - ohne könnt Ihr Kontakte nur anschreiben, nachdem Ihr sie manuell importiert habt oder nachdem sie Euch geschrieben haben. Und ganz wichtig ist auch das N, da es jeder Nachricht eine laufende Nummer voranstellt - und die braucht Ihr, um zum Beispiel Bilder anzuschauen. Übrigens: Alle Nachrichten aller Kanäle, Gruppen oder Kontakte landen direkt im Terminal, Ihr müsst nicht wie beim grafischen Client einen Chat anwählen.
Um nun eine Nachricht zu schreiben, gebt Ihr einen Befehl dieser Art ein:
msg MeineGruppe Hallo Doofmann!
Nach msg könnt Ihr mittels TAB alle Kontakte einblenden lassen beziehungsweise deren erste Buchstaben eingeben und vervollständigen lassen (dank der W-Option). Tipp: Über die Pfeil-nach-oben-Taste könnt Ihr auf alte Eingaben zurückgreifen.
Das Versenden von Fotos funktioniert fast genauso:
send_photo MeineGruppe doofmann.jpg
Das dürfte soweit selbsterklärend sein - im Gegensatz zum Anzeigen eines Fotos:
view_photo 22
Der Befehlt view_photo benötigt die Nummer der Nachricht, eben jene Nummer, die Ihr über die Option -N aktiviert habt. Die Nummer sind Session-abhängig. Wenn Ihr dauerhafte Nummer wollt, könnt Ihr das über die zusätzliche Option --permanent-msg-ids erreichen. Fotos, Videos und andere Dateien werden in den Downloads-Ordner geladen und dann mit dem jeweiligen Standardprogramm lokal geöffnet.
Noch ein paar Beispiele für Befehle:
chat_info MeineGruppe
user_info Peter
quit
Alle Befehle findet Ihr wieder auf der Github-Projektseite, alle Startoptionen wie üblich über telegram-cli --help. Da Ihr nun das Grundprinzip kennt, solltet Ihr mit der Befehlsreferenz klarkommen.
3. Telegram per Skript nutzen
Um Telegram-Nachrichten per Skript zu schicken, müsst Ihr an dem Startbefehl gar nicht viel ändern. Erstmal ein Beispiel:
bin/telegram-cli -W -N -k tg-server.pub -e "send_text Peter meintext.txt"
Die neue Option e sagt: Befehle ausführen und dann beenden. Und der Befehl in den Anführungszeichen sollte Euch keine Rätsel aufgeben, es wird schlicht der Text aus der Datei "meintext.txt" als Nachricht an Peter geschickt. Wohlgemerkt der Inhalt der Datei, nicht die Datei selbst! Statt einer Textdatei könnt Ihr natürlich auch eine Variable der Art $a verwenden.
Wer es sofort probieren will und keine Angst vor schlechtem Code hat, hier ein Skript, das minütlich die aktuelle CPU-Auslastung sowie die Namen aller am Rechner angemeldeten Nutzer an Peter schickt:
while true
do
echo CPU-Auslastung: > cpuusage_data &&
mpstat 2 1 | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }' >> cpuusage_data &&
echo Benutzer: >> cpuusage_data &&
users >> cpuusage_data &&
bin/telegram-cli -W -N -k tg-server.pub -e "send_text Peter cpuusage_data" &
sleep 60
done
Das Gerüst bildet eine While-Endlos-Schleife (while true ist einfach immer wahr ...), die beiden echo-Zeilen fügen einfach Text in die (anfangs leere) Datei cpuusage_data hinzu und der telegram-cli-Befehl schickt die Nachricht an Peter, bevor 60 Sekunden geschlafen wird. Die eigentlichen Inhalte kommen von mpstat und users. Bei mpstat wird 2 Sekunden lang gemessen und 1 Bericht erstellt. Die awk-Anweisung zieht dann einfach die relevanten Daten heraus, hier die aktuelle CPU-Auslastung in Prozent.
Nun wollt Ihr sicherlich nicht minütlich über derart statischen Kram benachrichtigt werden. Aber stellt Euch vor, die Nachrichten auf interessante Vorkommnisse zu beschränken, etwa die Anwesenheit eines speziellen Nutzers oder extrem hohe CPU-Auslastung. Ihr könnt mit Telegram durchaus ein kleines Monitoring-System aufbauen.
Die kleine Gemeinheit, die wir Euch versprochen haben: In Gruppen seht Ihr im grafischen Telegram-Client, wenn Eure Nachricht gelesen/gesehen wurde - aber nicht von wem. Im Terminal seht Ihr sehr wohl, welches Gruppenmitglied den "Gesehen"-Status ausgelöst hat.
Vielleicht interessiert Euch auch unsere Anleitung zum Erstellen eigener Telegram-Bots. Oder eher der Titten-und-Katzen-Artikel?? Und wir haben noch einige mehr.
Seit einiger Zeit scheint die telegram-cli nicht mehr zu funzen. Es kommen zwar noch Meldungen wie „UserXY online“ und man kann auch noch msg versenden, aber es kommt nichts mehr an, was man zu dem in der cli angemeldeten Benutzer sendet. Ist das nur bei mir so? Wo kann der Fehler liegen? Habe schon versucht nochmal von vorne anzufangen, also alles nochmal neu zu kompilieren, aber ohne Erfolg. Auch der Fork (https://github.com/kenorb-contrib/tg) geht nicht besser.
Klingt an sich interessant. Würde mich interessieren ob es so etwas als docker gibt. Ziel wäre das mit starten von docker ein Script ausgeführt wird, welches in gewissen (definierbaren) Zeitabständen, einen zufälligen Satz (eine von mehreren Zeilen einer Textdatei) in eine definierte Gruppe sendet.
Bekommt das jemand hin?
Habe noch ein Problem auf dem Raspberry Pi entdeckt: Nach dem Start des kompilierten Programmes brach dieses mit einer Fehlermeldung ab. Bei Nachforschungen fand ich heraus, dass in der Datei tgl/mtproto-utils.c die Zeilen 101 und 115 auszukommentieren sind, da der Raspberry Pi wohl nur 8 Byte lange Long-Variablen hat. Nach anschließender Kompilation funktionierte das Programm wie gewünscht auch auf dem Raspberry Pi.
Oha, schön, wenn alles so einfach ist … Der Raspi ist aber auch manchmal ein Biest ;) Danke für die Ergänzungen!
Hallo, habe die Fehlermeldungen: tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_new’: tgl/crypto/rsa_pem_openssl.c:41:6: error: dereferencing pointer to incomplete type ‘RSA {aka struct rsa_st}’ ret->e = unwrap_bn (TGLC_bn_new ()); ^~ tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_n’: tgl/crypto/rsa_pem_openssl.c:52:1: error: control reaches end of non-void function [-Werror=return-type] RSA_GETTER(n); ^~~~~~~~~~ tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_e’: tgl/crypto/rsa_pem_openssl.c:53:1: error: control reaches end of non-void function [-Werror=return-type] RSA_GETTER(e); ^~~~~~~~~~ cc1: all warnings being treated as errors Makefile.tgl:20: recipe for target ‚objs/crypto/rsa_pem_openssl.o‘ failed make: *** [objs/crypto/rsa_pem_openssl.o] Error 1
Das Tool wird seit 5 Jahren nicht mehr weiterentwickelt – vermutlich lässt es auf aktuellen Systemen schlicht nicht mehr kompilieren. Einen aktuelleren Fork findest Du unter https://github.com/kenorb-contrib/tg
Die Dokumentation ist allerdings wieder einmal ziemlich schlecht …
Ich hatte bei der Installation unter Ubuntu 18.04 folgendes Fehlerbild nach „make“: tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_new’: tgl/crypto/rsa_pem_openssl.c:41:6: error: dereferencing pointer to incomplete type ‘RSA {aka struct rsa_st}’ ret->e = unwrap_bn (TGLC_bn_new ()); ^~ tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_n’: tgl/crypto/rsa_pem_openssl.c:52:1: error: control reaches end of non-void function [-Werror=return-type] RSA_GETTER(n); ^~~~~~~~~~ tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_e’: tgl/crypto/rsa_pem_openssl.c:53:1: error: control reaches end of non-void function [-Werror=return-type] RSA_GETTER(e); ^~~~~~~~~~ cc1: all warnings being treated as errors Makefile.tgl:20: recipe for target ‚objs/crypto/rsa_pem_openssl.o‘ failed make: *** [objs/crypto/rsa_pem_openssl.o] Error 1
Einen Hinweis dazu fand ich unter: https://matoken.org/blog/2018/09/19/try-telegram-cli-of-informal-cli-client-of-telegram/
Es sollte noch zusätzlich die libssl installiert werden: sudo apt install libssl1.0-dev
Nach dieser Aktion lies sich Telegram-cli fehlerfrei installieren.