summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-01-11 15:54:24 +0100
committerDimitri Sokolyuk <demon@dim13.org>2018-01-11 15:54:24 +0100
commit7e1ac136874440f30940ca187a92eeefa0fce58b (patch)
treec5dc26a89647649c6dd1308d1004b650549fb758
parent43ee99e80b8e77fcd5eabd22b087a73e9a220fb4 (diff)
mitigate re flood
-rw-r--r--main.go11
1 files 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
}
}