gorepost/bot/checkinator.go

85 lines
1.6 KiB
Go

// Copyright 2015 Robert S. Gerus. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package bot
import (
"encoding/json"
"fmt"
"strings"
"time"
"github.com/arachnist/gorepost/irc"
)
type user struct {
Timestamp float64
Login string
PrettyTime string `json:"pretty_time"`
}
type checkinator struct {
Kektops int
Unknown int
Users []user
}
func at(output func(irc.Message), msg irc.Message) {
var rmsg string
var values checkinator
var now []string
var recently []string
if strings.Split(msg.Trailing, " ")[0] != ":at" {
return
}
data, err := httpGet("https://at.hackerspace.pl/api")
if err != nil {
output(reply(msg, fmt.Sprint("error:", err)))
return
}
err = json.Unmarshal(data, &values)
if err != nil {
output(reply(msg, fmt.Sprint("error:", err)))
return
}
rmsg = "at:"
for _, u := range values.Users {
t := time.Unix(int64(u.Timestamp), 0)
if t.Add(time.Minute * 10).After(time.Now()) {
now = append(now, u.Login)
} else {
recently = append(recently, u.Login)
}
}
if len(now) > 0 {
rmsg += " now: "
rmsg += strings.Join(now, ", ")
}
if len(recently) > 0 {
rmsg += " recently: "
rmsg += strings.Join(recently, ", ")
}
if len(now) == 0 && len(recently) == 0 {
rmsg += " Wieje sandałem, z masłem"
}
if values.Kektops > 0 {
rmsg += fmt.Sprintf("; kektops: %d", values.Kektops)
}
if values.Unknown > 0 {
rmsg += fmt.Sprintf("; unknown: %d", values.Unknown)
}
output(reply(msg, rmsg))
}
func init() {
addCallback("PRIVMSG", "at", at)
}