Telegram 机器人使用 fileid
下载文件。如何从 Telegram 客户端(我的非官方版本)获取此 fileid
? mtproto
中的文件有 this location class表示他们的地址。
文件位置参数
- dc_id int 持有文件的数据中心编号
- volume_id 长服务器卷
- local_id 整型文件 ID
- secret 访问文件的长校验和
问题是我不知道如何从 File Location
类生成适合机器人的 fileid
。
更新 1:
我尝试进行一些逆向工程。所以,我发现 File Location
类和 FileId
之间存在某种关系。
这是我的文件位置
示例 地址。
- id:
0
//此字段仅适用于 secret 聊天 - access_hash:
0
//此字段仅可用于 secret 聊天 - volume_id:
429640340
(199BCA94 HEX
) - secret:
-3528741004939935589
(CF0764C08833409B HEX
)//根据 TG 文档,它应该是文件 CheckSum - local_id:
6005
(1775 HEX
)
这是我根据 FileID
从我的 Bot 检索到的前 FileLocation
类:
- 文件 ID:
AgADBAADL6gxG06L8w0nhNO87UW3iZTKmxkABJtAM4jAZAfPdRcAAgI
很明显FileID
的值是Base64
格式。所以我已经解码了它:
- 十六进制值:
0200030400032FA8311B4E8BF30D2784D3BCED45B78994CA9B1900049B403388C06407CF7517000202
现在我们可以在这个十六进制值中看到 FileLocation
值:
- 未知:
0200030400032FA8311B4E8BF30D2784D3BCED45B789
- VolumeId:
94CA9B19 HEX
- 未知:
0004
- 密码:
9B403388C06407CF HEX
- local_id:
7517 十六进制
- 未知:
000202
注意:值以 Big-Endian
格式存储。
现在我们需要解码Unknown
值。我感谢任何有助于解码这些值的努力。
最佳答案
这是 bot API 文件 ID 的 TL 方案:https://github.com/danog/MadelineProto/blob/master/src/danog/MadelineProto/TL_botAPI.tl
我已经在 MadelineProto 中实现了机器人 API 文件 ID 转换:您基本上必须对文件 ID 进行 base64 解码,将它们传递给基于空字节的 RLE 解码器,然后使用给定的 TL 方案对其进行解码。 请参阅 TL/Conversion/BotAPI* 以了解 MessageMedia 对象在序列化之前如何转换为 File 对象。
我设法使用这个 special MTProto bot I built using the same lib 对文件 ID 进行逆向工程(我忘了在这里搜索 xd) .
关于android - Telegram :从 Telegram 客户端获取文件ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41326961/