mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2026-02-06 07:19:37 +00:00
feat(manager): add slow send (#985)
This commit is contained in:
@@ -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
40
plugin/manager/slow.go
Normal 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user