141 lines
3.7 KiB
Go
141 lines
3.7 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"log"
|
|
"regexp"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type ChatWarsMessage struct {
|
|
UserID64 int64 `json:"user_id"`
|
|
SenderUserID64 int64 `json:"sender_user_id"`
|
|
Date int32 `json:"date"`
|
|
ID64 int64 `json:"id"`
|
|
ChatID64 int64 `json:"chat_id"`
|
|
Text string `json:"text"`
|
|
}
|
|
|
|
type MessageParsingRule struct {
|
|
ID int32
|
|
Priority int32
|
|
Description string
|
|
Rule string
|
|
MsgTypeID int32
|
|
re *regexp.Regexp
|
|
}
|
|
|
|
const (
|
|
objTypeUser = 1
|
|
objTypeGuild = 2
|
|
objTypeMessage = 3
|
|
objTypeWar = 4
|
|
objTypeWarReport = 5
|
|
objTypeJob = 6
|
|
|
|
objSubTypeMessageUnknown = 301
|
|
objSubTypeMessageWar = 302
|
|
objSubTypeMessageMiniWar = 303
|
|
objSubTypeMessageGuildWar = 304
|
|
objSubTypeMessageReport = 305
|
|
objSubTypeMessageGReport = 306
|
|
objSubTypeMessageQuest = 307
|
|
objSubTypeMessageFight = 308
|
|
objSubTypeMessageHero = 309
|
|
objSubTypeMessageMe = 310
|
|
objSubTypeMessageInventory = 311
|
|
objSubTypeMessagePillageInc = 312
|
|
objSubTypeMessageTributeInc = 313
|
|
objSubTypeMessagePillageAck = 314
|
|
objSubTypeMessageTributeAck = 315
|
|
objSubTypeMessageAuctionAnnounce = 316
|
|
objSubTypeMessageTime = 317
|
|
objSubTypeJobPillage = 601
|
|
objSubTypeJobTribute = 602
|
|
objSubTypeJobStatus = 603
|
|
objSubTypeJobWithdrawal = 604
|
|
objSubTypeJobGStock = 605
|
|
|
|
MQGetMsgWorkers = 3
|
|
SQLCWMsgWorkers = 6
|
|
SQLIdentifyMsgWorkers = 6
|
|
SQLJobWorkers = 3
|
|
)
|
|
|
|
var (
|
|
chatWarsMonth = map[string]int{
|
|
"Wintar": 1,
|
|
"Hornung": 2,
|
|
"Lenzin": 3,
|
|
"Ōstar": 4,
|
|
"Winni": 5,
|
|
"Brāh": 6,
|
|
"Hewi": 7,
|
|
"Aran": 8,
|
|
"Witu": 9,
|
|
"Wīndume": 10,
|
|
"Herbist": 11,
|
|
"Hailag": 12}
|
|
|
|
chatWarsDaysSpecial = map[int]map[int]int{
|
|
2: {1060: 29},
|
|
4: {1060: 29}}
|
|
|
|
chatWarsDays = map[int]int{
|
|
1: 31,
|
|
2: 28,
|
|
3: 31,
|
|
4: 30,
|
|
5: 31,
|
|
6: 30,
|
|
7: 31,
|
|
8: 31,
|
|
9: 30,
|
|
10: 31,
|
|
11: 30,
|
|
12: 31}
|
|
)
|
|
|
|
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}"))
|
|
day, _ := strconv.Atoi(r.ReplaceAllString(d, "${Day}"))
|
|
log.Printf("fromChatWarsDate : Month : %s\n", r.ReplaceAllString(d, "${Month}"))
|
|
log.Printf("fromChatWarsDate : Year : %s\n", r.ReplaceAllString(d, "${Year}"))
|
|
year, _ := strconv.Atoi(r.ReplaceAllString(d, "${Year}"))
|
|
log.Printf("fromChatWarsDate : Hour : %s\n", r.ReplaceAllString(d, "${Hour}"))
|
|
hour, _ := strconv.Atoi(r.ReplaceAllString(d, "${Hour}"))
|
|
log.Printf("fromChatWarsDate : Minute : %s\n", r.ReplaceAllString(d, "${Minute}"))
|
|
minute, _ := strconv.Atoi(r.ReplaceAllString(d, "${Minute}"))
|
|
days := int(0)
|
|
for i := 1059; i < year; i++ {
|
|
days = 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-10-01T00: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
|
|
}
|