package client import ( "github.com/Mrs4s/MiraiGo/client/pb/channel" "github.com/Mrs4s/MiraiGo/client/pb/msg" "github.com/Mrs4s/MiraiGo/message" "google.golang.org/protobuf/proto" "strconv" ) func (c *QQClient) parseGuildChannelMessage(msg *channel.ChannelMsgContent) *message.GuildChannelMessage { guild := c.GuildService.FindGuild(msg.Head.RoutingHead.GetGuildId()) if guild == nil { return nil // todo: sync guild info } // mem := guild.FindMember(msg.Head.RoutingHead.GetFromTinyid()) return &message.GuildChannelMessage{ Id: msg.Head.ContentHead.GetSeq(), InternalId: msg.Body.RichText.Attr.GetRandom(), GuildId: msg.Head.RoutingHead.GetGuildId(), ChannelId: msg.Head.RoutingHead.GetChannelId(), Time: int64(msg.Head.ContentHead.GetTime()), Sender: &message.GuildSender{ TinyId: msg.Head.RoutingHead.GetFromTinyid(), Nickname: string(msg.ExtInfo.GetFromNick()), }, Elements: message.ParseMessageElems(msg.Body.RichText.Elems), } } func decodeGuildMessageEmojiReactions(content *channel.ChannelMsgContent) (r []*message.GuildMessageEmojiReaction) { r = []*message.GuildMessageEmojiReaction{} var common *msg.CommonElem for _, elem := range content.Body.RichText.Elems { if elem.CommonElem != nil && elem.CommonElem.GetServiceType() == 38 { common = elem.CommonElem break } } if common == nil { return } serv38 := new(msg.MsgElemInfoServtype38) _ = proto.Unmarshal(common.PbElem, serv38) if len(serv38.ReactData) > 0 { cnt := new(channel.MsgCnt) _ = proto.Unmarshal(serv38.ReactData, cnt) if len(cnt.EmojiReaction) == 0 { return } for _, e := range cnt.EmojiReaction { reaction := &message.GuildMessageEmojiReaction{ EmojiId: e.GetEmojiId(), EmojiType: e.GetEmojiType(), Count: int32(e.GetCnt()), Clicked: e.GetIsClicked(), } if index, err := strconv.ParseInt(e.GetEmojiId(), 10, 32); err == nil { reaction.Face = message.NewFace(int32(index)) } r = append(r, reaction) } } return }