summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2018-10-20 13:02:45 +0200
committerDimitri Sokolyuk <demon@dim13.org>2018-10-20 13:02:45 +0200
commit832913a2158b8484777be74b95edfa9a14c3115b (patch)
treefbf9d9a30742b83614af6d5bee8e688760de0f6e
parenta4b642477e28f412d48ee64e0f2e7b8d41c54d94 (diff)
replace maps with lru
-rw-r--r--main.go21
1 files changed, 12 insertions, 9 deletions
diff --git a/main.go b/main.go
index 4ce6be8..614211e 100644
--- a/main.go
+++ b/main.go
@@ -45,8 +45,8 @@ func (n *Notify) Write(p []byte) (int, error) {
func privmsg(room string) irc.HandlerFunc {
var (
- last = make(map[string]string)
- lastRe = make(map[string]time.Time)
+ last, _ = lru.New(100)
+ lastRe, _ = lru.New(100)
titles, _ = lru.New(100)
)
return func(conn *irc.Conn, line *irc.Line) {
@@ -55,22 +55,25 @@ func privmsg(room string) irc.HandlerFunc {
log.Println("panic", r)
}
}()
- switch t := line.Text(); {
+ t := line.Text()
+ l, _ := last.Get(line.Nick)
+ switch {
case line.Nick == conn.Me().Nick:
// ignore self
case isFlood(t):
log.Println("flood", line.Nick)
conn.Kick(room, line.Nick)
- case noSpaceCompare(t, last[line.Nick]):
+ case noSpaceCompare(t, l.(string)):
log.Println("kick", line.Nick)
conn.Kick(room, line.Nick)
case strings.HasPrefix(t, "s"):
global := strings.HasSuffix(t, "g")
- if tofix, ok := last[line.Nick]; ok {
- d := time.Since(lastRe[line.Nick])
- fixed, err := re(tofix, t[1:], global)
+ if tofix, ok := last.Get(line.Nick); ok {
+ lre, _ := lastRe.Get(line.Nick)
+ d := time.Since(lre.(time.Time))
+ fixed, err := re(tofix.(string), t[1:], global)
if err == nil && fixed != tofix && d > time.Second*30 {
- lastRe[line.Nick] = time.Now()
+ lastRe.Add(line.Nick, time.Now())
log.Println("regexp", t)
fmt.Fprintf(NewNotify(conn, line.Target()), "%v meant to say: %s", line.Nick, fixed)
return
@@ -97,7 +100,7 @@ func privmsg(room string) irc.HandlerFunc {
}
}
}
- last[line.Nick] = t
+ last.Add(line.Nick, t)
}
}
}