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图片消息失败")
}