summaryrefslogtreecommitdiff
path: root/rate.go
diff options
context:
space:
mode:
Diffstat (limited to 'rate.go')
-rw-r--r--rate.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/rate.go b/rate.go
index c4c9668..a4b630e 100644
--- a/rate.go
+++ b/rate.go
@@ -1,3 +1,37 @@
package main
+import (
+ "sync"
+ "time"
+)
+
// TODO rate limiting
+
+type WatchList struct {
+ sync.Mutex
+ n int
+ d time.Duration
+ list map[string]int
+}
+
+func NewWatchList(n int, d time.Duration) WatchList {
+ return WatchList{n: n, d: d, list: make(map[string]int)}
+}
+
+func (w WatchList) Add(kick chan string, nick string) {
+ w.Lock()
+ defer w.Unlock()
+ if _, ok := w.list[nick]; !ok {
+ go func() {
+ <-time.After(w.d)
+ w.Lock()
+ delete(w.list, nick)
+ w.Unlock()
+ }()
+ }
+ w.list[nick]++
+ if w.list[nick] > w.n {
+ kick <- nick
+ }
+ return
+}