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

coolq: refactor send forward message

This commit is contained in:
wdvxdr 2022-03-21 21:41:29 +08:00
parent 062eea62ab
commit 112441d76e
No known key found for this signature in database
GPG Key ID: 703F8C071DE7A1B6
3 changed files with 110 additions and 106 deletions

View File

@ -789,9 +789,12 @@ func (bot *CQBot) CQSendGuildChannelMessage(guildID, channelID uint64, m gjson.R
func (bot *CQBot) uploadForwardElement(m gjson.Result, groupID int64) *message.ForwardElement {
ts := time.Now().Add(-time.Minute * 5)
fm := message.NewForwardMessage()
source := message.Source{SourceType: message.SourceGroup, PrimaryID: groupID}
builder := bot.Client.NewForwardMessageBuilder(groupID)
var convertMessage func(m gjson.Result) *message.ForwardMessage
convertMessage = func(m gjson.Result) *message.ForwardMessage {
fm := message.NewForwardMessage()
var w worker
resolveElement := func(elems []message.IMessageElement) []message.IMessageElement {
for i, elem := range elems {
@ -824,21 +827,18 @@ func (bot *CQBot) uploadForwardElement(m gjson.Result, groupID int64) *message.F
if e.Get("type").Str != "node" {
return nil
}
ts.Add(time.Second)
if e.Get("data.id").Exists() {
i := e.Get("data.id").Int()
m, _ := db.GetGroupMessageByGlobalID(int32(i))
if m != nil {
msgTime := m.Attribute.Timestamp
if msgTime == 0 {
msgTime = ts.Unix()
}
return &message.ForwardNode{
SenderId: m.Attribute.SenderUin,
SenderName: m.Attribute.SenderName,
Time: func() int32 {
msgTime := m.Attribute.Timestamp
if msgTime == 0 {
return int32(ts.Unix())
}
return int32(msgTime)
}(),
Time: int32(msgTime),
Message: resolveElement(bot.ConvertContentMessage(m.Content, message.SourceGroup)),
}
}
@ -862,12 +862,13 @@ func (bot *CQBot) uploadForwardElement(m gjson.Result, groupID int64) *message.F
return true
})
if nested { // 处理嵌套
fe := bot.uploadForwardElement(c, groupID)
nestedNode := builder.NestedNode()
builder.Link(nestedNode, convertMessage(c))
return &message.ForwardNode{
SenderId: uin,
SenderName: name,
Time: int32(msgTime),
Message: []message.IMessageElement{fe},
Message: []message.IMessageElement{nestedNode},
}
}
}
@ -897,8 +898,11 @@ func (bot *CQBot) uploadForwardElement(m gjson.Result, groupID int64) *message.F
fm.AddNode(node)
}
}
w.wait()
return bot.Client.UploadGroupForwardMessage(groupID, fm)
return fm
}
return builder.Main(convertMessage(m))
}
// CQSendGroupForwardMessage 扩展API-发送合并转发(群)
@ -912,7 +916,9 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupID int64, m gjson.Result) globa
}
fe := bot.uploadForwardElement(m, groupID)
if fe != nil {
if fe == nil {
return Failed(100, "EMPTY_NODES", "未找到任何可发送的合并转发信息")
}
ret := bot.Client.SendGroupForwardMessage(groupID, fe)
if ret == nil || ret.Id == -1 {
log.Warnf("合并转发(群)消息发送失败: 账号可能被风控.")
@ -921,8 +927,6 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupID int64, m gjson.Result) globa
return OK(global.MSG{
"message_id": bot.InsertGroupMessage(ret),
})
}
return Failed(100, "EMPTY_NODES", "未找到任何可发送的合并转发信息")
}
// CQSendPrivateMessage 发送私聊消息

4
go.mod
View File

@ -4,8 +4,8 @@ go 1.18
require (
github.com/Microsoft/go-winio v0.5.1
github.com/Mrs4s/MiraiGo v0.0.0-20220320070754-38990f6e1cf9
github.com/RomiChan/syncx v0.0.0-20220320065321-8d448f958257
github.com/Mrs4s/MiraiGo v0.0.0-20220321133915-aa657c0f09d0
github.com/RomiChan/syncx v0.0.0-20220320130821-c88644afda9c
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc
github.com/fumiama/go-hide-param v0.1.4
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible

8
go.sum
View File

@ -1,11 +1,11 @@
github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY=
github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Mrs4s/MiraiGo v0.0.0-20220320070754-38990f6e1cf9 h1:YJeHJRNVfpbuC7wSQD3WOcysC7AcILgQf5d8kFPL12Y=
github.com/Mrs4s/MiraiGo v0.0.0-20220320070754-38990f6e1cf9/go.mod h1:qseuVVwl5wxdhphaS29F6CN0gV2J0ojT880Ql5g2MBo=
github.com/Mrs4s/MiraiGo v0.0.0-20220321133915-aa657c0f09d0 h1:RsFAUylRh9T4zIx4iVe8KTbG/XtI/uHw2qhhQfoCetE=
github.com/Mrs4s/MiraiGo v0.0.0-20220321133915-aa657c0f09d0/go.mod h1:APw03y3A3Qp5In9gI/S9m7DBJkWsd6FQMV+fB636bmU=
github.com/RomiChan/protobuf v0.0.0-20220318113238-d8a99598f896 h1:UFAqSbH6VqW5mEzQV2HVB7+p3k9JfTbidWJ/9F15yz0=
github.com/RomiChan/protobuf v0.0.0-20220318113238-d8a99598f896/go.mod h1:CKKOWC7mBxd36zxsCB1V8DTrwlTNRQvkSVbYqyUiGEE=
github.com/RomiChan/syncx v0.0.0-20220320065321-8d448f958257 h1:fdMod+DEoiICoTtS1Wij/wl1d57FPvKVmretLi2sGD8=
github.com/RomiChan/syncx v0.0.0-20220320065321-8d448f958257/go.mod h1:KqZzu7slNKROh3TSYEH/IUMG6f4M+1qubZ5e52QypsE=
github.com/RomiChan/syncx v0.0.0-20220320130821-c88644afda9c h1:zHWyqx7A71A/+mlzthPVcVrNGuTPyTpCW3meUPtaULU=
github.com/RomiChan/syncx v0.0.0-20220320130821-c88644afda9c/go.mod h1:KqZzu7slNKROh3TSYEH/IUMG6f4M+1qubZ5e52QypsE=
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc h1:AAx50/fb/xS4lvsdQg+bFbGvqSDhyV1MF+p2PLCamZ0=
github.com/RomiChan/websocket v1.4.3-0.20220123145318-307a86b127bc/go.mod h1:OMmITAib6POA37xCichWM0aRnoVpSMZO1rB/G01wrr0=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=