15

Telegram 机器人用于fileid下载文件。我如何fileid从 Telegram 客户端(我的非官方版本)获得这个?中的文件mtproto具有指示其地址的位置类。

文件位置参数

  • dc_id int 保存文件的数据中心编号
  • volume_id long 服务器卷
  • local_id int 文件 ID
  • 访问文件的秘密长校验和

问题是我不知道如何从课堂上生成fileid适合机器人的。File Location

更新 1:

我试图做一些逆向工程。所以,我发现File Locationclass 和FileId.

这是我的File Location 示例地址。

  • id: 0 // 此字段仅适用于秘密聊天
  • access_hash: 0 // 此字段仅适用于秘密聊天
  • volume_id: 429640340( 199BCA94 HEX)
  • secret: -3528741004939935589( CF0764C08833409B HEX) // 根据 TG 文档,它应该是文件 CheckSum
  • local_id: 6005( 1775 HEX)

这是我根据我从我的 Bot 中检索FileID到的前一课:FileLocation

  • 文件编号:AgADBAADL6gxG06L8w0nhNO87UW3iZTKmxkABJtAM4jAZAfPdRcAAgI

很明显,FileID值是Base64格式。所以我已经解码了它:

  • 十六进制值: 0200030400032FA8311B4E8BF30D2784D3BCED45B78994CA9B1900049B403388C06407CF7517000202

现在我们可以看到FileLocation这个十六进制值中的值:

  • 未知:0200030400032FA8311B4E8BF30D2784D3BCED45B789
  • 卷号:94CA9B19 HEX
  • 未知:0004
  • 秘密:9B403388C06407CF HEX
  • local_id:7517 Hex
  • 未知:000202

注意:这些值以Big-Endian格式存储。

现在我们需要解码Unknown值。我感谢任何有助于解码这些值的努力。

4

1 回答 1

1

这是机器人 API 文件 ID 的 TL 方案:https ://github.com/danog/MadelineProto/blob/master/src/danog/MadelineProto/TL_botAPI.tl

我已经在 MadelineProto 中实现了 bot API 文件 id 转换:您基本上必须对文件 id 进行 base64 解码,将它们通过基于空字节的 RLE 解码器,然后使用给定的 TL 方案对其进行解码。请参阅 TL/Conversion/BotAPI* 以了解 MessageMedia 对象在序列化之前如何转换为 File 对象。

我设法使用我使用相同的 lib 构建的这个特殊的 MTProto bot对文件 ID 进行了逆向工程(我忘了在这里搜索 xd) 。

于 2017-04-05T00:24:53.453 回答