电报:从电报客户端获取fileid

电报机器人使用fileid下载文件。 如何从Telegram客户端(My Unofficial版本)获取此fileidmtproto文件具有此位置类 ,用于指示其地址。

文件位置参数

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

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

更新1:

我试过做一些逆向工程。 所以,我发现File Location类和FileId之间存在某种关系。

这是我的File Location 示例地址。

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

这是我根据我从Bot中检索到的前FileLocation类的FileID

  • FileId: AgADBAADL6gxG06L8w0nhNO87UW3iZTKmxkABJtAM4jAZAfPdRcAAgI

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

  • HEX值: 0200030400032FA8311B4E8BF30D2784D3BCED45B78994CA9B1900049B403388C06407CF7517000202

现在我们可以看到这个hex值中的FileLocation值:

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

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

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

这是bot 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机器人逆向工程文件ID(我忘了在这里搜索xd)。