Как программно загрузить файлы в Telegram?

Так как Telegram - это бесконечный облачный сервис, я использую его в качестве дополнительного резервного хранилища. Я хотел бы автоматизировать это, чтобы мне не нужно было делать это каждый месяц (в последние два года я пропускал каждую секунду ежемесячного резервного копирования).
Но я не могу найти способ автоматизировать любой клиент Telegram без макросов кликов (я бы хотел, чтобы он работал в фоновом режиме):

  • ./Telegram --help ничего не делает, кроме открытия программы.
  • Мне не удалось определить, где argv переменная идет от метода main, поэтому я не знаю, есть ли даже консольные аргументы.
  • Боты не могут получить доступ к моей файловой системе (и это хорошо).

Я могу легко автоматизировать упаковку нужных мне файлов в 1,5 ГБ архивы, используя 7z, но я понятия не имею, как на самом деле отправить их. Есть ли способ сделать это без макросов click?

Я нахожусь на Debian 9.5 и использую официальный клиент Linux от telegram.org.

2 ответа

Решение

Я нашел решение! Официальный клиент, вероятно, не допускает этого (все известные аргументы командной строки здесь неофициально задокументированы), но для Linux и Mac (и, возможно, также для подсистемы Linux в Windows) существует неофициальный интерфейс командной строки для Telegram, который называется "tg": https://github.com/vysheng/tg
Он не упоминает в своем описании, что он также может отправлять файлы, но в выпуске Github кто-то написал, что есть send_file функция. В общем, это не слишком хорошо задокументировано, но вызывая его --help и входя help внутри программы выдает много информации, остальное можно выяснить, поигравшись с параметрами и попробовав разные вещи.
Вот решение, которое я придумал таким образом:

подготовка

  • Установите tg, как сказано в файле readme. Это не сработало для меня в Debian из-за ошибки, но, как сказано в комментарии к сообщению об ошибке , установка libssl1.0-dev это обходной путь для этой ошибки: Выполнить sudo apt install libssl1.0-dev между ./configure а также make ,
  • Войдите в свою учетную запись Telegram: bin/telegram-cli чтобы запустить интерактивную программу, введите номер телефона, введите код входа. Я ввел свой номер телефона, начиная с +49 и это сработало, может быть, это требуется, я не знаю.
  • Теперь используйте другой клиент Telegram, чтобы отправить сообщение в целевой чат (или, альтернативно, получить сообщение там). Это добавляет имя чата во внутренний список чатов программы. Если существует несколько чатов с одним и тем же именем, кажется, что выбран последний добавленный. Я не нашел способа отправить сообщение в чат по идентификатору.
    Вот и все для настройки, quit выход из программы.

Загрузка файлов программно

Теперь файлы могут быть загружены, давая send_file команда к программе с --execute , который заставляет его выполнить эту команду и затем автоматически завершить работу:

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

<chat> это имя чата.
<filename> путь к файлу
/path/to/tg должно быть очевидно.

Пример использования

Я буду использовать что-то вроде этого, чтобы загрузить резервную копию своей папки Google Drive в Telegram после того, как я создаю ее с помощью p7zip:

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

Это загружает все файлы, имена которых начинаются с " drive.zip. "(.001, .002 и т. Д.) В папке ~/drive_backup в чат Telegram "Backup_chat".

Вы можете загружать зашифрованные резервные копии в облако Telegram с помощью PGPgram. Оно использует gpgдля шифрования и позволяет загружать файлы любого размера, не разделяя их вручную; начиная с версии 0.2 он даже позволяет создавать резервные копии видео и каналов YouTube. Конечно, у него есть функция импорта / экспорта файлов базы данных.

Пытаться

telegram-desktop -sendpath <fullpath>

Другие вопросы по тегам