summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-09-28 18:41:59 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-09-28 18:41:59 +0200
commit7c1c2ffad83317bcab14e90f124a64882c99a5e4 (patch)
tree61b783468c623d4e351494341887dfe6b3230dc4
parent35fd470c006adedd6add7438e17ae301ddbf0f94 (diff)
Store last city
-rw-r--r--command.go14
-rw-r--r--weather.go27
2 files changed, 26 insertions, 15 deletions
diff --git a/command.go b/command.go
index b2bdb59..cd34b7e 100644
--- a/command.go
+++ b/command.go
@@ -16,7 +16,7 @@ type Commander interface {
}
type Command struct {
- last map[string]time.Time
+ lastCmd map[string]time.Time
}
var commands = make(map[string]Commander)
@@ -25,13 +25,15 @@ func Register(cmd string, f Commander) {
commands[cmd] = f
}
+const timeOut = 5 * time.Second
+
func (v *Command) Timeout(nick string) bool {
- defer func() { v.last[nick] = time.Now() }()
- if v.last == nil {
- v.last = make(map[string]time.Time)
+ defer func() { v.lastCmd[nick] = time.Now() }()
+ if v.lastCmd == nil {
+ v.lastCmd = make(map[string]time.Time)
}
- if last, ok := v.last[nick]; ok {
- if to := time.Since(last); to < 5*time.Second {
+ if last, ok := v.lastCmd[nick]; ok {
+ if to := time.Since(last); to < timeOut {
log.Println(nick, "timeout", to)
return true
}
diff --git a/weather.go b/weather.go
index bada901..cf5265d 100644
--- a/weather.go
+++ b/weather.go
@@ -8,17 +8,26 @@ import (
irc "github.com/fluffle/goirc/client"
)
-type Weather struct{ Command }
+type Weather struct {
+ Command
+ lastCity map[string]string
+}
func (_ Weather) WithArgs(_ int) bool { return true }
-func (_ Weather) Handle(conn *irc.Conn, line *irc.Line) {
- if q := strings.SplitN(line.Text(), " ", 2); len(q) == 2 {
- if c, err := weather.ByCityName(q[1]); err != nil {
- conn.Notice(line.Target(), err.Error())
- } else {
- conn.Notice(line.Target(), fmt.Sprint(c))
- }
+func (w *Weather) Handle(conn *irc.Conn, line *irc.Line) {
+ var city string
+ q := strings.SplitN(line.Text(), " ", 2)
+ if len(q) == 2 {
+ city = q[1]
+ } else if l, ok := w.lastCity[line.Nick]; ok {
+ city = l
+ }
+ if c, err := weather.ByCityName(city); err != nil {
+ conn.Notice(line.Target(), err.Error())
+ } else {
+ conn.Notice(line.Target(), fmt.Sprint(c))
+ w.lastCity[line.Nick] = city
}
}
@@ -27,5 +36,5 @@ func (_ Weather) Help() string {
}
func init() {
- Register("weather", &Weather{})
+ Register("weather", &Weather{lastCity: make(map[string]string)})
}