From b4f1c7dd86f80ec45ab2c31557d2e9759fadaf72 Mon Sep 17 00:00:00 2001 From: shoopea Date: Fri, 19 Jun 2020 21:28:59 +0200 Subject: [PATCH] test get stash --- bot.go | 64 +++++++++++++++++++++++++++++++++++++ data/code_obj_sub_type.json | 10 ++++++ def.go | 7 ++++ job.go | 18 +++++++++++ rules.go | 11 +++++++ workers.go | 4 +++ 6 files changed, 114 insertions(+) diff --git a/bot.go b/bot.go index f801a3b..e413687 100644 --- a/bot.go +++ b/bot.go @@ -1073,6 +1073,70 @@ func botCraftAll(m *ChatWarsMessage, r *regexp.Regexp) { return } +func botGetStash(m *ChatWarsMessage, r *regexp.Regexp) { + if hasUnfinishedJob(cacheObjSubType[`job_get_stash`]) { + c := TGCommand{ + Type: commandReplyMsg, + Text: "Get Stash is already running", + FromMsgID64: m.ID64, + FromChatID64: m.ChatID64, + } + TGCmdQueue <- c + return + } + + p := JobPayloadGetStash{ + MsgID64: m.ID64, + ChatID64: m.ChatID64, + ClientCount: 0, + } + + busy := time.Now().UTC() + muxClients.RLock() + for _, c := range clients { + if c.Active { + p.ClientCount++ + p.ClientID64 = append(p.ClientID64, c.TGUserID64) + if c.CWBusyUntil > busy { + busy = c.CWBusyUntil + } + } + } + muxClients.RUnlock() + + b, _ := json.Marshal(p) + t := time.Now().UTC().Add(1 * time.Second) + _, err = createJob(cacheObjSubType[`job_get_stash`], objJobPriority, userID64, 0, t, b) + + if err != nil { + c := TGCommand{ + Type: commandReplyMsg, + Text: fmt.Sprintf("%s", err), + FromMsgID64: m.ID64, + FromChatID64: m.ChatID64, + } + TGCmdQueue <- c + } else if busy.After(time.Now().UTC()) { + c := TGCommand{ + Type: commandReplyMsg, + Text: fmt.Sprintf("Clients busy, delayed for %v.", busy.Sub(time.Now().UTC())), + FromMsgID64: m.ID64, + FromChatID64: m.ChatID64, + } + TGCmdQueue <- c + } else { + c := TGCommand{ + Type: commandReplyMsg, + Text: "Stash coming.", + FromMsgID64: m.ID64, + FromChatID64: m.ChatID64, + } + TGCmdQueue <- c + } + + return +} + func botSaveRes(m *tb.Message) { if !m.Private() { return diff --git a/data/code_obj_sub_type.json b/data/code_obj_sub_type.json index ccc9b8c..a6778b6 100644 --- a/data/code_obj_sub_type.json +++ b/data/code_obj_sub_type.json @@ -649,6 +649,11 @@ "name": "Craft check for all items", "obj_type": "msg" }, + { + "intl_id": "msg_bot_get_stash", + "name": "List exchange deals on hold", + "obj_type": "msg" + }, { "intl_id": "msg_bot_shops", "name": "Check all shops", @@ -839,6 +844,11 @@ "name": "Craft all items summary job", "obj_type": "job" }, + { + "intl_id": "job_get_stash", + "name": "Get Stash job", + "obj_type": "job" + }, { "intl_id": "job_alch_all", "name": "Craft all items in stock job", diff --git a/def.go b/def.go index bf4109a..1e38773 100644 --- a/def.go +++ b/def.go @@ -624,6 +624,13 @@ type JobPayloadShopsSlave struct { Slaves int64 `json:"slaves"` } +type JobPayloadGetStash struct { + ClientID64 []int64 `json:"clients_id"` + ClientCount int64 `json:"client_count"` + Stock []ChatWarsItems `json:"stock"` + CleanupMsg []ChatWarsMessage `json:"cleanup_msg"` +} + const ( userID64ChtWrsBot = 408101137 diff --git a/job.go b/job.go index 0487820..f98db83 100644 --- a/job.go +++ b/job.go @@ -2069,6 +2069,24 @@ func jobCraftItem(j Job) { } +func jobGetStash(j Job) { + var ( + p JobPayloadGetStash + ) + + err := setJobStart(j.ID64) + logOnError(err, "jobGetStash : setJobStart") + + err = json.Unmarshal(j.Payload, &p) + logOnError(err, "jobGetStash : Unmarshal payload") + + err = setJobDone(j.ID64) + logOnError(err, "jobGetStash : setJobDone") + + return + +} + func jobAlchAll(j Job) { var ( p JobPayloadAlchAll diff --git a/rules.go b/rules.go index 9d31ec1..63a0d66 100644 --- a/rules.go +++ b/rules.go @@ -191,6 +191,17 @@ func resetMsgParsingRules() error { SenderUserID64: users[id], } rules2 = append(rules2, r) + + r = MessageParsingRule{ + Priority: 9999, + Description: "List exchange deals on hold", + Rule: "^/stash$", + MsgTypeID64: cacheObjSubType[`msg_bot_get_stash`], + ChatID64: chats[id], + SenderUserID64: users[id], + } + rules2 = append(rules2, r) + } // chats diff --git a/workers.go b/workers.go index 6cefed4..16d5c84 100644 --- a/workers.go +++ b/workers.go @@ -530,6 +530,8 @@ func SQLIdentifyMsgWorker(id int, objIds <-chan int64) { botCraftItem(m, rule.re) case cacheObjSubType[`msg_bot_craft_all`]: botCraftAll(m, rule.re) + case cacheObjSubType[`msg_bot_get_stash`]: + botGetStash(m, rule.re) case cacheObjSubType[`msg_tributes_stats_req`]: case cacheObjSubType[`msg_tributes_stats_ack`]: cwm, err := parseSubTypeMessageTributesStatsAck(m, rule.re) @@ -665,6 +667,8 @@ func JobWorker(id int, jobs <-chan Job) { jobGetVault(j) case cacheObjSubType[`job_craft_item`]: jobCraftItem(j) + case cacheObjSubType[`job_get_stash`]: + jobGetStash(j) case cacheObjSubType[`job_craft_all`]: jobCraftAll(j) case cacheObjSubType[`job_check_vault_limit`]: