From a16bcda7dadb87085e3c0dc580a96451d07a3b42 Mon Sep 17 00:00:00 2001 From: fumiama Date: Tue, 8 Feb 2022 14:46:35 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20=F0=9F=94=A5=20=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E9=99=90=E9=80=9F=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 6 ++-- go.sum | 12 +++---- plugin_acgimage/classify.go | 15 +++----- plugin_ai_reply/main.go | 11 ++---- plugin_ai_reply/tts.go | 17 ++++----- plugin_coser/coser.go | 11 ++---- plugin_curse/curse.go | 15 ++------ plugin_fortune/fortune.go | 2 +- plugin_funny/laugh.go | 10 ++---- plugin_image_finder/keyword.go | 2 +- plugin_juejuezi/juejuezi.go | 12 ++----- plugin_lolicon/lolicon.go | 2 +- plugin_manager/manager.go | 8 +---- plugin_music/selecter.go | 10 ++---- plugin_novel/qianbi.go | 10 ++---- plugin_runcode/code_runner.go | 63 +++++++++++++++------------------ plugin_saucenao/searcher.go | 2 +- plugin_setutime/setu_geter.go | 10 ++---- plugin_shadiao/caihongpi.go | 6 ++-- plugin_shadiao/dujitang.go | 6 ++-- plugin_shadiao/pengyouquan.go | 6 ++-- plugin_shadiao/shadiao.go | 4 --- plugin_shadiao/sweetnothings.go | 11 ++---- plugin_shadiao/yduanzi.go | 6 ++-- plugin_shindan/shindan.go | 20 +++-------- plugin_translation/tl.go | 13 ++----- plugin_wangyiyun/main.go | 10 ++---- plugin_wtf/main.go | 14 ++------ 28 files changed, 92 insertions(+), 222 deletions(-) diff --git a/go.mod b/go.mod index fa1ff891..e318aa3a 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,8 @@ module github.com/FloatTech/ZeroBot-Plugin go 1.17 require ( - github.com/FloatTech/AnimeAPI v1.2.5-beta10 - github.com/FloatTech/zbputils v1.2.5-beta7 + github.com/FloatTech/AnimeAPI v1.2.5-beta14 + github.com/FloatTech/zbputils v1.2.5-beta12 github.com/antchfx/htmlquery v1.2.4 github.com/corona10/goimagehash v1.0.3 github.com/fogleman/gg v1.3.0 @@ -19,7 +19,7 @@ require ( github.com/shirou/gopsutil/v3 v3.21.12 github.com/sirupsen/logrus v1.8.1 github.com/tidwall/gjson v1.13.0 - github.com/wdvxdr1123/ZeroBot v1.4.2-0.20220207114459-068919ac2b02 + github.com/wdvxdr1123/ZeroBot v1.4.2-0.20220208041536-d463c1c92bb4 golang.org/x/image v0.0.0-20211028202545-6944b10bf410 ) diff --git a/go.sum b/go.sum index 96545ae8..523f8f45 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,8 @@ -github.com/FloatTech/AnimeAPI v1.2.5-beta10 h1:C4gvZ4VbVjNUA8WBgNnq0ra0YG1uNyL8VmHGFdpZ1Tc= -github.com/FloatTech/AnimeAPI v1.2.5-beta10/go.mod h1:QXGkLikmx2G4nVL24RwLdfcA8Hd54SdfCqVqu/Znd5A= +github.com/FloatTech/AnimeAPI v1.2.5-beta14 h1:CyP0YTrSkXgOAmunr9s5TpVoZxhc5Nrz6tkKv+avUNk= +github.com/FloatTech/AnimeAPI v1.2.5-beta14/go.mod h1:jsUR1c9voZPgBZybMEZl+LpnOtKZFhN9NZKMvHjbT6M= github.com/FloatTech/bot-manager v1.0.0/go.mod h1:8YYRJ16oroGHQGD2En0oVnmcKJkxR9O/jd5BPSfWfOQ= -github.com/FloatTech/zbputils v1.2.5-beta7 h1:5mgJaYa8fTx/PQp+oL13pJGQ6GEjkUDg1r1T2ECAiac= -github.com/FloatTech/zbputils v1.2.5-beta7/go.mod h1:3XY4b7OJuQD2zUOaBc1EzDdpXvx3YM4FvpUKZNwgreA= +github.com/FloatTech/zbputils v1.2.5-beta12 h1:+MtcwLP5/IaLAX3dMOzHFbv5cNBLlb5BRk2LNFAfEF0= +github.com/FloatTech/zbputils v1.2.5-beta12/go.mod h1:1j71Sna0RnprP3ywDNTblRzITNYCb2FGN2yxl1G4zg0= github.com/Mrs4s/MiraiGo v0.0.0-20211120033824-43b23f4e6fcb h1:Rkj28fqIwGx/EgBzRYtpmJRfH6wqVn7cNdc7aJ0QE4M= github.com/Mrs4s/MiraiGo v0.0.0-20211120033824-43b23f4e6fcb/go.mod h1:imVKbfKqqeit+C/eaWGb4MKQ3z3gN6pRpBU5RMtp5so= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= @@ -166,8 +166,8 @@ github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLY github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= github.com/wdvxdr1123/ZeroBot v1.3.2/go.mod h1:i2DIqQjtjE+3gvVi9r9sc+QpNaUuyTXx/HNXXayIpwI= github.com/wdvxdr1123/ZeroBot v1.4.1/go.mod h1:7t9m4vDZPwWAmzKlhP6IvUoisOIiqNdm/3AJgiY3+ew= -github.com/wdvxdr1123/ZeroBot v1.4.2-0.20220207114459-068919ac2b02 h1:Tm5gEjJpm0M2sY6RegimsrRekqNBD26qZjYwTx5Gt6s= -github.com/wdvxdr1123/ZeroBot v1.4.2-0.20220207114459-068919ac2b02/go.mod h1:NwXIp7PgjV+kUALMXJ4v4/3QcsRSOodtjhLekuPXFog= +github.com/wdvxdr1123/ZeroBot v1.4.2-0.20220208041536-d463c1c92bb4 h1:T/m7vDUFKdLd0xfSZHVPQGaRZ73nwPzidLW7hTn25mg= +github.com/wdvxdr1123/ZeroBot v1.4.2-0.20220208041536-d463c1c92bb4/go.mod h1:NwXIp7PgjV+kUALMXJ4v4/3QcsRSOodtjhLekuPXFog= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= diff --git a/plugin_acgimage/classify.go b/plugin_acgimage/classify.go index b94526f8..8de0e8ee 100644 --- a/plugin_acgimage/classify.go +++ b/plugin_acgimage/classify.go @@ -4,15 +4,13 @@ package acgimage import ( "net/url" "strings" - "time" "github.com/FloatTech/AnimeAPI/classify" - "github.com/FloatTech/AnimeAPI/imgpool" control "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/ctxext" + "github.com/FloatTech/zbputils/imgpool" "github.com/FloatTech/zbputils/web" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" "github.com/FloatTech/ZeroBot-Plugin/order" @@ -29,7 +27,6 @@ var ( randapi = "&loli=true&r18=true" msgof = make(map[int64]message.MessageID) block = false - limit = rate.NewManager(time.Minute, 5) ) func init() { // 插件主体 @@ -53,14 +50,10 @@ func init() { // 插件主体 } }) // 有保护的随机图片 - engine.OnFullMatch("随机图片", zero.OnlyGroup).SetBlock(true). + engine.OnFullMatch("随机图片", zero.OnlyGroup).Limit(ctxext.LimitByUser).SetBlock(true). Handle(func(ctx *zero.Ctx) { - if limit.Load(ctx.Event.UserID).Acquire() { - class, dhash, comment, _ := classify.Classify(randapi, true) - replyClass(ctx, class, dhash, comment, false) - return - } - ctx.SendChain(message.Text("你太快啦!")) + class, dhash, comment, _ := classify.Classify(randapi, true) + replyClass(ctx, class, dhash, comment, false) }) // 直接随机图片,无r18保护,后果自负。如果出r18图可尽快通过发送"太涩了"撤回 engine.OnFullMatch("直接随机", ctxext.UserOrGrpAdmin).SetBlock(true). diff --git a/plugin_ai_reply/main.go b/plugin_ai_reply/main.go index 320ad6c0..2926db58 100644 --- a/plugin_ai_reply/main.go +++ b/plugin_ai_reply/main.go @@ -7,8 +7,8 @@ import ( "github.com/FloatTech/AnimeAPI/aireply" control "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" "github.com/FloatTech/ZeroBot-Plugin/order" @@ -21,21 +21,16 @@ const ( var modes = [...]string{"青云客", "小爱"} func init() { // 插件主体 - bucket := rate.NewManager(time.Minute, 20) // 接口回复限速器 engine := control.Register(serviceName, order.PrioAIReply, &control.Options{ DisableOnDefault: false, Help: "人工智能回复\n" + "- @Bot 任意文本(任意一句话回复)\n- 设置回复模式[青云客 | 小爱]\n- ", }) // 回复 @和包括名字 - engine.OnMessage(zero.OnlyToMe).SetBlock(true). + engine.OnMessage(zero.OnlyToMe).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { aireply := aireply.NewAIReply(getReplyMode(ctx)) - if !bucket.Load(ctx.Event.UserID).Acquire() { - // 频繁触发,不回复 - return - } - reply := aireply.Talk(ctx.ExtractPlainText()) + reply := message.ParseMessageFromString(aireply.Talk(ctx.ExtractPlainText(), zero.BotConfig.NickName[0])) // 回复 time.Sleep(time.Second * 1) if zero.OnlyPublic(ctx) { diff --git a/plugin_ai_reply/tts.go b/plugin_ai_reply/tts.go index fae57ef4..0ef81ee8 100644 --- a/plugin_ai_reply/tts.go +++ b/plugin_ai_reply/tts.go @@ -1,32 +1,27 @@ package aireply import ( - "time" - zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" + "github.com/wdvxdr1123/ZeroBot/message" "github.com/FloatTech/AnimeAPI/aireply" "github.com/FloatTech/AnimeAPI/mockingbird" control "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/ZeroBot-Plugin/order" ) func init() { - limit := rate.NewManager(time.Second*10, 1) - control.Register("mockingbird", order.PrioMockingBird, &control.Options{ DisableOnDefault: false, Help: "拟声鸟\n- @Bot 任意文本(任意一句话回复)", - }).OnMessage(zero.OnlyToMe, func(ctx *zero.Ctx) bool { - return limit.Load(ctx.Event.UserID).Acquire() - }).SetBlock(true). + }).OnMessage(zero.OnlyToMe).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { msg := ctx.ExtractPlainText() r := aireply.NewAIReply(getReplyMode(ctx)) - ctx.SendChain(mockingbird.Speak(ctx.Event.UserID, func() string { - return r.TalkPlain(msg) - })) + ctx.SendChain(message.Record(mockingbird.Speak(ctx.Event.UserID, func() string { + return r.TalkPlain(msg, zero.BotConfig.NickName[0]) + }))) }) } diff --git a/plugin_coser/coser.go b/plugin_coser/coser.go index c5c88f14..44be63bc 100644 --- a/plugin_coser/coser.go +++ b/plugin_coser/coser.go @@ -2,17 +2,15 @@ package coser import ( - "time" - "github.com/tidwall/gjson" log "github.com/sirupsen/logrus" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" control "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/web" "github.com/FloatTech/ZeroBot-Plugin/order" @@ -21,19 +19,14 @@ import ( var ( ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36" coserURL = "http://ovooa.com/API/cosplay/api.php" - limit = rate.NewManager(time.Minute, 5) ) func init() { control.Register("coser", order.PrioCoser, &control.Options{ DisableOnDefault: false, Help: "三次元小姐姐\n- coser", - }).OnFullMatch("coser", zero.OnlyGroup).SetBlock(true). + }).OnFullMatch("coser", zero.OnlyGroup).SetBlock(true).Limit(ctxext.LimitByGroup). Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - ctx.SendChain(message.Text("请稍后重试0x0...")) - return - } ctx.SendChain(message.Text("少女祈祷中......")) data, err := web.ReqWith(coserURL, "GET", "", ua) if err != nil { diff --git a/plugin_curse/curse.go b/plugin_curse/curse.go index 473c2ea8..16ae6937 100644 --- a/plugin_curse/curse.go +++ b/plugin_curse/curse.go @@ -2,13 +2,11 @@ package curse import ( - "time" - zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" control "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/process" "github.com/FloatTech/ZeroBot-Plugin/order" @@ -20,25 +18,18 @@ const ( ) func init() { - limit := rate.NewManager(time.Minute, 30) engine := control.Register("curse", order.PrioCurse, &control.Options{ DisableOnDefault: true, Help: "骂人(求骂,自卫)\n- 骂我\n- 大力骂我", }) - engine.OnFullMatch("骂我").SetBlock(true).Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - return - } + engine.OnFullMatch("骂我").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { process.SleepAbout1sTo2s() text := getRandomCurseByLevel(minLevel).Text ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(text)) }) - engine.OnFullMatch("大力骂我").SetBlock(true).Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - return - } + engine.OnFullMatch("大力骂我").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { process.SleepAbout1sTo2s() text := getRandomCurseByLevel(maxLevel).Text ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(text)) diff --git a/plugin_fortune/fortune.go b/plugin_fortune/fortune.go index d25c4692..dd10efd6 100644 --- a/plugin_fortune/fortune.go +++ b/plugin_fortune/fortune.go @@ -19,10 +19,10 @@ import ( "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" - "github.com/FloatTech/AnimeAPI/imgpool" control "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/file" + "github.com/FloatTech/zbputils/imgpool" "github.com/FloatTech/zbputils/math" "github.com/FloatTech/zbputils/txt2img" diff --git a/plugin_funny/laugh.go b/plugin_funny/laugh.go index 6514816d..636ac222 100644 --- a/plugin_funny/laugh.go +++ b/plugin_funny/laugh.go @@ -3,10 +3,8 @@ package funny import ( "strings" - "time" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" control "github.com/FloatTech/zbputils/control" @@ -22,15 +20,11 @@ var ( Help: "讲个笑话\n" + "- 讲个笑话[@xxx] | 讲个笑话[qq号]", }) - limit = rate.NewManager(time.Minute, 20) - db = &sql.Sqlite{DBPath: dbfile} + db = &sql.Sqlite{DBPath: dbfile} ) func init() { - engine.OnPrefix("讲个笑话").SetBlock(true).Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - return - } + engine.OnPrefix("讲个笑话").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { // 获取名字 name := ctxext.NickName(ctx) var j joke diff --git a/plugin_image_finder/keyword.go b/plugin_image_finder/keyword.go index 89a698f5..e3dd8faa 100644 --- a/plugin_image_finder/keyword.go +++ b/plugin_image_finder/keyword.go @@ -9,9 +9,9 @@ import ( "strings" "time" - "github.com/FloatTech/AnimeAPI/imgpool" control "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/ctxext" + "github.com/FloatTech/zbputils/imgpool" zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" diff --git a/plugin_juejuezi/juejuezi.go b/plugin_juejuezi/juejuezi.go index 82a59ede..bea3dda3 100644 --- a/plugin_juejuezi/juejuezi.go +++ b/plugin_juejuezi/juejuezi.go @@ -6,13 +6,12 @@ import ( "io" "net/http" "strings" - "time" control "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" @@ -25,19 +24,12 @@ const ( ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" ) -var ( - limit = rate.NewManager(time.Minute, 20) -) - func init() { control.Register("juejuezi", order.PrioJueJueZi, &control.Options{ DisableOnDefault: false, Help: "绝绝子生成器\n" + "- 喝奶茶绝绝子 | 绝绝子吃饭", - }).OnRegex("[\u4E00-\u9FA5]{0,10}绝绝子[\u4E00-\u9FA5]{0,10}").SetBlock(true).Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - return - } + }).OnRegex("[\u4E00-\u9FA5]{0,10}绝绝子[\u4E00-\u9FA5]{0,10}").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { toDealStr := []rune(strings.ReplaceAll(ctx.ExtractPlainText(), "绝绝子", "")) switch len(toDealStr) { case 0, 1: diff --git a/plugin_lolicon/lolicon.go b/plugin_lolicon/lolicon.go index fa043700..9721bd98 100644 --- a/plugin_lolicon/lolicon.go +++ b/plugin_lolicon/lolicon.go @@ -11,9 +11,9 @@ import ( zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" - "github.com/FloatTech/AnimeAPI/imgpool" control "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/ctxext" + "github.com/FloatTech/zbputils/imgpool" "github.com/FloatTech/zbputils/math" "github.com/FloatTech/zbputils/process" diff --git a/plugin_manager/manager.go b/plugin_manager/manager.go index 4a6ac6a8..238a80ed 100644 --- a/plugin_manager/manager.go +++ b/plugin_manager/manager.go @@ -12,7 +12,6 @@ import ( "github.com/sirupsen/logrus" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" control "github.com/FloatTech/zbputils/control" @@ -57,7 +56,6 @@ const ( var ( db = &sql.Sqlite{DBPath: confile} - limit = rate.NewManager(time.Minute*5, 2) clock timer.Clock ) @@ -333,12 +331,8 @@ func init() { // 插件主体 ctx.SendChain(message.Text(clock.ListTimers(ctx.Event.GroupID))) }) // 随机点名 - engine.OnFullMatchGroup([]string{"翻牌"}, zero.OnlyGroup).SetBlock(true). + engine.OnFullMatchGroup([]string{"翻牌"}, zero.OnlyGroup).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.UserID).Acquire() { - ctx.SendChain(message.Text("少女祈祷中......")) - return - } // 无缓存获取群员列表 list := ctx.CallAction("get_group_member_list", zero.Params{ "group_id": ctx.Event.GroupID, diff --git a/plugin_music/selecter.go b/plugin_music/selecter.go index 723bd788..f5413a6f 100644 --- a/plugin_music/selecter.go +++ b/plugin_music/selecter.go @@ -12,16 +12,14 @@ import ( "time" control "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" "github.com/tidwall/gjson" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" "github.com/FloatTech/ZeroBot-Plugin/order" ) -var limit = rate.NewManager(time.Minute*3, 5) - func init() { control.Register("music", order.PrioMusic, &control.Options{ DisableOnDefault: false, @@ -30,12 +28,8 @@ func init() { "- 网易点歌[xxx]\n" + "- 酷我点歌[xxx]\n" + "- 酷狗点歌[xxx]", - }).OnRegex(`^(.{0,2})点歌\s?(.{1,25})$`).SetBlock(true). + }).OnRegex(`^(.{0,2})点歌\s?(.{1,25})$`).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.UserID).Acquire() { - ctx.SendChain(message.Text("请稍后重试0x0...")) - return - } // switch 平台 switch ctx.State["regex_matched"].([]string)[1] { case "酷我": diff --git a/plugin_novel/qianbi.go b/plugin_novel/qianbi.go index 61a3deab..b09f20a6 100644 --- a/plugin_novel/qianbi.go +++ b/plugin_novel/qianbi.go @@ -9,17 +9,16 @@ import ( "net/url" "regexp" "strings" - "time" "github.com/antchfx/htmlquery" log "github.com/sirupsen/logrus" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" ub "github.com/FloatTech/zbputils/binary" control "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/txt2img" "github.com/FloatTech/ZeroBot-Plugin/order" @@ -44,16 +43,11 @@ var ( DisableOnDefault: false, Help: "铅笔小说网搜索\n- 小说[xxx]", }) - limit = rate.NewManager(time.Minute, 5) ) func init() { - engine.OnRegex("^小说([\u4E00-\u9FA5A-Za-z0-9]{1,25})$").SetBlock(true). + engine.OnRegex("^小说([\u4E00-\u9FA5A-Za-z0-9]{1,25})$").SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - ctx.SendChain(message.Text("请稍后重试0x0...")) - return - } ctx.SendChain(message.Text("少女祈祷中......")) login(username, password) searchKey := ctx.State["regex_matched"].([]string)[1] diff --git a/plugin_runcode/code_runner.go b/plugin_runcode/code_runner.go index 0de7efb8..9f8f64f6 100644 --- a/plugin_runcode/code_runner.go +++ b/plugin_runcode/code_runner.go @@ -10,8 +10,8 @@ import ( "time" control "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" "github.com/FloatTech/ZeroBot-Plugin/order" @@ -20,7 +20,6 @@ import ( ) var ( - limit = rate.NewManager(time.Minute*3, 5) templates = map[string]string{ "py2": "print 'Hello World!'", "ruby": "puts \"Hello World!\";", @@ -105,46 +104,42 @@ func init() { "JavaScript || TypeScript || PHP || Shell \n" + "Kotlin || Rust || Erlang || Ruby || Swift \n" + "R || VB || Py2 || Perl || Pascal || Scala", - }).OnRegex(`^>runcode\s(.+?)\s([\s\S]+)$`).SetBlock(true). + }).OnRegex(`^>runcode\s(.+?)\s([\s\S]+)$`).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.UserID).Acquire() { - ctx.SendChain(message.Text("请稍后重试0x0...")) + language := ctx.State["regex_matched"].([]string)[1] + language = strings.ToLower(language) + if runType, exist := table[language]; !exist { + // 不支持语言 + ctx.SendChain( + message.Text("> ", ctx.Event.Sender.NickName, "\n"), + message.Text("语言不是受支持的编程语种呢~"), + ) } else { - language := ctx.State["regex_matched"].([]string)[1] - language = strings.ToLower(language) - if runType, exist := table[language]; !exist { - // 不支持语言 + // 执行运行 + block := ctx.State["regex_matched"].([]string)[2] + block = message.UnescapeCQCodeText(block) + if block == "help" { + // 输出模板 ctx.SendChain( - message.Text("> ", ctx.Event.Sender.NickName, "\n"), - message.Text("语言不是受支持的编程语种呢~"), + message.Text("> ", ctx.Event.Sender.NickName, " ", language, "-template:\n"), + message.Text( + ">runcode ", language, "\n", + templates[language], + ), ) } else { - // 执行运行 - block := ctx.State["regex_matched"].([]string)[2] - block = message.UnescapeCQCodeText(block) - if block == "help" { - // 输出模板 + if output, err := runCode(block, runType); err != nil { + // 运行失败 ctx.SendChain( - message.Text("> ", ctx.Event.Sender.NickName, " ", language, "-template:\n"), - message.Text( - ">runcode ", language, "\n", - templates[language], - ), + message.Text("> ", ctx.Event.Sender.NickName, "\n"), + message.Text("ERROR: ", err), ) } else { - if output, err := runCode(block, runType); err != nil { - // 运行失败 - ctx.SendChain( - message.Text("> ", ctx.Event.Sender.NickName, "\n"), - message.Text("ERROR: ", err), - ) - } else { - // 运行成功 - ctx.SendChain( - message.Text("> ", ctx.Event.Sender.NickName, "\n"), - message.Text(output), - ) - } + // 运行成功 + ctx.SendChain( + message.Text("> ", ctx.Event.Sender.NickName, "\n"), + message.Text(output), + ) } } } diff --git a/plugin_saucenao/searcher.go b/plugin_saucenao/searcher.go index eb705e08..fe503a96 100644 --- a/plugin_saucenao/searcher.go +++ b/plugin_saucenao/searcher.go @@ -6,12 +6,12 @@ import ( "strconv" "github.com/FloatTech/AnimeAPI/ascii2d" - "github.com/FloatTech/AnimeAPI/imgpool" "github.com/FloatTech/AnimeAPI/pixiv" "github.com/FloatTech/AnimeAPI/saucenao" control "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/file" + "github.com/FloatTech/zbputils/imgpool" "github.com/FloatTech/zbputils/process" "github.com/sirupsen/logrus" zero "github.com/wdvxdr1123/ZeroBot" diff --git a/plugin_setutime/setu_geter.go b/plugin_setutime/setu_geter.go index 9e53e1b8..1495bf4e 100644 --- a/plugin_setutime/setu_geter.go +++ b/plugin_setutime/setu_geter.go @@ -10,17 +10,16 @@ import ( "sync" "time" - imagepool "github.com/FloatTech/AnimeAPI/imgpool" "github.com/FloatTech/AnimeAPI/pixiv" control "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/ctxext" fileutil "github.com/FloatTech/zbputils/file" + imagepool "github.com/FloatTech/zbputils/imgpool" "github.com/FloatTech/zbputils/math" "github.com/FloatTech/zbputils/process" "github.com/FloatTech/zbputils/rule" "github.com/FloatTech/zbputils/sql" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" "github.com/FloatTech/ZeroBot-Plugin/order" @@ -70,7 +69,6 @@ func init() { // 插件主体 } }() - limit := rate.NewManager(time.Minute*1, 5) engine := control.Register("setutime", order.PrioSetuTime, &control.Options{ DisableOnDefault: false, Help: "涩图\n" + @@ -79,12 +77,8 @@ func init() { // 插件主体 "- 删除[涩图/二次元/风景/车万][P站图片ID]\n" + "- >setu status", }) - engine.OnRegex(`^来份(.*)$`, rule.FirstValueInList(pool)).SetBlock(true). + engine.OnRegex(`^来份(.*)$`, rule.FirstValueInList(pool)).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.UserID).Acquire() { - ctx.SendChain(message.Text("请稍后重试0x0...")) - return - } var imgtype = ctx.State["regex_matched"].([]string)[1] // 补充池子 go pool.fill(ctx, imgtype) diff --git a/plugin_shadiao/caihongpi.go b/plugin_shadiao/caihongpi.go index 3e9c8b30..73b89a18 100644 --- a/plugin_shadiao/caihongpi.go +++ b/plugin_shadiao/caihongpi.go @@ -5,14 +5,12 @@ import ( "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" + "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/web" ) func init() { - engine.OnFullMatch("哄我").SetBlock(true).Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - return - } + engine.OnFullMatch("哄我").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { data, err := web.ReqWith(chpURL, "GET", chpReferer, ua) if err != nil { ctx.SendChain(message.Text("ERROR:", err)) diff --git a/plugin_shadiao/dujitang.go b/plugin_shadiao/dujitang.go index cd368d72..fe29553b 100644 --- a/plugin_shadiao/dujitang.go +++ b/plugin_shadiao/dujitang.go @@ -5,14 +5,12 @@ import ( "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" + "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/web" ) func init() { - engine.OnFullMatch("来碗毒鸡汤").SetBlock(true).Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - return - } + engine.OnFullMatch("来碗毒鸡汤").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { data, err := web.ReqWith(duURL, "GET", duReferer, ua) if err != nil { ctx.SendChain(message.Text("ERROR:", err)) diff --git a/plugin_shadiao/pengyouquan.go b/plugin_shadiao/pengyouquan.go index 6ceaac85..3ce0fac9 100644 --- a/plugin_shadiao/pengyouquan.go +++ b/plugin_shadiao/pengyouquan.go @@ -5,14 +5,12 @@ import ( "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" + "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/web" ) func init() { - engine.OnFullMatch("发个朋友圈").SetBlock(true).Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - return - } + engine.OnFullMatch("发个朋友圈").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { data, err := web.ReqWith(pyqURL, "GET", pyqReferer, ua) if err != nil { ctx.SendChain(message.Text("ERROR:", err)) diff --git a/plugin_shadiao/shadiao.go b/plugin_shadiao/shadiao.go index 8cca625a..d03b459c 100644 --- a/plugin_shadiao/shadiao.go +++ b/plugin_shadiao/shadiao.go @@ -2,10 +2,7 @@ package shadiao import ( - "time" - control "github.com/FloatTech/zbputils/control" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/FloatTech/ZeroBot-Plugin/order" ) @@ -31,5 +28,4 @@ var ( Help: "沙雕app\n" + "- 哄我\n- 渣我\n- 来碗绿茶\n- 发个朋友圈\n- 来碗毒鸡汤\n- 讲个段子", }) - limit = rate.NewManager(time.Minute, 60) ) diff --git a/plugin_shadiao/sweetnothings.go b/plugin_shadiao/sweetnothings.go index fcea9ae0..31af1f11 100644 --- a/plugin_shadiao/sweetnothings.go +++ b/plugin_shadiao/sweetnothings.go @@ -6,14 +6,12 @@ import ( "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" + "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/web" ) func init() { - engine.OnFullMatch("来碗绿茶").SetBlock(true).Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - return - } + engine.OnFullMatch("来碗绿茶").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { data, err := web.ReqWith(chayiURL, "GET", loveliveReferer, ua) if err != nil { ctx.SendChain(message.Text("ERROR:", err)) @@ -23,10 +21,7 @@ func init() { ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(text)) }) - engine.OnFullMatch("渣我").SetBlock(true).Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - return - } + engine.OnFullMatch("渣我").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { data, err := web.ReqWith(ganhaiURL, "GET", loveliveReferer, ua) if err != nil { ctx.SendChain(message.Text("ERROR:", err)) diff --git a/plugin_shadiao/yduanzi.go b/plugin_shadiao/yduanzi.go index 7cf73d67..2c792a17 100644 --- a/plugin_shadiao/yduanzi.go +++ b/plugin_shadiao/yduanzi.go @@ -8,14 +8,12 @@ import ( "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" + "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/web" ) func init() { - engine.OnFullMatch("讲个段子").SetBlock(true).Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - return - } + engine.OnFullMatch("讲个段子").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { data, err := web.ReqWith(yduanziURL, "POST", yduanziReferer, ua) if err != nil { ctx.SendChain(message.Text("ERROR:", err)) diff --git a/plugin_shindan/shindan.go b/plugin_shindan/shindan.go index d83e060a..b0712c1b 100644 --- a/plugin_shindan/shindan.go +++ b/plugin_shindan/shindan.go @@ -2,12 +2,9 @@ package shindan import ( - "time" - "github.com/FloatTech/AnimeAPI/shindanmaker" log "github.com/sirupsen/logrus" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" @@ -18,11 +15,6 @@ import ( "github.com/FloatTech/zbputils/txt2img" ) -var ( - // 限制调用频率 - limit = rate.NewManager(time.Minute*5, 5) -) - func init() { engine := control.Register("shindan", order.PrioShinDan, &control.Options{ DisableOnDefault: false, @@ -32,18 +24,14 @@ func init() { "- 卖萌[@xxx]\n" + "- 抽老婆[@xxx]", }) - engine.OnPrefix("异世界转生", number(587874)).SetBlock(true).Handle(handle) - engine.OnPrefix("今天是什么少女", number(162207)).SetBlock(true).Handle(handle) - engine.OnPrefix("卖萌", number(360578)).SetBlock(true).Handle(handle) - engine.OnPrefix("抽老婆", number(1075116)).SetBlock(true).Handle(handle) + engine.OnPrefix("异世界转生", number(587874)).SetBlock(true).Limit(ctxext.LimitByUser).Handle(handle) + engine.OnPrefix("今天是什么少女", number(162207)).SetBlock(true).Limit(ctxext.LimitByUser).Handle(handle) + engine.OnPrefix("卖萌", number(360578)).SetBlock(true).Limit(ctxext.LimitByUser).Handle(handle) + engine.OnPrefix("抽老婆", number(1075116)).SetBlock(true).Limit(ctxext.LimitByUser).Handle(handle) } // shindanmaker 处理函数 func handle(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.UserID).Acquire() { - ctx.SendChain(message.Text("请稍后重试0x0...")) - return - } // 获取名字 name := ctxext.NickName(ctx) // 调用接口 diff --git a/plugin_translation/tl.go b/plugin_translation/tl.go index 5cc9f1e0..cba78b98 100644 --- a/plugin_translation/tl.go +++ b/plugin_translation/tl.go @@ -6,23 +6,18 @@ import ( "fmt" "io/ioutil" "net/http" - "time" "github.com/tidwall/gjson" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" control "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/process" "github.com/FloatTech/ZeroBot-Plugin/order" ) -var ( - bucket = rate.NewManager(time.Minute, 20) // 接口回复 -) - func tl(d string) ([]byte, error) { url := "https://api.cloolc.club/fanyi?data=" + d resp, err := http.Get(url) @@ -47,12 +42,8 @@ func init() { DisableOnDefault: false, Help: "翻译\n" + ">TL 你好", - }).OnRegex(`^>TL\s(-.{1,10}? )?(.*)$`).SetBlock(true). + }).OnRegex(`^>TL\s(-.{1,10}? )?(.*)$`).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { - if !bucket.Load(ctx.Event.UserID).Acquire() { - // 频繁触发,不回复 - return - } msg := []string{ctx.State["regex_matched"].([]string)[2]} rely, err := tl(msg[0]) if err != nil { diff --git a/plugin_wangyiyun/main.go b/plugin_wangyiyun/main.go index 58fd246d..ea2fcc08 100644 --- a/plugin_wangyiyun/main.go +++ b/plugin_wangyiyun/main.go @@ -2,12 +2,10 @@ package wangyiyun import ( - "time" - "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/web" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" "github.com/wdvxdr1123/ZeroBot/utils/helper" @@ -21,15 +19,11 @@ const ( ) func init() { - limit := rate.NewManager(time.Minute, 60) control.Register("wangyiyun", order.PrioWangYiYun, &control.Options{ DisableOnDefault: false, Help: "wangyiyun \n- 来份网易云热评", - }).OnFullMatch("来份网易云热评").SetBlock(true). + }).OnFullMatch("来份网易云热评").SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.GroupID).Acquire() { - return - } data, err := web.ReqWith(wangyiyunURL, "GET", wangyiyunReferer, ua) if err != nil { ctx.SendChain(message.Text("ERROR:", err)) diff --git a/plugin_wtf/main.go b/plugin_wtf/main.go index 1b911d33..7632acac 100644 --- a/plugin_wtf/main.go +++ b/plugin_wtf/main.go @@ -4,21 +4,15 @@ package wtf import ( "fmt" "strconv" - "time" control "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/extension/rate" "github.com/wdvxdr1123/ZeroBot/message" "github.com/FloatTech/ZeroBot-Plugin/order" ) -var ( - // 限制调用频率 - limit = rate.NewManager(time.Minute*5, 5) -) - func init() { en := control.Register("wtf", order.PrioWtf, &control.Options{ DisableOnDefault: false, @@ -32,12 +26,8 @@ func init() { } ctx.SendChain(message.Text(s)) }) - en.OnRegex(`^查询鬼东西(\d*)`, zero.OnlyGroup).SetBlock(true). + en.OnRegex(`^查询鬼东西(\d*)`, zero.OnlyGroup).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { - if !limit.Load(ctx.Event.UserID).Acquire() { - ctx.SendChain(message.Text("请稍后重试0x0...")) - return - } // 调用接口 i, err := strconv.Atoi(ctx.State["regex_matched"].([]string)[1]) if err != nil {