From a9a0d5f43ec2b437abb8385be2c02c7597de71ae Mon Sep 17 00:00:00 2001 From: shoopea Date: Thu, 19 Dec 2019 11:31:28 +0800 Subject: [PATCH] test time parsing --- cron.go | 6 +++++- def.go | 16 ++++++++++++++++ job.go | 24 ++++++++++++++++++++++++ msg.go | 16 ++++++++++++++++ rules.go | 8 +++++++- workers.go | 6 ++++-- 6 files changed, 72 insertions(+), 4 deletions(-) diff --git a/cron.go b/cron.go index 2fd5a2a..b72a731 100644 --- a/cron.go +++ b/cron.go @@ -57,10 +57,14 @@ func cronSetDef() { func cronGetHammerTime() { clt, err := getLockedRandomClient() - logOnError(err, "cronGetHammerTime") + logOnError(err, "cronGetHammerTime : getLockedRandomClient") if err != nil { return } clt.Mux.Unlock() + p := JobPayloadGetHammertime{} + b, _ := json.Marshal(&p) + err = createJobCallback(objSubTypeJobGetHammerTime, clt.TGUserID64, objSubTypeMessageTimeAck, b, 1*time.Minute) + logOnError(err, "cronGetHammerTime : createJobCallback") clientSendCWMsgDelay(clt.TGUserID64, `/time`, 0) } diff --git a/def.go b/def.go index c2ec224..0910538 100644 --- a/def.go +++ b/def.go @@ -266,6 +266,18 @@ type ChatWarsMessagePillageInc struct { type ChatWarsMessageUnionWar struct { } +type ChatWarsMessageTimeAck struct { + RealTime time.Time `json:"real_time"` + TimeOfDay string `json:"time_of_day"` + Hour int64 `json:"hour"` + Minute int64 `json:"minute"` + Day int64 `json:"day"` + Month int64 `json:"month"` + Year int64 `json:"year"` + Weather string `json:"weather"` + WeatherNext string `json:"weather_next"` +} + type MessageParsingRule struct { ID int32 Priority int32 @@ -291,6 +303,9 @@ type Job struct { Payload []byte } +type JobPayloadGetHammerTime struct { +} + type JobPayloadSetDef struct { } @@ -548,6 +563,7 @@ const ( objSubTypeJobFwdMsg = 617 // rename to objSubTypeJobMsgFwd objSubTypeJobSetDef = 618 objSubTypeJobMsgDel = 619 + objSubTypeJobGetHammerTime = 620 objSubTypeItemResource = 701 objSubTypeItemAlch = 702 objSubTypeItemMisc = 703 diff --git a/job.go b/job.go index 49967fd..7faaf9c 100644 --- a/job.go +++ b/job.go @@ -1335,3 +1335,27 @@ func jobSetDef(j Job) { return } + +func jobGetHammerTime(j Job) { + var p JobPayloadSetDef + err := setJobStart(j.ID64) + logOnError(err, "jobGetHammerTime : setJobStart") + + err = json.Unmarshal(j.Payload, &p) + logOnError(err, "jobGetHammerTime : Unmarshal payload") + + msg, err := getObjMsg(j.Trigger) + logOnError(err, "jobGetHammerTime : getObjMsg msg") + rule, err := getMsgParsingRule(msg) + logOnError(err, "jobGetHammerTime : getMsgParsingRule") + cwm, err := parseSubTypeMessageTimeAck(msg, rule.re) + + if cwm.State == `🛌Rest` { + clientSendCWMsg(j.UserID64, `🛡Defend`) + } + + err = setJobDone(j.ID64) + logOnError(err, "jobSetDef : setJobDone") + + return +} diff --git a/msg.go b/msg.go index 19c59fa..a3cbf49 100644 --- a/msg.go +++ b/msg.go @@ -427,6 +427,22 @@ func parseSubTypeMessageDuelFight(m *ChatWarsMessage, r *regexp.Regexp) (*ChatWa return &cwm, nil } +func parseSubTypeMessageTimeAck(m *ChatWarsMessage, r *regexp.Regexp) (*ChatWarsMessageTimeAck, error) { + cwm := ChatWarsMessageTimeAck{} + t, err = fromChatWarsDate(r.ReplaceAllString(m.Text, "${Day}") + " " + r.ReplaceAllString(m.Text, "${Month}") + " " + r.ReplaceAllString(m.Text, "${Year}") + " " + r.ReplaceAllString(m.Text, "${Hour}") + ":" + r.ReplaceAllString(m.Text, "${Minute}")) + logOnError(err, "parseSubTypeMessageTimeAck : fromChatWarsDate") + cwm.RealTime = t + cwm.TimeOfDay = r.ReplaceAllString(m.Text, "${Time}") + cwm.Hour, _ = strconv.ParseInt(r.ReplaceAllString(m.Text, "${Hour}"), 10, 64) + cwm.Minute, _ = strconv.ParseInt(r.ReplaceAllString(m.Text, "${Minute}"), 10, 64) + cwm.Day, _ = strconv.ParseInt(r.ReplaceAllString(m.Text, "${Day}"), 10, 64) + cwm.Month = chatWarsMonth[r.ReplaceAllString(d, "${Month}")] + cwm.Year, _ = strconv.ParseInt(r.ReplaceAllString(m.Text, "${Year}"), 10, 64) + cwm.Weather = r.ReplaceAllString(m.Text, "${Weather}") + cwm.WeatherNext = r.ReplaceAllString(m.Text, "${WeatherNext}") + return cwm, nil +} + func parseSubTypeMessageQuestResultAmbush(m *ChatWarsMessage, r *regexp.Regexp) (*ChatWarsMessageQuestResultAmbush, error) { var lvlSum, qtySum int64 diff --git a/rules.go b/rules.go index cc511f9..eb8ff6a 100644 --- a/rules.go +++ b/rules.go @@ -25,7 +25,13 @@ func resetMsgParsingRules() { `End At: (?P.*)\\n` + `Status: (?P.*)(\\n)` + `*(?s:.*)") - ,(5000, ` + strconv.Itoa(objSubTypeMessageTimeAck) + `, "Time", "^In Chat Wars world now\\n(?P