146 lines
3.4 KiB
Go
146 lines
3.4 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"io/ioutil"
|
|
"log"
|
|
"regexp"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
func failOnError(err error, msg string) {
|
|
if err != nil {
|
|
log.Fatalf("%s: %s", msg, err)
|
|
}
|
|
}
|
|
|
|
func logOnError(err error, msg string) {
|
|
if err != nil {
|
|
log.Printf("%s: %s", msg, err)
|
|
}
|
|
}
|
|
|
|
func MinInt64(a int64, b int64) int64 {
|
|
if a < b {
|
|
return a
|
|
} else {
|
|
return b
|
|
}
|
|
}
|
|
|
|
func MaxInt64(a int64, b int64) int64 {
|
|
if a > b {
|
|
return a
|
|
} else {
|
|
return b
|
|
}
|
|
}
|
|
|
|
func ReadConfig(path string) error {
|
|
b, err := Asset("data/config.json")
|
|
logOnError(err, "readConfig : load data/config.json")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = json.Unmarshal(b, &cfg)
|
|
logOnError(err, "readConfig : Unmarshal(data/config.json)")
|
|
|
|
b, err = ioutil.ReadFile(path)
|
|
logOnError(err, "readConfig : ReadFile("+path+")")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = json.Unmarshal(b, &cfg)
|
|
logOnError(err, "readConfig : Unmarshal("+path+")")
|
|
|
|
return nil
|
|
}
|
|
|
|
func fromChatWarsDate(d string) (t time.Time, err error) {
|
|
r := regexp.MustCompile(`(?P<Day>[0-9]{2}) (?P<Month>(Wintar|Hornung|Lenzin|Ōstar|Winni|Brāh|Hewi|Aran|Witu|Wīndume|Herbist|Hailag)) (?P<Year>[0-9]{4})( (?P<Hour>[0-9]{2}):(?P<Minute>[0-9]{2})){0,1}`)
|
|
if r.FindStringSubmatch(d) != nil {
|
|
// log.Printf("fromChatWarsDate : Day : %s\n", r.ReplaceAllString(d, "${Day}"))
|
|
// log.Printf("fromChatWarsDate : Month : %s\n", r.ReplaceAllString(d, "${Month}"))
|
|
// log.Printf("fromChatWarsDate : Year : %s\n", r.ReplaceAllString(d, "${Year}"))
|
|
// log.Printf("fromChatWarsDate : Hour : %s\n", r.ReplaceAllString(d, "${Hour}"))
|
|
// log.Printf("fromChatWarsDate : Minute : %s\n", r.ReplaceAllString(d, "${Minute}"))
|
|
year, _ := strconv.Atoi(r.ReplaceAllString(d, "${Year}"))
|
|
day, _ := strconv.Atoi(r.ReplaceAllString(d, "${Day}"))
|
|
hour, _ := strconv.Atoi(r.ReplaceAllString(d, "${Hour}"))
|
|
minute, _ := strconv.Atoi(r.ReplaceAllString(d, "${Minute}"))
|
|
days := int(0)
|
|
for i := 1059; i < year; i++ {
|
|
if i == 1060 {
|
|
days += 365
|
|
} else if i%4 == 0 {
|
|
days += 366
|
|
} else {
|
|
days += 365
|
|
}
|
|
}
|
|
for i := 1; i < chatWarsMonth[r.ReplaceAllString(d, "${Month}")]; i++ {
|
|
if _, special := chatWarsDaysSpecial[year][i]; special {
|
|
days = days + chatWarsDaysSpecial[year][i]
|
|
} else {
|
|
days = days + chatWarsDays[i]
|
|
}
|
|
}
|
|
for i := 1; i < day; i++ {
|
|
days++
|
|
}
|
|
|
|
t, _ := time.Parse(time.RFC3339, "2017-11-18T21:00:00+00:00")
|
|
t = t.AddDate(0, 0, (days / 3))
|
|
t = t.Add(time.Hour * time.Duration(days%3) * 8)
|
|
t = t.Add(time.Minute * time.Duration(hour) * 20)
|
|
t = t.Add(time.Second * time.Duration(minute) * 20)
|
|
return t, nil
|
|
} else {
|
|
return time.Now(), errors.New("Wrong format")
|
|
}
|
|
}
|
|
|
|
func toChatWarsDate(t time.Time) (s string, err error) {
|
|
return "test", nil
|
|
}
|
|
|
|
func RndInt64() int64 {
|
|
RndMux.Lock()
|
|
i := RndSrc.Int63()
|
|
RndMux.Unlock()
|
|
return i
|
|
}
|
|
|
|
func RndIntn(n int) int {
|
|
RndMux.Lock()
|
|
i := RndSrc.Intn(n)
|
|
RndMux.Unlock()
|
|
return i
|
|
}
|
|
|
|
func hammerTimeNow(time string, weather string) bool {
|
|
if time == `🌞Morning` && weather == `🌧` ||
|
|
time == `🌙Evening` && weather == `🌤` ||
|
|
time == `🌙Night` && weather == `☀` {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
|
|
}
|
|
|
|
func hammerTimeNext(time string, weather string) bool {
|
|
if time == `🌙Night` && weather == `🌧` ||
|
|
time == `🌞Day` && weather == `🌤` ||
|
|
time == `🌙Evening` && weather == `☀` {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
|
|
}
|