uptime command
This commit is contained in:
parent
88484995be
commit
acd2c96d56
3 changed files with 124 additions and 2 deletions
|
@ -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
|
||||
}
|
|
@ -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",
|
||||
|
|
5
main.go
5
main.go
|
@ -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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue