diff --git a/client/client.go b/client/client.go index 29740438..9d9a0750 100644 --- a/client/client.go +++ b/client/client.go @@ -8,7 +8,6 @@ import ( "errors" "fmt" "io" - "log" "math" "math/rand" "net" @@ -1029,7 +1028,8 @@ func (c *QQClient) netLoop() { } rsp, err := decoder(c, pkt.SequenceId, payload) if err != nil { - log.Println("decode", pkt.CommandName, "error:", err) + c.Error("decode pkt %v error: %v", pkt.CommandName, err) + //log.Println("decode", pkt.CommandName, "error:", err) } if f, ok := c.handlers.Load(pkt.SequenceId); ok { c.handlers.Delete(pkt.SequenceId) diff --git a/client/decoders.go b/client/decoders.go index 0fbde8cb..5fe80b0b 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -875,11 +875,19 @@ func decodeMultiApplyDownResponse(c *QQClient, _ uint16, payload []byte) (interf return nil, errors.New("not found") } rsp := body.MultimsgApplydownRsp[0] - i := binary.UInt32ToIPV4Address(uint32(rsp.Uint32DownIp[0])) - b, err := utils.HttpGetBytes(fmt.Sprintf("http://%s:%d%s", i, body.MultimsgApplydownRsp[0].Uint32DownPort[0], string(rsp.ThumbDownPara)), "") + prefix := func() string { + if rsp.MsgExternInfo.ChannelType == 2 { + return "https://ssl.htdata.qq.com" + } + return fmt.Sprintf("http://%s:%d", binary.UInt32ToIPV4Address(uint32(rsp.Uint32DownIp[0])), body.MultimsgApplydownRsp[0].Uint32DownPort[0]) + }() + b, err := utils.HttpGetBytes(fmt.Sprintf("%s%s", prefix, string(rsp.ThumbDownPara)), "") if err != nil { return nil, err } + if b[0] != 40 { + return nil, errors.New("unexpected body data") + } tea := binary.NewTeaCipher(body.MultimsgApplydownRsp[0].MsgKey) r := binary.NewReader(b[1:]) i1 := r.ReadInt32() diff --git a/client/global.go b/client/global.go index 1da005dd..8d58060f 100644 --- a/client/global.go +++ b/client/global.go @@ -305,10 +305,6 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage { } // pre parse for _, elem := range m.Body.RichText.Elems { - // 为什么小程序会同时通过RichText和long text发送 - if elem.LightApp != nil { - break - } // is rich long msg if elem.GeneralFlags != nil && elem.GeneralFlags.LongTextResid != "" { if f := c.GetForwardMessage(elem.GeneralFlags.LongTextResid); f != nil && len(f.Nodes) == 1 {