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

Method FetchEssenceMessage

client/operation.go:1017–1092  ·  view source on GitHub ↗

FetchEssenceMessage 获取精华消息

(groupUin uint32)

Source from the content-addressed store, hash-verified

1015
1016// FetchEssenceMessage 获取精华消息
1017func (c *QQClient) FetchEssenceMessage(groupUin uint32) ([]*message2.GroupEssenceMessage, error) {
1018 var essenceMsg []*message2.GroupEssenceMessage
1019 page := 0
1020 bkn, err := c.GetCsrfToken()
1021 if err != nil {
1022 return essenceMsg, err
1023 }
1024 grpInfo := c.GetCachedGroupInfo(groupUin)
1025 for {
1026 reqURL := fmt.Sprintf("https://qun.qq.com/cgi-bin/group_digest/digest_list?random=7800&X-CROSS-ORIGIN=fetch&group_code=%d&page_start=%d&page_limit=20&bkn=%d", groupUin, page, bkn)
1027 req, err := http.NewRequest(http.MethodGet, reqURL, nil)
1028 if err != nil {
1029 return essenceMsg, err
1030 }
1031 resp, err := c.SendRequestWithCookie(req)
1032 if err != nil {
1033 return essenceMsg, err
1034 }
1035 respData, err := io.ReadAll(resp.Body)
1036 if err != nil {
1037 return nil, err
1038 }
1039 _ = resp.Body.Close()
1040 if resp.StatusCode != http.StatusOK {
1041 return essenceMsg, fmt.Errorf("error resp code %d", resp.StatusCode)
1042 }
1043 respJSON := gjson.ParseBytes(respData)
1044 if respJSON.Get("retcode").Int() != 0 {
1045 return essenceMsg, fmt.Errorf("error code %d, %s", respJSON.Get("retcode").Int(), respJSON.Get("retmsg").String())
1046 }
1047 for _, v := range respJSON.Get("data").Get("msg_list").Array() {
1048 var elements []message2.IMessageElement
1049 for _, e := range v.Get("msg_content").Array() {
1050 switch e.Get("msg_type").Int() {
1051 case 1:
1052 elements = append(elements, &message2.TextElement{Content: e.Get("text").String()})
1053 case 2:
1054 elements = append(elements, &message2.FaceElement{FaceID: uint32(e.Get("face_index").Int())})
1055 case 3:
1056 elements = append(elements, &message2.ImageElement{URL: e.Get("image_url").String()})
1057 case 4:
1058 elements = append(elements, &message2.FileElement{
1059 FileID: e.Get("file_id").String(),
1060 FileURL: e.Get("file_thumbnail_url").String(),
1061 })
1062 }
1063 }
1064 senderUin := uint32(v.Get("sender_uin").Int())
1065 senderInfo := c.GetCachedMemberInfo(senderUin, groupUin)
1066 essenceMsg = append(essenceMsg, &message2.GroupEssenceMessage{
1067 OperatorUin: uint32(v.Get("add_digest_uin").Int()),
1068 OperatorUID: c.GetUID(uint32(v.Get("add_digest_uin").Int())),
1069 OperatorTime: uint64(v.Get("add_digest_time").Int()),
1070 CanRemove: v.Get("can_be_removed").Bool(),
1071 Message: &message2.GroupMessage{
1072 ID: uint32(v.Get("msg_seq").Int()),
1073 InternalID: uint32(v.Get("msg_random").Int()),
1074 GroupUin: grpInfo.GroupUin,

Callers

nothing calls this directly

Calls 9

GetCsrfTokenMethod · 0.95
GetCachedGroupInfoMethod · 0.95
SendRequestWithCookieMethod · 0.95
GetCachedMemberInfoMethod · 0.95
GetUIDMethod · 0.95
ReadAllMethod · 0.80
BoolMethod · 0.80
CloseMethod · 0.45
StringMethod · 0.45

Tested by

no test coverage detected