MCPcopy Create free account
hub / github.com/LagrangeDev/LagrangeGo / FetchForwardMsg

Method FetchForwardMsg

client/operation.go:941–991  ·  view source on GitHub ↗

FetchForwardMsg 获取合并转发消息

(resID string)

Source from the content-addressed store, hash-verified

939
940// FetchForwardMsg 获取合并转发消息
941func (c *QQClient) FetchForwardMsg(resID string) (msg *message2.ForwardMessage, err error) {
942 if resID == "" {
943 return msg, errors.New("empty resID")
944 }
945 pkt, err := messagePkt.BuildMultiMsgDownloadReq(c.GetUID(c.Uin), resID)
946 if err != nil {
947 return nil, err
948 }
949 resp, err := c.sendUniPacketAndWait("trpc.group.long_msg_interface.MsgService.SsoRecvLongMsg", pkt)
950 if err != nil {
951 return nil, err
952 }
953 pasted, err := messagePkt.ParseMultiMsgDownloadResp(resp)
954 if err != nil {
955 return nil, err
956 }
957 if pasted.Result == nil || pasted.Result.Payload == nil {
958 return nil, errors.New("empty response data")
959 }
960 data := binary.GZipUncompress(pasted.Result.Payload)
961 result := &message.LongMsgResult{}
962 if err = proto.Unmarshal(data, result); err != nil {
963 return nil, err
964 }
965
966 forwardMsg := &message2.ForwardMessage{ResID: resID}
967 for _, action := range result.Action {
968 if action.ActionCommand == "MultiMsg" {
969 forwardMsg.Nodes = make([]*message2.ForwardNode, len(action.ActionData.MsgBody))
970 for idx, b := range action.ActionData.MsgBody {
971 forwardMsg.Nodes[idx] = &message2.ForwardNode{
972 SenderID: b.ResponseHead.FromUin,
973 Time: b.ContentHead.TimeStamp.Unwrap(),
974 }
975 if forwardMsg.IsGroup = b.ResponseHead.Grp != nil; forwardMsg.IsGroup {
976 forwardMsg.Nodes[idx].GroupID = b.ResponseHead.Grp.GroupUin
977 forwardMsg.Nodes[idx].SenderName = b.ResponseHead.Grp.MemberName
978 grpMsg := message2.ParseGroupMessage(b)
979 c.PreprocessGroupMessageEvent(grpMsg)
980 forwardMsg.Nodes[idx].Message = grpMsg.Elements
981 } else {
982 forwardMsg.Nodes[idx].SenderName = b.ResponseHead.Forward.FriendName.Unwrap()
983 prvMsg := message2.ParsePrivateMessage(b)
984 c.PreprocessPrivateMessageEvent(prvMsg)
985 forwardMsg.Nodes[idx].Message = prvMsg.Elements
986 }
987 }
988 }
989 }
990 return forwardMsg, nil
991}
992
993// UploadForwardMsg 上传合并转发消息
994// groupUin should be the group number where the uploader is located or 0 (c2c)

Calls 6

GetUIDMethod · 0.95
sendUniPacketAndWaitMethod · 0.95
GZipUncompressFunction · 0.92
UnmarshalFunction · 0.92

Tested by

no test coverage detected