summaryrefslogtreecommitdiff
path: root/internal/flood/flood.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/flood/flood.go')
-rw-r--r--internal/flood/flood.go20
1 files changed, 19 insertions, 1 deletions
diff --git a/internal/flood/flood.go b/internal/flood/flood.go
index b8a71d1..b16b948 100644
--- a/internal/flood/flood.go
+++ b/internal/flood/flood.go
@@ -14,6 +14,24 @@ const (
black = "\u24B6\u262D\u272F\u262E\u2721\u5350\u534D\u2719\u0FD5\u0FD6\u16CB\uA5A6\u0FD7\u0FD8"
)
+type Kicker interface {
+ Kick(nick string, message ...string)
+}
+
+type Checker struct {
+ k Kicker
+}
+
+func New(k Kicker) *Checker {
+ return &Checker{k: k}
+}
+
+func (c Checker) Check(text, nick string) {
+ if isFlood(text) {
+ c.k.Kick(nick)
+ }
+}
+
func entropy(s string) (e float64) {
n := make(map[rune]float64)
for _, r := range s {
@@ -25,7 +43,7 @@ func entropy(s string) (e float64) {
return e
}
-func Is(s string) bool {
+func isFlood(s string) bool {
if strings.ContainsAny(s, black) {
return true
}