diff --git a/README.md b/README.md index 98cb44fa..0540326b 100644 --- a/README.md +++ b/README.md @@ -340,11 +340,7 @@ print("run[CQ:image,file="+j["img"]+"]") - [x] 查询计算机当前活跃度: [检查身体 | 自检 | 启动自检 | 系统状态] - - [x] 清理缓存 (仅适用于 gocq 且需要 bot 的运行目录和 gocq 相同) - - - [ ] 简易语音 - - - [ ] 爬图合成 [@xxx] + - [x] 设置默认限速为每 m [分钟 | 秒] n 次触发
diff --git a/plugin/ai_false/ai_false.go b/plugin/ai_false/ai_false.go index 629ce8d7..e624cb7b 100644 --- a/plugin/ai_false/ai_false.go +++ b/plugin/ai_false/ai_false.go @@ -4,13 +4,15 @@ package aifalse import ( "fmt" "math" - "os" + "strconv" "time" control "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/disk" "github.com/shirou/gopsutil/v3/mem" + "github.com/sirupsen/logrus" zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" @@ -20,8 +22,20 @@ func init() { // 插件主体 engine := control.Register("aifalse", &control.Options{ DisableOnDefault: false, Help: "AIfalse\n" + - "- 查询计算机当前活跃度: [检查身体 | 自检 | 启动自检 | 系统状态]", + "- 查询计算机当前活跃度: [检查身体 | 自检 | 启动自检 | 系统状态]\n" + + "- 设置默认限速为每 m [分钟 | 秒] n 次触发", }) + c, ok := control.Lookup("aifalse") + if !ok { + panic("register aifalse error") + } + m := c.GetData(0) + n := (m >> 16) & 0xffff + m &= 0xffff + if m != 0 || n != 0 { + ctxext.SetDefaultLimiterManagerParam(time.Duration(m)*time.Second, int(n)) + logrus.Infoln("设置默认限速为每", m, "秒触发", n, "次") + } engine.OnFullMatchGroup([]string{"检查身体", "自检", "启动自检", "系统状态"}, zero.AdminPermission).SetBlock(true). Handle(func(ctx *zero.Ctx) { ctx.SendChain(message.Text( @@ -31,14 +45,37 @@ func init() { // 插件主体 ), ) }) - engine.OnFullMatch("清理缓存", zero.SuperUserPermission).SetBlock(true). + engine.OnRegex(`^设置默认限速为每\s*(\d+)\s*(分钟|秒)\s*(\d+)\s*次触发$`, zero.SuperUserPermission).SetBlock(true). Handle(func(ctx *zero.Ctx) { - err := os.RemoveAll("data/cache/*") - if err != nil { - ctx.SendChain(message.Text("错误: ", err.Error())) - } else { - ctx.SendChain(message.Text("成功!")) + c, ok := control.Lookup("aifalse") + if !ok { + ctx.SendChain(message.Text("ERROR:no such plugin")) + return } + m, err := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64) + if err != nil { + ctx.SendChain(message.Text("ERROR:", err)) + return + } + if ctx.State["regex_matched"].([]string)[2] == "分钟" { + m *= 60 + } + if m >= 65536 || m <= 0 { + ctx.SendChain(message.Text("ERROR:interval too big")) + return + } + n, err := strconv.ParseInt(ctx.State["regex_matched"].([]string)[3], 10, 64) + if err != nil { + ctx.SendChain(message.Text("ERROR:", err)) + return + } + if n >= 65536 || n <= 0 { + ctx.SendChain(message.Text("ERROR:burst too big")) + return + } + ctxext.SetDefaultLimiterManagerParam(time.Duration(m)*time.Second, int(n)) + c.SetData(0, (m&0xffff)|((n<<16)&0xffff0000)) + ctx.SendChain(message.Text("设置默认限速为每", m, "秒触发", n, "次")) }) }