uptime command

This commit is contained in:
gempir 2017-03-08 20:42:35 +01:00
parent 88484995be
commit acd2c96d56
3 changed files with 124 additions and 2 deletions

View file

@ -3,18 +3,136 @@ package command
import (
"github.com/gempir/gempbotgo/twitch"
"github.com/op/go-logging"
"strings"
"time"
"fmt"
)
type handler struct {
admin string
startTime time.Time
log logging.Logger
}
func NewHandler(logger logging.Logger) handler {
func NewHandler(admin string, startTime time.Time, logger logging.Logger) handler {
return handler{
admin: admin,
startTime: startTime,
log: logger,
}
}
func (h *handler) HandleCommand(msg twitch.Message) {
if msg.User.Username == strings.ToLower(h.admin) {
uptime := formatDiff(diff(h.startTime, time.Now()))
h.log.Debug(h.admin + ", uptime: " + uptime)
}
}
func formatDiff(years, months, days, hours, mins, secs int) string {
since := ""
if years > 0 {
switch years {
case 1:
since += fmt.Sprintf("%d year ", years)
break
default:
since += fmt.Sprintf("%d years ", years)
break
}
}
if months > 0 {
switch months {
case 1:
since += fmt.Sprintf("%d month ", months)
break
default:
since += fmt.Sprintf("%d months ", months)
break
}
}
if days > 0 {
switch days {
case 1:
since += fmt.Sprintf("%d day ", days)
break
default:
since += fmt.Sprintf("%d days ", days)
break
}
}
if hours > 0 {
switch hours {
case 1:
since += fmt.Sprintf("%d hour ", hours)
break
default:
since += fmt.Sprintf("%d hours ", hours)
break
}
}
if mins > 0 && days == 0 && months == 0 && years == 0 {
switch mins {
case 1:
since += fmt.Sprintf("%d min ", mins)
break
default:
since += fmt.Sprintf("%d mins ", mins)
break
}
}
if secs > 0 && days == 0 && months == 0 && years == 0 && hours == 0 {
switch secs {
case 1:
since += fmt.Sprintf("%d sec ", secs)
break
default:
since += fmt.Sprintf("%d secs ", secs)
break
}
}
return strings.TrimSpace(since)
}
func diff(a, b time.Time) (year, month, day, hour, min, sec int) {
if a.After(b) {
a, b = b, a
}
y1, M1, d1 := a.Date()
y2, M2, d2 := b.Date()
h1, m1, s1 := a.Clock()
h2, m2, s2 := b.Clock()
year = int(y2 - y1)
month = int(M2 - M1)
day = int(d2 - d1)
hour = int(h2 - h1)
min = int(m2 - m1)
sec = int(s2 - s1)
// Normalize negative values
if sec < 0 {
sec += 60
min--
}
if min < 0 {
min += 60
hour--
}
if hour < 0 {
hour += 24
day--
}
if day < 0 {
// days in month:
t := time.Date(y1, M1, 32, 0, 0, 0, 0, time.UTC)
day += 32 - t.Day()
month--
}
if month < 0 {
month += 12
year--
}
return
}

View file

@ -2,6 +2,7 @@
"irc_address": "irc.chat.twitch.tv:6667",
"irc_user": "gempbot",
"irc_token": "oauth:123123123",
"admin": "gempir",
"log_path": "/var/twitch_logs/",
"api_port": "8025",
"redis_address": "127.0.0.1:6379",

View file

@ -11,6 +11,7 @@ import (
"github.com/gempir/gempbotgo/command"
"strings"
"github.com/gempir/gempbotgo/filelog"
"time"
)
var (
@ -22,6 +23,7 @@ type config struct {
IrcAddress string `json:"irc_address"`
IrcUser string `json:"irc_user"`
IrcToken string `json:"irc_token"`
Admin string `json:"admin"`
LogPath string `json:"log_path"`
APIPort string `json:"api_port"`
RedisAddress string `json:"redis_address"`
@ -30,6 +32,7 @@ type config struct {
}
func main() {
startTime := time.Now()
Log = initLogger()
var err error
cfg, err = readConfig("config.json")
@ -47,7 +50,7 @@ func main() {
go bot.CreateConnection()
fileLogger := filelog.NewFileLogger(cfg.LogPath, Log)
cmdHandler := command.NewHandler(Log)
cmdHandler := command.NewHandler(cfg.Admin, startTime, Log)
for msg := range bot.Messages {