From 73d5f1e59781066d4b78cf8e9e324a03c8082af4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Tue, 11 Oct 2022 00:14:05 +0800 Subject: [PATCH] feat: ctx add api Break --- context.go | 10 ++++++++++ event.go | 9 +++++++++ go.mod | 4 ++-- go.sum | 8 ++++---- matcher.go | 2 ++ 5 files changed, 27 insertions(+), 6 deletions(-) diff --git a/context.go b/context.go index 98caae8..91bff33 100644 --- a/context.go +++ b/context.go @@ -148,3 +148,13 @@ func (ctx *Ctx) SendAudio(file tgba.RequestFileData, replytosender bool, caption } return ctx.Caller.Send(&msg) } + +// Block 匹配成功后阻止后续触发 +func (ctx *Ctx) Block() { + ctx.ma.SetBlock(true) +} + +// Block 在 pre, rules, mid 阶段阻止后续触发 +func (ctx *Ctx) Break() { + ctx.ma.Break = true +} diff --git a/event.go b/event.go index 577539a..e7d1997 100644 --- a/event.go +++ b/event.go @@ -219,6 +219,9 @@ loop: if m.Engine != nil { for _, handler := range m.Engine.preHandler { if !handler(ctx) { // 有 pre handler 未满足 + if m.Block { // 阻断后续 + break loop + } continue loop } } @@ -226,6 +229,9 @@ loop: for _, rule := range m.Rules { if rule != nil && !rule(ctx) { // 有 Rule 的条件未满足 + if m.Block { // 阻断后续 + break loop + } continue loop } } @@ -234,6 +240,9 @@ loop: if m.Engine != nil { for _, handler := range m.Engine.midHandler { if !handler(ctx) { // 有 mid handler 未满足 + if m.Block { // 阻断后续 + break loop + } continue loop } } diff --git a/go.mod b/go.mod index 1bec11f..751c648 100644 --- a/go.mod +++ b/go.mod @@ -3,14 +3,14 @@ module github.com/fumiama/ReiBot go 1.18 require ( - github.com/FloatTech/floatbox v0.0.0-20221010032535-3acc1e46c8a9 + github.com/FloatTech/floatbox v0.0.0-20221010154018-16998fe73c7b github.com/FloatTech/zbpctrl v1.5.2-0.20221010032757-ed784af72c91 github.com/RomiChan/syncx v0.0.0-20220404072119-d7ea0ae15a4c github.com/fumiama/go-base16384 v1.5.4 github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 github.com/sirupsen/logrus v1.9.0 github.com/stretchr/testify v1.8.0 - github.com/wdvxdr1123/ZeroBot v1.5.2-0.20221010014449-b4fd5aee6033 + github.com/wdvxdr1123/ZeroBot v1.5.2-0.20221010153647-ef3e42aff1ff ) require ( diff --git a/go.sum b/go.sum index c17c9b7..7ccd523 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/FloatTech/floatbox v0.0.0-20221010032535-3acc1e46c8a9 h1:dKjfeGDNZlU/U8qIpEPk9kWCJwBqfboWNT14JRmM4jU= -github.com/FloatTech/floatbox v0.0.0-20221010032535-3acc1e46c8a9/go.mod h1:VVtyTHm1I6bTkzefaTEYE9jhqP+nciu3mb3JhKDjHvI= +github.com/FloatTech/floatbox v0.0.0-20221010154018-16998fe73c7b h1:UOREhlQ4DRaFItwTnj5JUHYfOZqcwz0QjzAU0R2OWCo= +github.com/FloatTech/floatbox v0.0.0-20221010154018-16998fe73c7b/go.mod h1:QOOZGdU9EhrunQv9qiYB4tyR5450QW2HjlkoVWAlzJ8= github.com/FloatTech/sqlite v0.5.0 h1:U7J5Omc534PqmH6csfu+ypCo3DS8L91l5lTsxUu3b/U= github.com/FloatTech/sqlite v0.5.0/go.mod h1:i33d92OtR8jcp5fBUvQtospf27+MkfUxnGwnZ95E/dA= github.com/FloatTech/ttl v0.0.0-20220715042055-15612be72f5b h1:tvciXWq2nuvTbFeJGLDNIdRX3BI546D3O7k7vrVueZw= @@ -46,8 +46,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= -github.com/wdvxdr1123/ZeroBot v1.5.2-0.20221010014449-b4fd5aee6033 h1:iTudCMGNgzwMMqlXB1E5DObVX7cz8enaooD8nRtCmXg= -github.com/wdvxdr1123/ZeroBot v1.5.2-0.20221010014449-b4fd5aee6033/go.mod h1:shG/ruauisKaVcov4amrFJtkeDl7nl+Q00IXB2PqFsc= +github.com/wdvxdr1123/ZeroBot v1.5.2-0.20221010153647-ef3e42aff1ff h1:CCLcXk7ZlT26MQ8Ad7RreGTd4XPwmtiA6Qe4J+saZSI= +github.com/wdvxdr1123/ZeroBot v1.5.2-0.20221010153647-ef3e42aff1ff/go.mod h1:shG/ruauisKaVcov4amrFJtkeDl7nl+Q00IXB2PqFsc= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= diff --git a/matcher.go b/matcher.go index 2e869bc..eccd7b2 100644 --- a/matcher.go +++ b/matcher.go @@ -20,6 +20,8 @@ type Matcher struct { Temp bool // Block 是否阻断后续 Matcher,为 true 时当前Matcher匹配成功后,后续Matcher不参与匹配 Block bool + // Break 是否退出后续匹配流程, 只有 rule 返回 false 且此值为真才会退出, 且不对 mid handler 以下的 rule 生效 + Break bool // priority 优先级,越小优先级越高 priority int // Event 当前匹配到的事件