github.com/Mrs4s/MiraiGo@v0.0.0-20240226124653-54bdd873e3fe/client/offline_file.go (about) 1 package client 2 3 import ( 4 "github.com/pkg/errors" 5 6 "github.com/Mrs4s/MiraiGo/client/internal/network" 7 "github.com/Mrs4s/MiraiGo/client/pb/cmd0x346" 8 "github.com/Mrs4s/MiraiGo/internal/proto" 9 ) 10 11 func init() { 12 decoders["OfflineFilleHandleSvr.pb_ftn_CMD_REQ_APPLY_DOWNLOAD-1200"] = decodeOfflineFileDownloadResponse 13 } 14 15 func (c *QQClient) buildOfflineFileDownloadRequestPacket(uuid []byte) (uint16, []byte) { 16 seq := c.nextSeq() 17 req := &cmd0x346.C346ReqBody{ 18 Cmd: 1200, 19 Seq: int32(seq), 20 BusinessId: 3, 21 ClientType: 104, 22 ApplyDownloadReq: &cmd0x346.ApplyDownloadReq{ 23 Uin: c.Uin, 24 Uuid: uuid, 25 OwnerType: 2, 26 }, 27 ExtensionReq: &cmd0x346.ExtensionReq{ 28 DownloadUrlType: 1, 29 }, 30 } 31 payload, _ := proto.Marshal(req) 32 packet := c.uniPacketWithSeq(seq, "OfflineFilleHandleSvr.pb_ftn_CMD_REQ_APPLY_DOWNLOAD-1200", payload) 33 return seq, packet 34 } 35 36 func decodeOfflineFileDownloadResponse(c *QQClient, pkt *network.Packet) (any, error) { 37 rsp := cmd0x346.C346RspBody{} 38 if err := proto.Unmarshal(pkt.Payload, &rsp); err != nil { 39 c.error("unmarshal cmd0x346 rsp body error: %v", err) 40 return nil, errors.Wrap(err, "unmarshal cmd0x346 rsp body error") 41 } 42 if rsp.ApplyDownloadRsp == nil { 43 c.error("decode apply download 1200 error: apply rsp is nil.") 44 return nil, errors.New("apply rsp is nil") 45 } 46 if rsp.ApplyDownloadRsp.RetCode != 0 { 47 c.error("decode apply download 1200 error: %v", rsp.ApplyDownloadRsp.RetCode) 48 return nil, errors.Errorf("apply download rsp error: %d", rsp.ApplyDownloadRsp.RetCode) 49 } 50 return "http://" + rsp.ApplyDownloadRsp.DownloadInfo.DownloadDomain + rsp.ApplyDownloadRsp.DownloadInfo.DownloadUrl, nil 51 }