From 7e1ac136874440f30940ca187a92eeefa0fce58b Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 11 Jan 2018 15:54:24 +0100 Subject: mitigate re flood --- main.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index 41b124c..8bca311 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "strings" + "time" irc "github.com/fluffle/goirc/client" ) @@ -38,7 +39,7 @@ func (n *Notify) Write(p []byte) (int, error) { func privmsg(room string) irc.HandlerFunc { var ( last = make(map[string]string) - lastRe = make(map[string]string) + lastRe = make(map[string]time.Time) ) return func(conn *irc.Conn, line *irc.Line) { defer func() { @@ -56,16 +57,18 @@ func privmsg(room string) irc.HandlerFunc { case t == last[line.Nick]: log.Println("kick", line.Nick) conn.Kick(room, line.Nick) - case t == lastRe[line.Nick]: - log.Println("ignore", t) case strings.HasPrefix(t, "s"): global := strings.HasSuffix(t, "g") if tofix, ok := last[line.Nick]; ok { + defer func() { lastRe[line.Nick] = time.Now() }() + if time.Since(lastRe[line.Nick]) < time.Minute { + log.Println("ignore", t, lastRe[line.Nick]) + return + } fixed, err := re(tofix, t[1:], global) if err == nil && fixed != tofix { log.Println("regexp", t) fmt.Fprintf(NewNotify(conn, line.Target()), "%v meant to say: %s", line.Nick, fixed) - lastRe[line.Nick] = t return } } -- cgit v1.2.3