Как программно загрузить файлы в 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. Конечно, у него есть функция импорта / экспорта файлов базы данных.