From ca16e4c2a7c08b60d96fddd3a6ead107f4e1e5d1 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Tue, 18 May 2021 15:28:44 +0800 Subject: [PATCH] fix: private reply message id updates: #261 --- coolq/api.go | 4 +-- coolq/bot.go | 4 +-- coolq/cqcode.go | 93 +++++++++++++++++-------------------------------- coolq/event.go | 14 ++++---- go.mod | 4 +-- go.sum | 5 ++- 6 files changed, 46 insertions(+), 78 deletions(-) diff --git a/coolq/api.go b/coolq/api.go index 0fcc271..5d7a4ac 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -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), }) } diff --git a/coolq/bot.go b/coolq/bot.go index 23ef87b..4eb7a79 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -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 { diff --git a/coolq/cqcode.go b/coolq/cqcode.go index bee6421..463e6f2 100644 --- a/coolq/cqcode.go +++ b/coolq/cqcode.go @@ -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 { diff --git a/coolq/event.go b/coolq/event.go index 76b1f44..2928262 100644 --- a/coolq/event.go +++ b/coolq/event.go @@ -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, diff --git a/go.mod b/go.mod index ca9aff4..3d27319 100644 --- a/go.mod +++ b/go.mod @@ -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 diff --git a/go.sum b/go.sum index 4d6f74e..07e8950 100644 --- a/go.sum +++ b/go.sum @@ -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=