2016-12-26 183 views
14

电报机器人使用fileid下载文件。我怎样才能从电报客户端(我的非官方版本)得到这个fileidmtproto中的文件有this location class,表示他们的地址。电报:从电报客户端获取fileid

文件位置参数

  • dc_id数据中心的 INT编号拿着文件
  • volume_id长期服务器卷
  • local_id INT文件编号
  • 秘密长期校验和访问文件

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

更新1:

我试着做一些逆向工程。所以,我发现File Location班和FileId之间有一些关系。

这是我的File Location样本地址。

  • ID:0 //此字段仅可用于秘密聊天
  • access_hash:0 //此字段仅可用于秘密聊天
  • volume_id:429640340199BCA94 HEX
  • 秘密:-3528741004939935589CF0764C08833409B HEX)//根据TG文档,它应该是文件校验和
  • local_id:60051775 HEX

这是我根据FileID到我检索它从我的机器人前FileLocation类:

  • FILEID:AgADBAADL6gxG06L8w0nhNO87UW3iZTKmxkABJtAM4jAZAfPdRcAAgI

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

  • 十六进制值: 0200030400032FA8311B4E8BF30D2784D3BCED45B78994CA9B1900049B403388C06407CF7517000202

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

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

注:该值存储在Big-Endian格式。

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

+0

似乎Telegram-API中的PhotoSize.location和Bot-API中的PhotoSize.file_id没有关系 –

回答

1

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

我已经实现在MadelineProto机器人API文件ID转换:你基本上要base64decode文件IDS,基于空字节通过他们通过RLE解码器,然后使用给定的TL方案对它们进行解码。 请参阅TL/Conversion/BotAPI *以了解MessageMedia对象在序列化之前如何转换为File对象。

我设法使用此special MTProto bot I built using the same lib反向工程文件ID(我忘了在这里搜索xd)。