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[0-9]{2}) (?P(Wintar|Hornung|Lenzin|Ōstar|Winni|Brāh|Hewi|Aran|Witu|Wīndume|Herbist|Hailag)) (?P[0-9]{4})( (?P[0-9]{2}):(?P[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 } }