FetchForwardMsg 获取合并转发消息
(resID string)
| 939 | |
| 940 | // FetchForwardMsg 获取合并转发消息 |
| 941 | func (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) |
no test coverage detected