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.