mirror of
https://github.com/Mrs4s/go-cqhttp.git
synced 2025-05-07 12:43:31 +08:00
fix
This commit is contained in:
parent
5024cc08a7
commit
24dad3d6f9
12
coolq/api.go
12
coolq/api.go
@ -119,7 +119,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo
|
|||||||
}
|
}
|
||||||
if m, ok := i.(gjson.Result); ok {
|
if m, ok := i.(gjson.Result); ok {
|
||||||
if m.Type == gjson.JSON {
|
if m.Type == gjson.JSON {
|
||||||
elem := bot.ConvertObjectMessage(m, true,groupId)
|
elem := bot.ConvertObjectMessage(m, true)
|
||||||
fixAt(elem)
|
fixAt(elem)
|
||||||
mid := bot.SendGroupMessage(groupId, &message.SendingMessage{Elements: elem})
|
mid := bot.SendGroupMessage(groupId, &message.SendingMessage{Elements: elem})
|
||||||
if mid == -1 {
|
if mid == -1 {
|
||||||
@ -144,7 +144,7 @@ func (bot *CQBot) CQSendGroupMessage(groupId int64, i interface{}, autoEscape bo
|
|||||||
if autoEscape {
|
if autoEscape {
|
||||||
elem = append(elem, message.NewText(str))
|
elem = append(elem, message.NewText(str))
|
||||||
} else {
|
} else {
|
||||||
elem = bot.ConvertStringMessage(str, true,groupId)
|
elem = bot.ConvertStringMessage(str, true)
|
||||||
}
|
}
|
||||||
fixAt(elem)
|
fixAt(elem)
|
||||||
mid := bot.SendGroupMessage(groupId, &message.SendingMessage{Elements: elem})
|
mid := bot.SendGroupMessage(groupId, &message.SendingMessage{Elements: elem})
|
||||||
@ -187,7 +187,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
|
|||||||
}
|
}
|
||||||
return m["time"].(int32)
|
return m["time"].(int32)
|
||||||
}(),
|
}(),
|
||||||
Message: bot.ConvertStringMessage(m["message"].(string), true,groupId),
|
Message: bot.ConvertStringMessage(m["message"].(string), true),
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -196,7 +196,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
|
|||||||
}
|
}
|
||||||
uin, _ := strconv.ParseInt(e.Get("data.uin").Str, 10, 64)
|
uin, _ := strconv.ParseInt(e.Get("data.uin").Str, 10, 64)
|
||||||
name := e.Get("data.name").Str
|
name := e.Get("data.name").Str
|
||||||
content := bot.ConvertObjectMessage(e.Get("data.content"), true,groupId)
|
content := bot.ConvertObjectMessage(e.Get("data.content"), true)
|
||||||
if uin != 0 && name != "" && len(content) > 0 {
|
if uin != 0 && name != "" && len(content) > 0 {
|
||||||
var newElem []message.IMessageElement
|
var newElem []message.IMessageElement
|
||||||
for _, elem := range content {
|
for _, elem := range content {
|
||||||
@ -242,7 +242,7 @@ func (bot *CQBot) CQSendPrivateMessage(userId int64, i interface{}, autoEscape b
|
|||||||
var str string
|
var str string
|
||||||
if m, ok := i.(gjson.Result); ok {
|
if m, ok := i.(gjson.Result); ok {
|
||||||
if m.Type == gjson.JSON {
|
if m.Type == gjson.JSON {
|
||||||
elem := bot.ConvertObjectMessage(m, true,userId)
|
elem := bot.ConvertObjectMessage(m, true)
|
||||||
mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem})
|
mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem})
|
||||||
if mid == -1 {
|
if mid == -1 {
|
||||||
return Failed(100)
|
return Failed(100)
|
||||||
@ -265,7 +265,7 @@ func (bot *CQBot) CQSendPrivateMessage(userId int64, i interface{}, autoEscape b
|
|||||||
if autoEscape {
|
if autoEscape {
|
||||||
elem = append(elem, message.NewText(str))
|
elem = append(elem, message.NewText(str))
|
||||||
} else {
|
} else {
|
||||||
elem = bot.ConvertStringMessage(str, false,userId)
|
elem = bot.ConvertStringMessage(str, false)
|
||||||
}
|
}
|
||||||
mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem})
|
mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem})
|
||||||
if mid == -1 {
|
if mid == -1 {
|
||||||
|
@ -259,4 +259,3 @@ func (m MSG) ToJson() string {
|
|||||||
b, _ := json.Marshal(m)
|
b, _ := json.Marshal(m)
|
||||||
return string(b)
|
return string(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,11 @@ import (
|
|||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/Mrs4s/MiraiGo/binary"
|
||||||
|
"github.com/Mrs4s/MiraiGo/message"
|
||||||
|
"github.com/Mrs4s/go-cqhttp/global"
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
"github.com/tidwall/gjson"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/url"
|
"net/url"
|
||||||
"path"
|
"path"
|
||||||
@ -13,12 +18,6 @@ import (
|
|||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Mrs4s/MiraiGo/binary"
|
|
||||||
"github.com/Mrs4s/MiraiGo/message"
|
|
||||||
"github.com/Mrs4s/go-cqhttp/global"
|
|
||||||
log "github.com/sirupsen/logrus"
|
|
||||||
"github.com/tidwall/gjson"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var matchReg = regexp.MustCompile(`\[CQ:\w+?.*?]`)
|
var matchReg = regexp.MustCompile(`\[CQ:\w+?.*?]`)
|
||||||
@ -173,7 +172,7 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bot *CQBot) ConvertStringMessage(m string, group bool, uid int64) (r []message.IMessageElement) {
|
func (bot *CQBot) ConvertStringMessage(m string, group bool) (r []message.IMessageElement) {
|
||||||
i := matchReg.FindAllStringSubmatchIndex(m, -1)
|
i := matchReg.FindAllStringSubmatchIndex(m, -1)
|
||||||
si := 0
|
si := 0
|
||||||
for _, idx := range i {
|
for _, idx := range i {
|
||||||
@ -205,14 +204,14 @@ func (bot *CQBot) ConvertStringMessage(m string, group bool, uid int64) (r []mes
|
|||||||
ReplySeq: org["message-id"].(int32),
|
ReplySeq: org["message-id"].(int32),
|
||||||
Sender: org["sender"].(message.Sender).Uin,
|
Sender: org["sender"].(message.Sender).Uin,
|
||||||
Time: org["time"].(int32),
|
Time: org["time"].(int32),
|
||||||
Elements: bot.ConvertStringMessage(org["message"].(string), group, uid),
|
Elements: bot.ConvertStringMessage(org["message"].(string), group),
|
||||||
},
|
},
|
||||||
}, r...)
|
}, r...)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elem, err := bot.ToElement(t, d, group, uid)
|
elem, err := bot.ToElement(t, d, group)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !IgnoreInvalidCQCode {
|
if !IgnoreInvalidCQCode {
|
||||||
log.Warnf("转换CQ码 %v 到MiraiGo Element时出现错误: %v 将原样发送.", code, err)
|
log.Warnf("转换CQ码 %v 到MiraiGo Element时出现错误: %v 将原样发送.", code, err)
|
||||||
@ -230,7 +229,7 @@ func (bot *CQBot) ConvertStringMessage(m string, group bool, uid int64) (r []mes
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool, uid int64) (r []message.IMessageElement) {
|
func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.IMessageElement) {
|
||||||
convertElem := func(e gjson.Result) {
|
convertElem := func(e gjson.Result) {
|
||||||
t := e.Get("type").Str
|
t := e.Get("type").Str
|
||||||
if t == "reply" && group {
|
if t == "reply" && group {
|
||||||
@ -249,7 +248,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool, uid int64) (r
|
|||||||
ReplySeq: org["message-id"].(int32),
|
ReplySeq: org["message-id"].(int32),
|
||||||
Sender: org["sender"].(message.Sender).Uin,
|
Sender: org["sender"].(message.Sender).Uin,
|
||||||
Time: org["time"].(int32),
|
Time: org["time"].(int32),
|
||||||
Elements: bot.ConvertStringMessage(org["message"].(string), group, uid),
|
Elements: bot.ConvertStringMessage(org["message"].(string), group),
|
||||||
},
|
},
|
||||||
}, r...)
|
}, r...)
|
||||||
return
|
return
|
||||||
@ -261,7 +260,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool, uid int64) (r
|
|||||||
d[key.Str] = value.Str
|
d[key.Str] = value.Str
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
elem, err := bot.ToElement(t, d, group, uid)
|
elem, err := bot.ToElement(t, d, group)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("转换CQ码到MiraiGo Element时出现错误: %v 将忽略本段CQ码.", err)
|
log.Warnf("转换CQ码到MiraiGo Element时出现错误: %v 将忽略本段CQ码.", err)
|
||||||
return
|
return
|
||||||
@ -269,7 +268,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool, uid int64) (r
|
|||||||
r = append(r, elem)
|
r = append(r, elem)
|
||||||
}
|
}
|
||||||
if m.Type == gjson.String {
|
if m.Type == gjson.String {
|
||||||
return bot.ConvertStringMessage(m.Str, group, uid)
|
return bot.ConvertStringMessage(m.Str, group)
|
||||||
}
|
}
|
||||||
if m.IsArray() {
|
if m.IsArray() {
|
||||||
for _, e := range m.Array() {
|
for _, e := range m.Array() {
|
||||||
@ -282,12 +281,12 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool, uid int64) (r
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bot *CQBot) ToElement(t string, d map[string]string, group bool, uid int64) (message.IMessageElement, error) {
|
func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.IMessageElement, error) {
|
||||||
switch t {
|
switch t {
|
||||||
case "text":
|
case "text":
|
||||||
return message.NewText(d["text"]), nil
|
return message.NewText(d["text"]), nil
|
||||||
case "image":
|
case "image":
|
||||||
return bot.makeImageElem(t, d, group, uid)
|
return bot.makeImageElem(t, d, group)
|
||||||
case "record":
|
case "record":
|
||||||
if !group {
|
if !group {
|
||||||
return nil, errors.New("private voice unsupported now")
|
return nil, errors.New("private voice unsupported now")
|
||||||
@ -428,8 +427,27 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool, uid int64
|
|||||||
case "cardimage":
|
case "cardimage":
|
||||||
source := d["source"]
|
source := d["source"]
|
||||||
icon := d["icon"]
|
icon := d["icon"]
|
||||||
img, _ := bot.makeImageElem(t, d, group, uid)
|
minwidth, _ := strconv.ParseInt(d["minwidth"], 10, 64)
|
||||||
return bot.SendNewPic(uid, img, source, icon, group)
|
if minwidth == 0 {
|
||||||
|
minwidth = 400
|
||||||
|
}
|
||||||
|
minheight, _ := strconv.ParseInt(d["minheight"], 10, 64)
|
||||||
|
if minheight == 0 {
|
||||||
|
minheight = 400
|
||||||
|
}
|
||||||
|
maxwidth, _ := strconv.ParseInt(d["maxwidth"], 10, 64)
|
||||||
|
if maxwidth == 0 {
|
||||||
|
maxwidth = 500
|
||||||
|
}
|
||||||
|
maxheight, _ := strconv.ParseInt(d["maxheight"], 10, 64)
|
||||||
|
if maxheight == 0 {
|
||||||
|
maxheight = 1000
|
||||||
|
}
|
||||||
|
img, err := bot.makeImageElem(t, d, group)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.New("send cardimage faild")
|
||||||
|
}
|
||||||
|
return bot.SendNewPic(img, source, icon, minwidth, minheight, maxwidth, maxheight, group)
|
||||||
default:
|
default:
|
||||||
return nil, errors.New("unsupported cq code: " + t)
|
return nil, errors.New("unsupported cq code: " + t)
|
||||||
}
|
}
|
||||||
@ -464,7 +482,7 @@ func CQCodeUnescapeValue(content string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 图片 elem 生成器,单独拎出来,用于公用
|
// 图片 elem 生成器,单独拎出来,用于公用
|
||||||
func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid int64) (message.IMessageElement, error) {
|
func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool) (message.IMessageElement, error) {
|
||||||
f := d["file"]
|
f := d["file"]
|
||||||
if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") {
|
if strings.HasPrefix(f, "http") || strings.HasPrefix(f, "https") {
|
||||||
cache := d["cache"]
|
cache := d["cache"]
|
||||||
@ -512,7 +530,7 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid i
|
|||||||
rawPath += ".cqimg"
|
rawPath += ".cqimg"
|
||||||
}
|
}
|
||||||
if !global.PathExists(rawPath) && d["url"] != "" {
|
if !global.PathExists(rawPath) && d["url"] != "" {
|
||||||
return bot.ToElement(t, map[string]string{"file": d["url"]}, group, uid)
|
return bot.ToElement(t, map[string]string{"file": d["url"]}, group)
|
||||||
}
|
}
|
||||||
if global.PathExists(rawPath) {
|
if global.PathExists(rawPath) {
|
||||||
b, err := ioutil.ReadFile(rawPath)
|
b, err := ioutil.ReadFile(rawPath)
|
||||||
@ -548,7 +566,7 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid i
|
|||||||
}
|
}
|
||||||
if size == 0 {
|
if size == 0 {
|
||||||
if url != "" {
|
if url != "" {
|
||||||
return bot.ToElement(t, map[string]string{"file": url}, group, uid)
|
return bot.ToElement(t, map[string]string{"file": url}, group)
|
||||||
}
|
}
|
||||||
return nil, errors.New("img size is 0")
|
return nil, errors.New("img size is 0")
|
||||||
}
|
}
|
||||||
@ -559,7 +577,7 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid i
|
|||||||
rsp, err := bot.Client.QueryGroupImage(1, hash, size)
|
rsp, err := bot.Client.QueryGroupImage(1, hash, size)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if url != "" {
|
if url != "" {
|
||||||
return bot.ToElement(t, map[string]string{"file": url}, group, uid)
|
return bot.ToElement(t, map[string]string{"file": url}, group)
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -568,7 +586,7 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid i
|
|||||||
rsp, err := bot.Client.QueryFriendImage(1, hash, size)
|
rsp, err := bot.Client.QueryFriendImage(1, hash, size)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if url != "" {
|
if url != "" {
|
||||||
return bot.ToElement(t, map[string]string{"file": url}, group, uid)
|
return bot.ToElement(t, map[string]string{"file": url}, group)
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -578,26 +596,32 @@ func (bot *CQBot) makeImageElem(t string, d map[string]string, group bool, uid i
|
|||||||
}
|
}
|
||||||
|
|
||||||
//SendNewPic 一种xml 方式发送的群消息图片
|
//SendNewPic 一种xml 方式发送的群消息图片
|
||||||
func (bot *CQBot) SendNewPic(id int64, i message.ImageElement, source string, icon string, group bool) (*message.ServiceElement, error) {
|
func (bot *CQBot) SendNewPic(elem message.IMessageElement, source string, icon string, minwidth int64, minheigt int64, maxwidth int64, maxheight int64, group bool) (*message.ServiceElement, error) {
|
||||||
var xml string
|
var xml string
|
||||||
|
xml = ""
|
||||||
|
if i, ok := elem.(*message.ImageElement); ok {
|
||||||
if group == false {
|
if group == false {
|
||||||
gm, err := bot.Client.UploadPrivateImage(id, i.Data)
|
gm, err := bot.Client.UploadPrivateImage(1, i.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("警告: 群 %v 消息图片上传失败: %v", id, err)
|
log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
xml = fmt.Sprintf(`<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><msg serviceID="5" templateID="1" action="" brief="[分享]我看到一张很赞的图片,分享给你,快来看!" sourceMsgId="0" url="%s" flag="2" adverSign="0" multiMsgFlag="0"><item layout="0"><image uuid="%d" md5="%x" GroupFiledid="0" filesize="%d" local_path="%s" minWidth="400" minHeight="400" maxWidth="500" maxHeight="1000" /></item><source name="%s" icon="%s" action="" appid="-1" /></msg>`, "", gm.ImageId, gm.Md5, i.Size, "", source, icon)
|
xml = fmt.Sprintf(`<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><msg serviceID="5" templateID="1" action="" brief="[分享]我看到一张很赞的图片,分享给你,快来看!" sourceMsgId="0" url="%s" flag="2" adverSign="0" multiMsgFlag="0"><item layout="0"><image uuid="%d" md5="%x" GroupFiledid="0" filesize="%d" local_path="%s" minWidth="%d" minHeight="%d" maxWidth="%d" maxHeight="%d" /></item><source name="%s" icon="%s" action="" appid="-1" /></msg>`, "", gm.ImageId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
gm, err := bot.Client.UploadGroupImage(id, i.Data)
|
log.Warnf(" img %d", i.Size)
|
||||||
|
gm, err := bot.Client.UploadGroupImage(1, i.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("警告: 群 %v 消息图片上传失败: %v", id, err)
|
log.Warnf("警告: 群 %v 消息图片上传失败: %v", 1, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
xml = fmt.Sprintf(`<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><msg serviceID="5" templateID="1" action="" brief="[分享]我看到一张很赞的图片,分享给你,快来看!" sourceMsgId="0" url="%s" flag="2" adverSign="0" multiMsgFlag="0"><item layout="0"><image uuid="%d" md5="%x" GroupFiledid="0" filesize="%d" local_path="%s" minWidth="400" minHeight="400" maxWidth="500" maxHeight="1000" /></item><source name="%s" icon="%s" action="" appid="-1" /></msg>`, "", gm.FileId, gm.Md5, i.Size, "", source, icon)
|
xml = fmt.Sprintf(`<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><msg serviceID="5" templateID="1" action="" brief="[分享]我看到一张很赞的图片,分享给你,快来看!" sourceMsgId="0" url="%s" flag="2" adverSign="0" multiMsgFlag="0"><item layout="0"><image uuid="%d" md5="%x" GroupFiledid="0" filesize="%d" local_path="%s" minWidth="%d" minHeight="%d" maxWidth="%d" maxHeight="%d" /></item><source name="%s" icon="%s" action="" appid="-1" /></msg>`, "", gm.FileId, gm.Md5, len(i.Data), "", minwidth, minheigt, maxwidth, maxheight, source, icon)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if xml != "" {
|
||||||
log.Warn(xml)
|
log.Warn(xml)
|
||||||
XmlMsg := message.NewRichXml(xml, 5)
|
XmlMsg := message.NewRichXml(xml, 5)
|
||||||
return XmlMsg, nil
|
return XmlMsg, nil
|
||||||
|
}
|
||||||
return nil, errors.New("发送xml图片消息失败")
|
return nil, errors.New("发送xml图片消息失败")
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user