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

511
Fabian Röling

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

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

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

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

0
Разве вы не можете напрямую использовать libmtproto для написания серверной части хранилища? Martin Ueding 6 лет назад 0
Я не знаю, так как я не знаю эту программу. Кроме того, мне нужно было бы узнать подробности о том, как отправлять пакеты на серверы Telegram. В какой-то момент у меня просто есть собственный клиент. Если вы знаете, как сделать минималистичную программу для того или иного замысла, это было бы здорово. Fabian Röling 6 лет назад 0
Я не знаю деталей, но кажется, что [TDlib] (https://core.telegram.org/tdlib) - это то, что вы хотите. Martin Ueding 6 лет назад 0
Кажется, что есть клиент командной строки для Telegram, и он может отправлять файлы, даже если его нет в документации: https://github.com/vysheng/tg/issues/458 Я попробую это сегодня вечером, и если работает, напиши ответ. Fabian Röling 6 лет назад 0

1 ответ на вопрос

0
Fabian Röling

Я нашел решение! Официальный клиент, вероятно, не разрешает этого, но для 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".

Похожие вопросы