Telegram: получить файл из телеграммы клиента

Боты Telegram используют fileid для загрузки файла. Как я могу получить этот fileid из клиента Telegram (Моя неофициальная версия)? Файлы в mtproto имеют этот класс местоположения, который указывает их адрес.

Параметры местоположения файла

  • Dc_id int Число центров обработки данных, содержащих файл
  • Volume_id long Объем сервера
  • Local_id int Идентификатор файла
  • Секретная длинная контрольная сумма для доступа к файлу

Проблема в том, что я не знаю, как сгенерировать fileid , подходящий для ботов из класса File Location .

ОБНОВЛЕНИЕ 1:

Я попытался сделать некоторые обратные разработки. Итак, я обнаружил, что существует некоторая связь между классом File Location и FileId .

Это адрес моего File Location .

  • Id: 0 // Это поле доступно только для секретных чатов
  • Access_hash: 0 // Это поле доступно только для секретных чатов
  • Volume_id: 429640340 ( 199BCA94 HEX )
  • Секрет: -3528741004939935589 ( CF0764C08833409B HEX ) // согласно документам TG это должен быть файл CheckSum
  • Local_id: 6005 ( 1775 HEX )

И это мой соответствующий FileID для прежнего класса FileLocation который я получил из моего бота:

  • FileId: AgADBAADL6gxG06L8w0nhNO87UW3iZTKmxkABJtAM4jAZAfPdRcAAgI

Очевидно, что значение FileID находится в формате Base64 . Поэтому я расшифровал его:

  • Значение HEX: 0200030400032FA8311B4E8BF30D2784D3BCED45B78994CA9B1900049B403388C06407CF7517000202

Теперь мы можем увидеть значения FileLocation в этом шестнадцатеричном значении:

  • Неизвестно: 0200030400032FA8311B4E8BF30D2784D3BCED45B789
  • VolumeId: 94CA9B19 HEX
  • Неизвестно: 0004
  • Секрет: 9B403388C06407CF HEX
  • Local_id: 7517 Hex
  • Неизвестно: 000202

ПРИМЕЧАНИЕ: значения хранятся в формате Big-Endian .

Теперь нам нужно декодировать Unknown значения. Я ценю любые усилия, которые помогают декодировать эти значения.

Solutions Collecting From Web of "Telegram: получить файл из телеграммы клиента"

Вот схема TL для идентификаторов файлов bot API: https://github.com/danog/MadelineProto/blob/master/src/danog/MadelineProto/TL_botAPI.tl

Я реализовал преобразование идентификатора файла bot API в MadelineProto: вы в основном должны base64decode идентификаторы файлов, передавать их через RLE-декодер на основе нулевого байта, а затем декодировать их с использованием данной схемы TL. См. TL / Conversion / BotAPI *, чтобы увидеть, как объекты MessageMedia преобразуются в объекты File перед сериализацией.

Мне удалось обработать идентификаторы файлов (я забыл искать здесь xd), используя этот специальный бот MTProto, который я построил с использованием той же самой библиотеки .