diff --git a/coolq/api.go b/coolq/api.go index fd2566e..7d99bf0 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -1561,7 +1561,7 @@ func (bot *CQBot) CQGetForwardMessage(resID string) global.MSG { r := make([]global.MSG, len(nodes)) for i, n := range nodes { bot.checkMedia(n.Message, 0) - content := ToFormattedMessage(n.Message, message.Source{SourceType: message.SourceGroup}, false) + content := ToFormattedMessage(n.Message, message.Source{SourceType: message.SourceGroup}) if len(n.Message) == 1 { if forward, ok := n.Message[0].(*message.ForwardMessage); ok { content = transformNodes(forward.Nodes) @@ -1610,9 +1610,9 @@ func (bot *CQBot) CQGetMessage(messageID int32) global.MSG { switch o := msg.(type) { case *db.StoredGroupMessage: m["group_id"] = o.GroupCode - m["message"] = ToFormattedMessage(bot.ConvertContentMessage(o.Content, message.SourceGroup), message.Source{SourceType: message.SourceGroup, PrimaryID: o.GroupCode}, false) + m["message"] = ToFormattedMessage(bot.ConvertContentMessage(o.Content, message.SourceGroup), message.Source{SourceType: message.SourceGroup, PrimaryID: o.GroupCode}) case *db.StoredPrivateMessage: - m["message"] = ToFormattedMessage(bot.ConvertContentMessage(o.Content, message.SourcePrivate), message.Source{SourceType: message.SourcePrivate}, false) + m["message"] = ToFormattedMessage(bot.ConvertContentMessage(o.Content, message.SourcePrivate), message.Source{SourceType: message.SourcePrivate}) } return OK(m) } @@ -1657,7 +1657,7 @@ func (bot *CQBot) CQGetGuildMessage(messageID string, noCache bool) global.MSG { "tiny_id": fU64(pull[0].Sender.TinyId), "nickname": pull[0].Sender.Nickname, } - m["message"] = ToFormattedMessage(pull[0].Elements, source, false) + m["message"] = ToFormattedMessage(pull[0].Elements, source) m["reactions"] = convertReactions(pull[0].Reactions) bot.InsertGuildChannelMessage(pull[0]) } else { @@ -1672,7 +1672,7 @@ func (bot *CQBot) CQGetGuildMessage(messageID string, noCache bool) global.MSG { "tiny_id": fU64(channelMsgByDB.Attribute.SenderTinyID), "nickname": channelMsgByDB.Attribute.SenderName, } - m["message"] = ToFormattedMessage(bot.ConvertContentMessage(channelMsgByDB.Content, message.SourceGuildChannel), source, false) + m["message"] = ToFormattedMessage(bot.ConvertContentMessage(channelMsgByDB.Content, message.SourceGuildChannel), source) } case message.SourceGuildDirect: // todo(mrs4s): 支持 direct 消息 diff --git a/coolq/converter.go b/coolq/converter.go index 2116c7a..d185b64 100644 --- a/coolq/converter.go +++ b/coolq/converter.go @@ -65,7 +65,7 @@ func (bot *CQBot) formatGroupMessage(m *message.GroupMessage) *event { SourceType: message.SourceGroup, PrimaryID: m.GroupCode, } - cqm := toStringMessage(m.Elements, source, true) + cqm := toStringMessage(m.Elements, source) typ := "message/group/normal" if m.Sender.Uin == bot.Client.Uin { typ = "message_sent/group/normal" @@ -74,7 +74,7 @@ func (bot *CQBot) formatGroupMessage(m *message.GroupMessage) *event { "anonymous": nil, "font": 0, "group_id": m.GroupCode, - "message": ToFormattedMessage(m.Elements, source, false), + "message": ToFormattedMessage(m.Elements, source), "message_type": "group", "message_seq": m.Id, "raw_message": cqm, @@ -210,11 +210,11 @@ func convertReactions(reactions []*message.GuildMessageEmojiReaction) (r []globa return } -func toStringMessage(m []message.IMessageElement, source message.Source, raw bool) string { - elems := toElements(m, source, raw) +func toStringMessage(m []message.IMessageElement, source message.Source) string { + elems := toElements(m, source) var sb strings.Builder for _, elem := range elems { - sb.WriteString(elem.CQCode()) + elem.WriteCQCodeTo(&sb) } return sb.String() } diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 59c7d23..17b7777 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -95,7 +95,7 @@ func replyID(r *message.ReplyElement, source message.Source) int32 { // toElements 将消息元素数组转为MSG数组以用于消息上报 // // nolint:govet -func toElements(e []message.IMessageElement, source message.Source, raw bool) (r []cqcode.Element) { +func toElements(e []message.IMessageElement, source message.Source) (r []cqcode.Element) { type pair = cqcode.Pair // simplify code type pairs = []pair @@ -111,7 +111,7 @@ func toElements(e []message.IMessageElement, source message.Source, raw bool) (r elem := cqcode.Element{ Type: "reply", Data: pairs{ - {"id", strconv.FormatInt(int64(id), 10)}, + {K: "id", V: strconv.FormatInt(int64(id), 10)}, }, } if base.ExtraReplyData { @@ -119,7 +119,7 @@ func toElements(e []message.IMessageElement, source message.Source, raw bool) (r pair{K: "seq", V: strconv.FormatInt(int64(replyElem.ReplySeq), 10)}, pair{K: "qq", V: strconv.FormatInt(replyElem.Sender, 10)}, pair{K: "time", V: strconv.FormatInt(int64(replyElem.Time), 10)}, - pair{K: "text", V: toStringMessage(replyElem.Elements, source, true)}, + pair{K: "text", V: toStringMessage(replyElem.Elements, source)}, ) } r = append(r, elem) @@ -139,14 +139,14 @@ func toElements(e []message.IMessageElement, source message.Source, raw bool) (r m = cqcode.Element{ Type: "text", Data: pairs{ - {"text", o.Content}, + {K: "text", V: o.Content}, }, } case *message.LightAppElement: m = cqcode.Element{ Type: "json", Data: pairs{ - {"data", o.Content}, + {K: "data", V: o.Content}, }, } case *message.AtElement: @@ -157,53 +157,51 @@ func toElements(e []message.IMessageElement, source message.Source, raw bool) (r m = cqcode.Element{ Type: "at", Data: pairs{ - {"qq", target}, + {K: "qq", V: target}, }, } case *message.RedBagElement: m = cqcode.Element{ Type: "redbag", Data: pairs{ - {"title", o.Title}, + {K: "title", V: o.Title}, }, } case *message.ForwardElement: m = cqcode.Element{ Type: "forward", Data: pairs{ - {"id", o.ResId}, + {K: "id", V: o.ResId}, }, } case *message.FaceElement: m = cqcode.Element{ Type: "face", Data: pairs{ - {"id", strconv.FormatInt(int64(o.Index), 10)}, + {K: "id", V: strconv.FormatInt(int64(o.Index), 10)}, }, } case *message.VoiceElement: m = cqcode.Element{ Type: "record", Data: pairs{ - {"file", o.Name}, - {"url", o.Url}, + {K: "file", V: o.Name}, + {K: "url", V: o.Url}, }, } case *message.ShortVideoElement: m = cqcode.Element{ Type: "video", Data: pairs{ - {"file", o.Name}, - {"url", o.Url}, + {K: "file", V: o.Name}, + {K: "url", V: o.Url}, }, } case *message.GroupImageElement: data := pairs{ - {"file", hex.EncodeToString(o.Md5) + ".image"}, - {"subType", strconv.FormatInt(int64(o.ImageBizType), 10)}, - } - if raw { - data = append(data, pair{K: "url", V: o.Url}) + {K: "file", V: hex.EncodeToString(o.Md5) + ".image"}, + {K: "subType", V: strconv.FormatInt(int64(o.ImageBizType), 10)}, + {K: "url", V: o.Url}, } switch { case o.Flash: @@ -218,10 +216,8 @@ func toElements(e []message.IMessageElement, source message.Source, raw bool) (r } case *message.GuildImageElement: data := pairs{ - {"file", hex.EncodeToString(o.Md5) + ".image"}, - } - if raw { - data = append(data, pair{K: "url", V: o.Url}) + {K: "file", V: hex.EncodeToString(o.Md5) + ".image"}, + {K: "url", V: o.Url}, } m = cqcode.Element{ Type: "image", @@ -229,10 +225,8 @@ func toElements(e []message.IMessageElement, source message.Source, raw bool) (r } case *message.FriendImageElement: data := pairs{ - {"file", hex.EncodeToString(o.Md5) + ".image"}, - } - if raw { - data = append(data, pair{K: "url", V: o.Url}) + {K: "file", V: hex.EncodeToString(o.Md5) + ".image"}, + {K: "url", V: o.Url}, } if o.Flash { data = append(data, pair{K: "type", V: "flash"}) @@ -245,29 +239,29 @@ func toElements(e []message.IMessageElement, source message.Source, raw bool) (r m = cqcode.Element{ Type: "dice", Data: pairs{ - {"value", strconv.FormatInt(int64(o.Value), 10)}, + {K: "value", V: strconv.FormatInt(int64(o.Value), 10)}, }, } case *message.FingerGuessingElement: m = cqcode.Element{ Type: "rps", Data: pairs{ - {"value", strconv.FormatInt(int64(o.Value), 10)}, + {K: "value", V: strconv.FormatInt(int64(o.Value), 10)}, }, } case *message.MarketFaceElement: m = cqcode.Element{ Type: "text", Data: pairs{ - {"text", o.Name}, + {K: "text", V: o.Name}, }, } case *message.ServiceElement: m = cqcode.Element{ Type: "xml", Data: pairs{ - {"data", o.Content}, - {"resid", o.ResId}, + {K: "data", V: o.Content}, + {K: "resid", V: o.ResId}, }, } if !strings.Contains(o.Content, "