From 3326660880a0459ce0e52dbb2b680900263ce8a0 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Thu, 12 Nov 2020 22:20:22 +0800 Subject: [PATCH] fix cardimage cannot load on pc. --- coolq/cqcode.go | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/coolq/cqcode.go b/coolq/cqcode.go index 2923948..08f9fd6 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -310,7 +310,12 @@ func (bot *CQBot) ConvertStringMessage(m string, group bool) (r []message.IMessa } continue } - r = append(r, elem) + switch i := elem.(type) { + case message.IMessageElement: + r = append(r, i) + case []message.IMessageElement: + r = append(r, i...) + } } if si != len(m) { r = append(r, message.NewText(CQCodeUnescapeText(m[si:]))) @@ -354,7 +359,13 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message. log.Warnf("转换CQ码到MiraiGo Element时出现错误: %v 将忽略本段CQ码.", err) return } - r = append(r, elem) + switch i := elem.(type) { + case message.IMessageElement: + r = append(r, i) + case []message.IMessageElement: + r = append(r, i...) + } + } if m.Type == gjson.String { return bot.ConvertStringMessage(m.Str, group) @@ -370,7 +381,10 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message. return } -func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m message.IMessageElement, err error) { +// ToElement 将解码后的CQCode转换为Element. +// 返回 interface{} 存在三种类型 +// message.IMessageElement []message.IMessageElement nil +func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m interface{}, err error) { switch t { case "text": return message.NewText(d["text"]), nil @@ -604,7 +618,7 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (m messag if err != nil { return nil, errors.New("send cardimage faild") } - return bot.SendNewPic(img, source, icon, minWidth, minHeight, maxWidth, maxHeight, group) + return bot.makeShowPic(img, source, icon, minWidth, minHeight, maxWidth, maxHeight, group) default: return nil, errors.New("unsupported cq code: " + t) } @@ -753,10 +767,10 @@ func (bot *CQBot) makeImageElem(d map[string]string, group bool) (message.IMessa return nil, errors.New("invalid image") } -//SendNewPic 一种xml 方式发送的群消息图片 -func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon string, minWidth int64, minHeight int64, maxWidth int64, maxHeight int64, group bool) (*message.ServiceElement, error) { - var xml string - xml = "" +//makeShowPic 一种xml 方式发送的群消息图片 +func (bot *CQBot) makeShowPic(elem message.IMessageElement, source string, icon string, minWidth int64, minHeight int64, maxWidth int64, maxHeight int64, group bool) ([]message.IMessageElement, error) { + xml := "" + var suf message.IMessageElement if i, ok := elem.(*message.ImageElement); ok { if group == false { gm, err := bot.Client.UploadPrivateImage(1, i.Data) @@ -764,27 +778,32 @@ func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon s log.Warnf("警告: 好友消息 %v 消息图片上传失败: %v", 1, err) return nil, err } + suf = gm xml = fmt.Sprintf(``, "", gm.Md5, gm.Md5, len(i.Data), "", minWidth, minHeight, maxWidth, maxHeight, source, icon) - } else { gm, err := bot.Client.UploadGroupImage(1, i.Data) if err != nil { log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err) return nil, err } + suf = gm xml = fmt.Sprintf(``, "", gm.Md5, gm.Md5, len(i.Data), "", minWidth, minHeight, maxWidth, maxHeight, source, icon) } } + if i, ok := elem.(*message.GroupImageElement); ok { xml = fmt.Sprintf(``, "", i.Md5, i.Md5, 0, "", minWidth, minHeight, maxWidth, maxHeight, source, icon) + suf = i } if i, ok := elem.(*message.FriendImageElement); ok { xml = fmt.Sprintf(``, "", i.Md5, i.Md5, 0, "", minWidth, minHeight, maxWidth, maxHeight, source, icon) + suf = i } if xml != "" { - log.Warn(xml) - XmlMsg := message.NewRichXml(xml, 5) - return XmlMsg, nil + //log.Warn(xml) + ret := []message.IMessageElement{suf} + ret = append(ret, message.NewRichXml(xml, 5)) + return ret, nil } - return nil, errors.New("发送xml图片消息失败") + return nil, errors.New("生成xml图片消息失败") }