2016-12-26 185 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)。