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

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

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

  • dc_id int Число центров обработки данных, содержащих файл
  • volume_id длинный объем сервера
  • local_id int Идентификатор файла
  • секрет длинная контрольная сумма для доступа к файлу

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

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

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

Это мой File Location образец.

  • id: 0//Это поле доступно только для секретных чатов
  • access_hash: 0//Это поле доступно только для секретных чатов
  • volume_id: 429640340 (199BCA94 HEX)
  • secret: -3528741004939935589 (CF0764C08833409B HEX)//согласно документам TG, это должен быть файл CheckSum
  • local_id: 6005 (1775 HEX)

И это мой соответствие fileid первому классу FileLocation, который я извлечил из своего бота:

  • FileId: AgADBAADL6gxG06L8w0nhNO87UW3iZTKmxkABJtAM4jAZAfPdRcAAgI

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

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

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

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

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

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

Ответы

Ответ 1

Здесь схема 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 бот, который я построил с использованием той же самой библиотеки lib.