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.