From 123b118788f208852373456deb33e8f0009cee2e Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Sat, 26 Dec 2020 20:04:47 +0800 Subject: [PATCH] clean unnecessary code --- client/group_msg.go | 55 ++++++++++-------------- message/message.go | 100 ++++++++++++++++---------------------------- message/pack.go | 16 +------ 3 files changed, 61 insertions(+), 110 deletions(-) diff --git a/client/group_msg.go b/client/group_msg.go index b3997224..68628585 100644 --- a/client/group_msg.go +++ b/client/group_msg.go @@ -61,11 +61,8 @@ func (c *QQClient) SendGroupMessage(groupCode int64, m *message.SendingMessage, // SendGroupForwardMessage 发送群合并转发消息 func (c *QQClient) SendGroupForwardMessage(groupCode int64, m *message.ForwardMessage) *message.GroupMessage { - mg := c.UploadGroupForwardMessage(groupCode, m) return c.sendGroupMessage(groupCode, true, - &message.SendingMessage{Elements: []message.IMessageElement{ - &mg.ServiceElement, - }}, + &message.SendingMessage{Elements: []message.IMessageElement{c.UploadGroupForwardMessage(groupCode, m)}}, ) } @@ -152,25 +149,10 @@ func (c *QQClient) uploadGroupLongMessage(groupCode int64, m *message.ForwardMes ts := time.Now().UnixNano() seq := c.nextGroupSeq() data, hash := m.CalculateValidationData(seq, rand.Int31(), groupCode) - i, err := c.sendAndWait(c.buildMultiApplyUpPacket(data, hash, 1, utils.ToGroupUin(groupCode))) + rsp, body, err := c.multiMsgApplyUp(groupCode, data, hash, 1) if err != nil { return nil } - rsp := i.(*multimsg.MultiMsgApplyUpRsp) - body, _ := proto.Marshal(&longmsg.LongReqBody{ - Subcmd: 1, - TermType: 5, - PlatformType: 9, - MsgUpReq: []*longmsg.LongMsgUpReq{ - { - MsgType: 3, - DstUin: utils.ToGroupUin(groupCode), - MsgContent: data, - StoreType: 2, - MsgUkey: rsp.MsgUkey, - }, - }, - }) for i, ip := range rsp.Uint32UpIp { err := c.highwayUpload(uint32(ip), int(rsp.Uint32UpPort[i]), rsp.MsgSig, body, 27) if err == nil { @@ -197,10 +179,29 @@ func (c *QQClient) UploadGroupForwardMessage(groupCode int64, m *message.Forward ts := time.Now().UnixNano() seq := c.nextGroupSeq() data, hash, items := m.CalculateValidationDataForward(seq, rand.Int31(), groupCode) - i, err := c.sendAndWait(c.buildMultiApplyUpPacket(data, hash, 2, utils.ToGroupUin(groupCode))) + + rsp, body, err := c.multiMsgApplyUp(groupCode, data, hash, 2) if err != nil { return nil } + for i, ip := range rsp.Uint32UpIp { + err := c.highwayUpload(uint32(ip), int(rsp.Uint32UpPort[i]), rsp.MsgSig, body, 27) + if err == nil { + var pv string + for i := 0; i < int(math.Min(4, float64(len(m.Nodes)))); i++ { + pv += fmt.Sprintf(`%s: %s`, m.Nodes[i].SenderName, message.ToReadableString(m.Nodes[i].Message)) + } + return genForwardTemplate(rsp.MsgResid, pv, "群聊的聊天记录", "[聊天记录]", "聊天记录", fmt.Sprintf("查看 %d 条转发消息", len(m.Nodes)), ts, items) + } + } + return nil +} + +func (c *QQClient) multiMsgApplyUp(groupCode int64, data []byte, hash []byte, buType int32) (*multimsg.MultiMsgApplyUpRsp, []byte, error) { + i, err := c.sendAndWait(c.buildMultiApplyUpPacket(data, hash, buType, utils.ToGroupUin(groupCode))) + if err != nil { + return nil, nil, err + } rsp := i.(*multimsg.MultiMsgApplyUpRsp) body, _ := proto.Marshal(&longmsg.LongReqBody{ Subcmd: 1, @@ -216,17 +217,7 @@ func (c *QQClient) UploadGroupForwardMessage(groupCode int64, m *message.Forward }, }, }) - for i, ip := range rsp.Uint32UpIp { - err := c.highwayUpload(uint32(ip), int(rsp.Uint32UpPort[i]), rsp.MsgSig, body, 27) - if err == nil { - var pv string - for i := 0; i < int(math.Min(4, float64(len(m.Nodes)))); i++ { - pv += fmt.Sprintf(`%s: %s`, m.Nodes[i].SenderName, message.ToReadableString(m.Nodes[i].Message)) - } - return genForwardTemplate(rsp.MsgResid, pv, "群聊的聊天记录", "[聊天记录]", "聊天记录", fmt.Sprintf("查看 %d 条转发消息", len(m.Nodes)), ts, items) - } - } - return nil + return rsp, body, nil } // MessageSvc.PbSendMsg diff --git a/message/message.go b/message/message.go index aaa248ee..a78790ae 100644 --- a/message/message.go +++ b/message/message.go @@ -560,6 +560,42 @@ func ParseMessageElems(elems []*msg.Elem) []IMessageElement { } func (forMsg *ForwardMessage) CalculateValidationData(seq, random int32, groupCode int64) ([]byte, []byte) { + msgs := forMsg.packForwardMsg(seq, random, groupCode) + trans := &msg.PbMultiMsgTransmit{Msg: msgs, PbItemList: []*msg.PbMultiMsgItem{ + { + FileName: proto.String("MultiMsg"), + Buffer: &msg.PbMultiMsgNew{Msg: msgs}, + }, + }} + b, _ := proto.Marshal(trans) + data := binary.GZipCompress(b) + hash := md5.Sum(data) + return data, hash[:] +} + +// CalculateValidationDataForward 屎代码 +func (forMsg *ForwardMessage) CalculateValidationDataForward(seq, random int32, groupCode int64) ([]byte, []byte, []*msg.PbMultiMsgItem) { + msgs := forMsg.packForwardMsg(seq, random, groupCode) + trans := &msg.PbMultiMsgTransmit{Msg: msgs, PbItemList: []*msg.PbMultiMsgItem{ + { + FileName: proto.String("MultiMsg"), + Buffer: &msg.PbMultiMsgNew{Msg: msgs}, + }, + }} + for _, node := range forMsg.Nodes { + for _, message := range node.Message { + if forwardElement, ok := message.(*ForwardElement); ok { + trans.PbItemList = append(trans.PbItemList, forwardElement.Items...) + } + } + } + b, _ := proto.Marshal(trans) + data := binary.GZipCompress(b) + hash := md5.Sum(data) + return data, hash[:], trans.PbItemList +} + +func (forMsg *ForwardMessage) packForwardMsg(seq int32, random int32, groupCode int64) []*msg.Message { var msgs []*msg.Message for _, node := range forMsg.Nodes { msgs = append(msgs, &msg.Message{ @@ -586,65 +622,7 @@ func (forMsg *ForwardMessage) CalculateValidationData(seq, random int32, groupCo }, }) } - trans := &msg.PbMultiMsgTransmit{Msg: msgs, PbItemList: []*msg.PbMultiMsgItem{ - { - FileName: proto.String("MultiMsg"), - Buffer: &msg.PbMultiMsgNew{Msg: msgs}, - }, - }} - b, _ := proto.Marshal(trans) - data := binary.GZipCompress(b) - hash := md5.Sum(data) - return data, hash[:] -} - -// CalculateValidationDataForward 屎代码 -func (forMsg *ForwardMessage) CalculateValidationDataForward(seq, random int32, groupCode int64) ([]byte, []byte, []*msg.PbMultiMsgItem) { - var msgs []*msg.Message - for _, node := range forMsg.Nodes { - msgs = append(msgs, &msg.Message{ - Head: &msg.MessageHead{ - FromUin: &node.SenderId, - MsgSeq: &seq, - MsgTime: &node.Time, - MsgUid: proto.Int64(0x01000000000000000 | (int64(random) & 0xFFFFFFFF)), - MutiltransHead: &msg.MutilTransHead{ - MsgId: proto.Int32(1), - }, - MsgType: proto.Int32(82), - GroupInfo: &msg.GroupInfo{ - GroupCode: &groupCode, - GroupRank: []byte{}, - GroupName: []byte{}, - GroupCard: &node.SenderName, - }, - }, - Body: &msg.MessageBody{ - RichText: &msg.RichText{ - Elems: func() []*msg.Elem { - return ToProtoElems(node.Message, false) - }(), - }, - }, - }) - } - trans := &msg.PbMultiMsgTransmit{Msg: msgs, PbItemList: []*msg.PbMultiMsgItem{ - { - FileName: proto.String("MultiMsg"), - Buffer: &msg.PbMultiMsgNew{Msg: msgs}, - }, - }} - for _, item1 := range forMsg.Nodes { - for _, item2 := range item1.Message { - if item3, ok := item2.(*ForwardElement); ok { - trans.PbItemList = append(trans.PbItemList, item3.Items...) - } - } - } - b, _ := proto.Marshal(trans) - data := binary.GZipCompress(b) - hash := md5.Sum(data) - return data, hash[:], trans.PbItemList + return msgs } func ToReadableString(m []IMessageElement) (r string) { @@ -658,10 +636,6 @@ func ToReadableString(m []IMessageElement) (r string) { r += "/" + e.Name case *GroupImageElement: r += "[图片]" - case *ServiceElement: - if e.SubType == "Forward" { - r += "[聊天记录]" - } case *ForwardElement: r += "[聊天记录]" // NOTE: flash pic is singular diff --git a/message/pack.go b/message/pack.go index f62e6344..6488480d 100644 --- a/message/pack.go +++ b/message/pack.go @@ -125,21 +125,7 @@ func (e *FriendImageElement) Pack() (r []*msg.Elem) { func (e *ServiceElement) Pack() (r []*msg.Elem) { r = []*msg.Elem{} - if e.Id == 35 { - r = append(r, &msg.Elem{ - RichMsg: &msg.RichMsg{ - Template1: append([]byte{1}, binary.ZlibCompress([]byte(e.Content))...), - ServiceId: &e.Id, - MsgResId: []byte{}, - }, - }) - r = append(r, &msg.Elem{ - Text: &msg.Text{ - Str: proto.String("你的QQ暂不支持查看[转发多条消息],请期待后续版本。"), - }, - }) - return - } + // id =35 已移至 ForwardElement if e.Id == 33 { r = append(r, &msg.Elem{ Text: &msg.Text{Str: &e.ResId},