1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-06 12:03:50 +08:00

fix: private reply message id

updates: #261
This commit is contained in:
wdvxdr 2021-05-18 15:28:44 +08:00
parent 9c323c6a4e
commit ca16e4c2a7
No known key found for this signature in database
GPG Key ID: 55FF1414A69CEBA6
6 changed files with 46 additions and 78 deletions

View File

@ -364,7 +364,7 @@ func (bot *CQBot) CQSendGroupMessage(groupID int64, i interface{}, autoEscape bo
if mid == -1 {
return Failed(100, "SEND_MSG_API_ERROR", "请参考输出")
}
log.Infof("发送群 %v(%v) 的消息: %v (%v)", group.Name, groupID, limitedString(ToStringMessage(elem, int64(mid))), mid)
log.Infof("发送群 %v(%v) 的消息: %v (%v)", group.Name, groupID, limitedString(ToStringMessage(elem, groupID)), mid)
return OK(MSG{"message_id": mid})
}
str = func() string {
@ -1119,7 +1119,7 @@ func (bot *CQBot) CQGetMessage(messageID int32) MSG {
if isGroup {
return gid.(int64)
}
return sender.Uin
return 0
}(), false),
})
}

View File

@ -384,7 +384,7 @@ func (bot *CQBot) InsertPrivateMessage(m *message.PrivateMessage) int32 {
"target": m.Target,
"sender": m.Sender,
"time": m.Time,
"message": ToStringMessage(m.Elements, m.Sender.Uin, true),
"message": ToStringMessage(m.Elements, 0, true),
}
id := toGlobalID(m.Sender.Uin, m.Id)
if bot.db != nil {
@ -412,7 +412,7 @@ func (bot *CQBot) InsertTempMessage(target int64, m *message.TempMessage) int32
"target": target,
"sender": m.Sender,
"time": int32(time.Now().Unix()),
"message": ToStringMessage(m.Elements, m.Sender.Uin, true),
"message": ToStringMessage(m.Elements, 0, true),
}
id := toGlobalID(m.Sender.Uin, m.Id)
if bot.db != nil {

View File

@ -114,12 +114,8 @@ func (e *PokeElement) Type() message.ElementType {
}
// ToArrayMessage 将消息元素数组转为MSG数组以用于消息上报
func ToArrayMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r []MSG) {
func ToArrayMessage(e []message.IMessageElement, groupID int64) (r []MSG) {
r = make([]MSG, 0, len(e))
ur := false
if len(isRaw) != 0 {
ur = isRaw[0]
}
m := &message.SendingMessage{Elements: e}
reply := m.FirstOrNil(func(e message.IMessageElement) bool {
_, ok := e.(*message.ReplyElement)
@ -127,21 +123,25 @@ func ToArrayMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r []M
})
if reply != nil {
replyElem := reply.(*message.ReplyElement)
rid := groupID
if rid == 0 {
rid = replyElem.Sender
}
if ExtraReplyData {
r = append(r, MSG{
"type": "reply",
"data": map[string]string{
"id": fmt.Sprint(toGlobalID(id, reply.(*message.ReplyElement).ReplySeq)),
"id": fmt.Sprint(toGlobalID(rid, replyElem.ReplySeq)),
"seq": strconv.FormatInt(int64(replyElem.ReplySeq), 10),
"qq": strconv.FormatInt(replyElem.Sender, 10),
"time": strconv.FormatInt(int64(replyElem.Time), 10),
"text": ToStringMessage(replyElem.Elements, id),
"text": ToStringMessage(replyElem.Elements, groupID),
},
})
} else {
r = append(r, MSG{
"type": "reply",
"data": map[string]string{"id": fmt.Sprint(toGlobalID(id, replyElem.ReplySeq))},
"data": map[string]string{"id": fmt.Sprint(toGlobalID(rid, replyElem.ReplySeq))},
})
}
}
@ -193,64 +193,29 @@ func ToArrayMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r []M
"data": map[string]string{"id": fmt.Sprint(o.Index)},
}
case *message.VoiceElement:
if ur {
m = MSG{
"type": "record",
"data": map[string]string{"file": o.Name},
}
} else {
m = MSG{
"type": "record",
"data": map[string]string{"file": o.Name, "url": o.Url},
}
m = MSG{
"type": "record",
"data": map[string]string{"file": o.Name, "url": o.Url},
}
case *message.ShortVideoElement:
if ur {
m = MSG{
"type": "video",
"data": map[string]string{"file": o.Name},
}
} else {
m = MSG{
"type": "video",
"data": map[string]string{"file": o.Name, "url": o.Url},
}
m = MSG{
"type": "video",
"data": map[string]string{"file": o.Name, "url": o.Url},
}
case *message.ImageElement:
if ur {
m = MSG{
"type": "image",
"data": map[string]string{"file": o.Filename},
}
} else {
m = MSG{
"type": "image",
"data": map[string]string{"file": o.Filename, "url": o.Url},
}
m = MSG{
"type": "image",
"data": map[string]string{"file": o.Filename, "url": o.Url},
}
case *message.GroupImageElement:
if ur {
m = MSG{
"type": "image",
"data": map[string]string{"file": hex.EncodeToString(o.Md5) + ".image"},
}
} else {
m = MSG{
"type": "image",
"data": map[string]string{"file": hex.EncodeToString(o.Md5) + ".image", "url": o.Url},
}
m = MSG{
"type": "image",
"data": map[string]string{"file": hex.EncodeToString(o.Md5) + ".image", "url": o.Url},
}
case *message.FriendImageElement:
if ur {
m = MSG{
"type": "image",
"data": map[string]string{"file": hex.EncodeToString(o.Md5) + ".image"},
}
} else {
m = MSG{
"type": "image",
"data": map[string]string{"file": hex.EncodeToString(o.Md5) + ".image", "url": o.Url},
}
m = MSG{
"type": "image",
"data": map[string]string{"file": hex.EncodeToString(o.Md5) + ".image", "url": o.Url},
}
case *message.GroupFlashImgElement:
return []MSG{{
@ -285,7 +250,7 @@ func ToArrayMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r []M
}
// ToStringMessage 将消息元素数组转为字符串以用于消息上报
func ToStringMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r string) {
func ToStringMessage(e []message.IMessageElement, groupID int64, isRaw ...bool) (r string) {
sb := global.NewBuffer()
sb.Reset()
write := func(format string, a ...interface{}) {
@ -303,13 +268,17 @@ func ToStringMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r st
})
if reply != nil {
replyElem := reply.(*message.ReplyElement)
rid := groupID
if rid == 0 {
rid = replyElem.Sender
}
if ExtraReplyData {
write("[CQ:reply,id=%d,seq=%d,qq=%d,time=%d,text=%s]",
toGlobalID(id, replyElem.ReplySeq),
toGlobalID(rid, replyElem.ReplySeq),
replyElem.ReplySeq, replyElem.Sender, replyElem.Time,
CQCodeEscapeValue(ToStringMessage(replyElem.Elements, id)))
CQCodeEscapeValue(ToStringMessage(replyElem.Elements, groupID)))
} else {
write("[CQ:reply,id=%d]", toGlobalID(id, replyElem.ReplySeq))
write("[CQ:reply,id=%d]", toGlobalID(rid, replyElem.ReplySeq))
}
}
for i, elem := range e {

View File

@ -24,18 +24,18 @@ func SetMessageFormat(f string) {
}
// ToFormattedMessage 将给定[]message.IMessageElement转换为通过coolq.SetMessageFormat所定义的消息上报格式
func ToFormattedMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r interface{}) {
func ToFormattedMessage(e []message.IMessageElement, groupID int64, isRaw ...bool) (r interface{}) {
if format == "string" {
r = ToStringMessage(e, id, isRaw...)
r = ToStringMessage(e, groupID, isRaw...)
} else if format == "array" {
r = ToArrayMessage(e, id, isRaw...)
r = ToArrayMessage(e, groupID)
}
return
}
func (bot *CQBot) privateMessageEvent(c *client.QQClient, m *message.PrivateMessage) {
bot.checkMedia(m.Elements)
cqm := ToStringMessage(m.Elements, m.Sender.Uin, true)
cqm := ToStringMessage(m.Elements, 0, true)
if !m.Sender.IsFriend {
bot.oneWayMsgCache.Store(m.Sender.Uin, "")
}
@ -51,7 +51,7 @@ func (bot *CQBot) privateMessageEvent(c *client.QQClient, m *message.PrivateMess
"message_id": id,
"user_id": m.Sender.Uin,
"target_id": m.Target,
"message": ToFormattedMessage(m.Elements, m.Sender.Uin, false),
"message": ToFormattedMessage(m.Elements, 0, false),
"raw_message": cqm,
"font": 0,
"self_id": c.Uin,
@ -106,7 +106,7 @@ func (bot *CQBot) groupMessageEvent(c *client.QQClient, m *message.GroupMessage)
func (bot *CQBot) tempMessageEvent(c *client.QQClient, e *client.TempMessageEvent) {
m := e.Message
bot.checkMedia(m.Elements)
cqm := ToStringMessage(m.Elements, m.Sender.Uin, true)
cqm := ToStringMessage(m.Elements, 0, true)
bot.tempSessionCache.Store(m.Sender.Uin, e.Session)
id := m.Id
if bot.db != nil {
@ -120,7 +120,7 @@ func (bot *CQBot) tempMessageEvent(c *client.QQClient, e *client.TempMessageEven
"temp_source": e.Session.Source,
"message_id": id,
"user_id": m.Sender.Uin,
"message": ToFormattedMessage(m.Elements, m.Sender.Uin, false),
"message": ToFormattedMessage(m.Elements, 0, false),
"raw_message": cqm,
"font": 0,
"self_id": c.Uin,

4
go.mod
View File

@ -4,7 +4,7 @@ go 1.16
require (
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f
github.com/Mrs4s/MiraiGo v0.0.0-20210503094755-b12e45fea93c
github.com/Mrs4s/MiraiGo v0.0.0-20210518070025-f145000ac0ef
github.com/dustin/go-humanize v1.0.0
github.com/gin-contrib/pprof v1.3.0
github.com/gin-gonic/gin v1.7.1
@ -19,7 +19,7 @@ require (
github.com/pkg/errors v0.9.1
github.com/sirupsen/logrus v1.8.1
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect
github.com/stretchr/testify v1.7.0 // indirect
github.com/stretchr/testify v1.7.0
github.com/syndtr/goleveldb v1.0.0
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816
github.com/tidwall/gjson v1.7.5

5
go.sum
View File

@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f h1:2dk3eOnYllh+wUOuDhOoC2vUVoJF/5z478ryJ+wzEII=
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f/go.mod h1:4a58ifQTEe2uwwsaqbh3i2un5/CBPg+At/qHpt18Tmk=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20210503094755-b12e45fea93c h1:6Nyn1XkDM7E3VOVg1yrWFEui7vm2SmGQbiY8WoJ+9U4=
github.com/Mrs4s/MiraiGo v0.0.0-20210503094755-b12e45fea93c/go.mod h1:NjiWhlvGxwv1ftOWIoiFa/OzklnAYI4YqNexFOKSZKw=
github.com/Mrs4s/MiraiGo v0.0.0-20210518070025-f145000ac0ef h1:lyLn7JgvEeV0mp2S3SGfDK2GgAdhxnBkpNwcCLoj9BY=
github.com/Mrs4s/MiraiGo v0.0.0-20210518070025-f145000ac0ef/go.mod h1:NjiWhlvGxwv1ftOWIoiFa/OzklnAYI4YqNexFOKSZKw=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@ -110,7 +110,6 @@ github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=