Skip to content

Commit

Permalink
fixed the problem of redundant messages when getting nested forwarded…
Browse files Browse the repository at this point in the history
… messages
  • Loading branch information
icarus-ai committed Jan 28, 2025
1 parent 03207e6 commit d9491c2
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 27 deletions.
54 changes: 29 additions & 25 deletions client/operation.go
Original file line number Diff line number Diff line change
Expand Up @@ -917,45 +917,49 @@ func (c *QQClient) FetchForwardMsg(resID string) (msg *message2.ForwardMessage,
if resID == "" {
return msg, errors.New("empty resID")
}
forwardMsg := &message2.ForwardMessage{ResID: resID}
pkt, err := messagePkt.BuildMultiMsgDownloadReq(c.GetUID(c.Uin), resID)
if err != nil {
return forwardMsg, err
return nil, err
}
resp, err := c.sendUniPacketAndWait("trpc.group.long_msg_interface.MsgService.SsoRecvLongMsg", pkt)
if err != nil {
return forwardMsg, err
return nil, err
}
pasted, err := messagePkt.ParseMultiMsgDownloadResp(resp)
if err != nil {
return forwardMsg, err
return nil, err
}
if pasted.Result == nil || pasted.Result.Payload == nil {
return forwardMsg, errors.New("empty response data")
return nil, errors.New("empty response data")
}
data := binary.GZipUncompress(pasted.Result.Payload)
result := &message.LongMsgResult{}
if err = proto.Unmarshal(data, result); err != nil {
return forwardMsg, err
}
forwardMsg.Nodes = make([]*message2.ForwardNode, len(result.Action.ActionData.MsgBody))
for idx, b := range result.Action.ActionData.MsgBody {
isGroupMsg := b.ResponseHead.Grp != nil
forwardMsg.Nodes[idx] = &message2.ForwardNode{
SenderID: b.ResponseHead.FromUin,
SenderName: b.ResponseHead.Forward.FriendName.Unwrap(),
Time: b.ContentHead.TimeStamp.Unwrap(),
}
if isGroupMsg {
forwardMsg.Nodes[idx].GroupID = b.ResponseHead.Grp.GroupUin
forwardMsg.Nodes[idx].SenderName = b.ResponseHead.Grp.MemberName
grpMsg := message2.ParseGroupMessage(b)
c.PreprocessGroupMessageEvent(grpMsg)
forwardMsg.Nodes[idx].Message = grpMsg.Elements
} else {
prvMsg := message2.ParsePrivateMessage(b)
c.PreprocessPrivateMessageEvent(prvMsg)
forwardMsg.Nodes[idx].Message = prvMsg.Elements
return nil, err
}

forwardMsg := &message2.ForwardMessage{ResID: resID}
for _, action := range result.Action {
if action.ActionCommand == "MultiMsg" {
forwardMsg.Nodes = make([]*message2.ForwardNode, len(action.ActionData.MsgBody))
for idx, b := range action.ActionData.MsgBody {
forwardMsg.Nodes[idx] = &message2.ForwardNode{
SenderID: b.ResponseHead.FromUin,
Time: b.ContentHead.TimeStamp.Unwrap(),
}
if forwardMsg.IsGroup = b.ResponseHead.Grp != nil; forwardMsg.IsGroup {
forwardMsg.Nodes[idx].GroupID = b.ResponseHead.Grp.GroupUin
forwardMsg.Nodes[idx].SenderName = b.ResponseHead.Grp.MemberName
grpMsg := message2.ParseGroupMessage(b)
c.PreprocessGroupMessageEvent(grpMsg)
forwardMsg.Nodes[idx].Message = grpMsg.Elements
} else {
forwardMsg.Nodes[idx].SenderName = b.ResponseHead.Forward.FriendName.Unwrap()
prvMsg := message2.ParsePrivateMessage(b)
c.PreprocessPrivateMessageEvent(prvMsg)
forwardMsg.Nodes[idx].Message = prvMsg.Elements
}
}
}
}
return forwardMsg, nil
Expand Down
4 changes: 2 additions & 2 deletions client/packets/message/multi_msg_upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ import (

func BuildMultiMsgUploadReq(selfUID string, groupUin uint32, msg []*message.PushMsgBody) ([]byte, error) {
longMsgResult := &message.LongMsgResult{
Action: &message.LongMsgAction{
Action: []*message.LongMsgAction{{

Check failure on line 14 in client/packets/message/multi_msg_upload.go

View workflow job for this annotation

GitHub Actions / test

cannot use []*message.LongMsgAction{…} (value of type []*"github.com/LagrangeDev/LagrangeGo/client/packets/pb/message".LongMsgAction) as *"github.com/LagrangeDev/LagrangeGo/client/packets/pb/message".LongMsgAction value in struct literal

Check failure on line 14 in client/packets/message/multi_msg_upload.go

View workflow job for this annotation

GitHub Actions / lint

cannot use []*message.LongMsgAction{…} (value of type []*"github.com/LagrangeDev/LagrangeGo/client/packets/pb/message".LongMsgAction) as *"github.com/LagrangeDev/LagrangeGo/client/packets/pb/message".LongMsgAction value in struct literal
ActionCommand: "MultiMsg",
ActionData: &message.LongMsgContent{
MsgBody: msg,
},
},
}},
}
longMsgResultData, _ := proto.Marshal(longMsgResult)
payload := binary.GZipCompress(longMsgResultData)
Expand Down

0 comments on commit d9491c2

Please sign in to comment.