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

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

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

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

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

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

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

Это мое File Location Образец адреса.

  • Я бы: 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 ценности. Я ценю любые усилия, которые помогают расшифровать эти значения.

1 ответ

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

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

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

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