Wie kann ich programmgesteuert Dateien zu Telegramm hochladen?

553
Fabian Röling

Da Telegram ein unendlicher Cloud-Service ist, verwende ich ihn als sekundären Sicherungsspeicherort. Ich möchte dies automatisieren, damit ich mich nicht jeden Monat daran erinnern muss (in den letzten zwei Jahren habe ich etwa jede zweite monatliche Sicherung verpasst).
Ich kann jedoch keinen Weg finden, einen Telegramm-Client ohne Klick-Makros zu automatisieren (ich möchte, dass er im Hintergrund im Hintergrund ausgeführt wird):

  • ./Telegram --help macht nichts außer das Programm zu öffnen.
  • Ich konnte nicht feststellen, wo die argvVariable von der Hauptmethode abhängt, daher weiß ich nicht, ob es überhaupt Konsolenargumente gibt.
  • Bots können nicht auf mein Dateisystem zugreifen (und das ist auch gut so).

Ich kann das automatische Packen der gewünschten Dateien in 1,5-GB-Archive mit 7z automatisieren, aber ich habe keine Ahnung, wie sie tatsächlich gesendet werden sollen. Gibt es eine Möglichkeit, dies ohne Klickmakros zu tun?

Ich bin unter Debian 9.5 und nutze den offiziellen Linux-Client von Telegram.org.

0
Können Sie nicht direkt mit libmtproto ein Speicher-Backend schreiben? Martin Ueding vor 5 Jahren 0
Ich weiß es nicht, da ich dieses Programm nicht kenne. Außerdem müsste ich wissen, wie Pakete an die Telegrammserver gesendet werden. Irgendwann habe ich nur einen benutzerdefinierten Kunden. Wenn Sie wissen, wie Sie ein minimalistisches Programm dafür erstellen oder was auch immer Ihre Idee war, wäre das großartig. Fabian Röling vor 5 Jahren 0
Ich kenne die Details nicht, aber anscheinend ist [TDlib] (https://core.telegram.org/tdlib) genau das, was Sie wollen. Martin Ueding vor 5 Jahren 0
Es scheint, als gäbe es einen Befehlszeilen-Client für Telegram und er kann Dateien senden, auch wenn er nicht in der Dokumentation enthalten ist: https://github.com/vysheng/tg/issues/458 Ich versuche das heute Abend und wenn ja funktioniert, schreibe eine Antwort. Fabian Röling vor 5 Jahren 0

1 Antwort auf die Frage

0
Fabian Röling

Ich habe eine Lösung gefunden! Der offizielle Client erlaubt es wahrscheinlich nicht, aber für Linux und Mac (und wahrscheinlich auch für Linux-Subsysteme unter Windows) gibt es eine inoffizielle Befehlszeilenschnittstelle für Telegram mit dem Namen "tg": https://github.com/vysheng/tg
Es erwähnt nicht in seiner Beschreibung, dass es auch Dateien senden kann, aber in einer Github-Ausgabe hat jemand geschrieben, dass es die send_fileFunktion gibt. Im Allgemeinen ist es nicht so gut dokumentiert, aber das Aufrufen mit --helpund das Eingeben helpin das Programm gibt viele Informationen. Der Rest kann durch Fummeln mit den Parametern und Ausprobieren verschiedener Dinge herausgefunden werden.
Dies ist die Lösung, auf die ich so gekommen bin:

Vorbereitung

  • Installieren Sie tg wie in der Readme-Datei angegeben. Bei Debian hat es wegen eines Fehlers nicht sofort funktioniert, aber wie in diesem Bugreedekommentar erwähnt, ist die Installation libssl1.0-deveine Problemumgehung für diesen Fehler: Ausführen sudo apt install libssl1.0-devzwischen ./configureund make.
  • Melden Sie sich mit Ihrem Telegramm-Konto an: bin/telegram-cliUm das interaktive Programm zu starten, geben Sie die Telefonnummer ein und geben Sie den Anmeldecode ein. Ich habe meine Telefonnummer eingegeben +49und das hat funktioniert, vielleicht ist es erforderlich, ich weiß es nicht.
  • Verwenden Sie nun einen anderen Telegramm-Client, um eine Nachricht im Ziel-Chat zu senden (oder alternativ eine Nachricht dort zu empfangen). Dadurch wird der Chat-Name der internen Chat-Liste des Programms hinzugefügt. Wenn mehrere Chats mit demselben Namen vorhanden sind, wird anscheinend der zuletzt hinzugefügte Chat ausgewählt. Ich habe keinen Weg gefunden, einen Chat per ID mitzuteilen.
    Das wars für das Setup, beendet quitdas Programm.

Dateien programmgesteuert hochladen

Jetzt können Dateien hochgeladen werden, indem Sie send_filedem Programm einen Befehl mit geben --execute, der diesen Befehl ausführt und dann automatisch beendet:

/path/to/tg/bin/telegram-cli --exec 'send_file <chat> <filename>' 

<chat>ist der Name des Chats.
<filename>ist der Pfad zur Datei.
/path/to/tgsollte offensichtlich sein.

Verwendungsbeispiel

Ich verwende so etwas, um ein Backup meines Google Drive-Ordners in ein Telegramm hochzuladen, nachdem ich es mit p7zip erstellt habe:

for filename in ~/drive_backup/drive.zip.*; do ~/tg/bin/telegram-cli --exec 'send_file Backup_chat '"$filename"; done 

Dadurch werden alle Dateien, deren Namen mit " drive.zip." (.001, .002 usw.) beginnen, in ~/drive_backupden Telegrammchat "Backup_chat" hochgeladen.