twitch-bot/timers.go
2020-12-21 01:33:57 +01:00

44 lines
756 B
Go

package main
import (
"strings"
"sync"
"time"
)
var timerStore = newTimer()
type timer struct {
timers map[string]time.Time
lock *sync.RWMutex
}
func newTimer() *timer {
return &timer{
timers: map[string]time.Time{},
lock: new(sync.RWMutex),
}
}
func (t *timer) Add(id string) {
t.lock.Lock()
defer t.lock.Unlock()
t.timers[id] = time.Now()
}
func (t *timer) Has(id string, validity time.Duration) bool {
t.lock.RLock()
defer t.lock.RUnlock()
return time.Since(t.timers[id]) < validity
}
func (t *timer) HasPermit(username string) bool {
return t.Has(t.NormalizeUsername(username), config.PermitTimeout)
}
func (t timer) NormalizeUsername(username string) string {
return strings.ToLower(strings.TrimLeft(username, "@"))
}