feat(manager): add slow send (#985)

This commit is contained in:
源文雨
2024-10-01 16:11:37 +09:00
parent fbadd8924f
commit 817c4fab61
4 changed files with 45 additions and 2 deletions

View File

@@ -496,10 +496,10 @@ func init() { // 插件主体
var w welcome
err := db.Find("farewell", &w, "where gid = "+strconv.FormatInt(ctx.Event.GroupID, 10))
if err == nil {
ctx.SendGroupMessage(ctx.Event.GroupID, message.ParseMessageFromString(welcometocq(ctx, w.Msg)))
collectsend(ctx, message.ParseMessageFromString(welcometocq(ctx, w.Msg))...)
} else {
userid := ctx.Event.UserID
ctx.SendChain(message.Text(ctx.CardOrNickName(userid), "(", userid, ")", "离开了我们..."))
collectsend(ctx, message.Text(ctx.CardOrNickName(userid), "(", userid, ")", "离开了我们..."))
}
}
})

40
plugin/manager/slow.go Normal file
View File

@@ -0,0 +1,40 @@
package manager
import (
"time"
"github.com/FloatTech/zbputils/ctxext"
"github.com/RomiChan/syncx"
"github.com/fumiama/slowdo"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
)
var slowsenders = syncx.Map[int64, *syncx.Lazy[*slowdo.Job[message.MessageSegment, *zero.Ctx]]]{}
func collectsend(ctx *zero.Ctx, msgs ...message.MessageSegment) {
id := ctx.Event.GroupID
if id == 0 {
// only support group
return
}
lazy, _ := slowsenders.LoadOrStore(id, &syncx.Lazy[*slowdo.Job[message.MessageSegment, *zero.Ctx]]{
Init: func() *slowdo.Job[message.MessageSegment, *zero.Ctx] {
x, err := slowdo.NewJob(time.Second*5, ctx, func(ctx *zero.Ctx, msg []message.MessageSegment) {
m := make(message.Message, len(msg))
for i, item := range msg {
m[i] = ctxext.FakeSenderForwardNode(ctx, item)
}
ctx.SendGroupForwardMessage(id, m)
})
if err != nil {
panic(err)
}
return x
},
})
job := lazy.Get()
for _, msg := range msgs {
job.Add(msg)
}
}