From 5102375a0ebd0e845f063b10bdaa97031b27b1fb Mon Sep 17 00:00:00 2001 From: shoopea Date: Tue, 27 Aug 2019 23:10:57 +0800 Subject: [PATCH] fwd job --- chirpnest.sample.cfg | 8 +++++--- client.go | 11 +++++++++++ def.go | 16 +++++++++++++++- job.go | 25 +++++++++++++++++++++++++ main.go | 8 +++++--- msg.go | 14 ++++++++++---- rules.go | 2 ++ sql.go | 3 +++ workers.go | 2 ++ 9 files changed, 78 insertions(+), 11 deletions(-) diff --git a/chirpnest.sample.cfg b/chirpnest.sample.cfg index da10228..23f5215 100644 --- a/chirpnest.sample.cfg +++ b/chirpnest.sample.cfg @@ -17,6 +17,8 @@ host = localhost:5672 path = chirpnest [bot] -admin = 0 -guildname = Guild -guild = GLD \ No newline at end of file +admin = 0 +guildname = Guild +guild = GLD +mainchat = 0 +depositchat = 0 \ No newline at end of file diff --git a/client.go b/client.go index 055543d..0991598 100644 --- a/client.go +++ b/client.go @@ -30,6 +30,17 @@ func getLockedClient(id int64, createMissing bool) (*ChirpClient, bool) { } } +func clientFwdCWMsg(fromMsgID64 int64, fromChatID64 int64, toChatID64 int64) { + c := TGCommand{ + Type: commandForwardMsg, + FromMsgID64: fromMsgID64, + FromChatID64: fromChatID64, + ToChatID64: toChatID64, + } + MQTGCmdQueue <- c + +} + func clientSendCWMsg(userID64 int64, s string) { clientSendCWMsgDelay(userID64, s, 0) } diff --git a/def.go b/def.go index f077702..48a7aab 100644 --- a/def.go +++ b/def.go @@ -109,6 +109,12 @@ type ChatWarsMessageGStock struct { ItemList []ChatWarsItems `json:"item_list"` } +type ChatWarsMessageGDepositAck struct { + Msg *ChatWarsMessage `json:"msg"` + ItemID64 int64 `json:"item_id"` + Quantity int64 `json:"quantity"` +} + type ChatWarsMessageReportAck struct { ObjID64 int64 `json:"obj_id"` } @@ -268,6 +274,11 @@ type JobPayloadGDeposit struct { Status int `json:"status"` } +type JobPayloadGDepositFwd struct { + ItemID64 int64 `json:"item_id"` + Quantity int64 `json:"quantity"` +} + type JobPayloadSaveRes struct { MsgID64 int64 `json:"msg_id"` ChatID64 int64 `json:"chat_id"` @@ -410,6 +421,8 @@ const ( objSubTypeMessageBusy = 365 // too busy now objSubTypeMessageStockEmpty = 366 // [empty] objSubTypeMessageStockAnyAck = 367 // list of stock + objSubTypeMessageGDepositReq = 368 // /g_deposit xx y (done) + objSubTypeMessageGDepositAck = 369 // Deposited successfully: xx (y) (done) objSubTypeJobPillage = 601 objSubTypeJobTribute = 602 objSubTypeJobStatus = 603 @@ -422,7 +435,8 @@ const ( objSubTypeJobBackupExport = 610 objSubTypeJobBackupImport = 611 objSubTypeJobGDeposit = 612 - objSubTypeJobSaveRes = 613 + objSubTypeJobGDepositForward = 613 + objSubTypeJobSaveRes = 614 objSubTypeItemResource = 701 objSubTypeItemAlch = 702 objSubTypeItemMisc = 703 diff --git a/job.go b/job.go index 569647f..f02d75b 100644 --- a/job.go +++ b/job.go @@ -724,6 +724,31 @@ func jobGStock(j Job) { return } +func jobGDepositForward(j Job) { + var p JobPayloadGDepositFwd + err := setJobStart(j.ID64) + logOnError(err, "jobGDepositForward : setJobStart") + + err = json.Unmarshal(j.Payload, &p) + logOnError(err, "jobGDepositForward : Unmarshal payload") + + msg, err := getObjMsg(j.Trigger) + logOnError(err, "jobGDepositForward : getObjMsg") + rule, err := getMsgParsingRule(msg) + logOnError(err, "jobGDepositForward : getMsgParsingRule") + cwm, err := parseSubTypeMessageGDepositAck(msg, rule.re) + + if cwm.ItemID64 == p.ItemID64 && cwm.Quantity == p.Quantity { + clientFwdCWMsg(cwm.Msg.ID64, cwm.Msg.ChatID64, cfg.Bot.Depositchat) + + err = setJobDone(j.ID64) + logOnError(err, "jobGDeposit : setJobDone") + } else { + setJobCallback(j.ID64, j.UserID64, objSubTypeMessageGDepositAck) + } + return +} + func jobGDeposit(j Job) { var p JobPayloadGDeposit err := setJobStart(j.ID64) diff --git a/main.go b/main.go index cca1486..b2a3c10 100644 --- a/main.go +++ b/main.go @@ -35,9 +35,11 @@ type Config struct { Path string } Bot struct { - Admin int64 - Guildname string - Guild string + Admin int64 + Guildname string + Guild string + Mainchat int64 + Depositchat int64 } } diff --git a/msg.go b/msg.go index a2f8d01..1986397 100644 --- a/msg.go +++ b/msg.go @@ -23,14 +23,20 @@ func getMsgParsingRule(m *ChatWarsMessage) (*MessageParsingRule, error) { } } +func parseSubTypeMessageGDepositAck(m *ChatWarsMessage, r *regexp.Regexp) (*ChatWarsMessageGDepositAck, error) { + cwm := ChatWarsMessageGDepositAck{} + + cwm.Item, _ = getObjItemID(``, r.ReplaceAllString(m.Text, "${Used}")) + cwm.Quantity, _ = strconv.ParseInt(r.ReplaceAllString(m.Text, "${Quantity}"), 10, 64) + + cwm.Msg = m + return &cwm, nil +} + func parseSubTypeMessageStockAck(m *ChatWarsMessage, r *regexp.Regexp) (*ChatWarsMessageStockAck, error) { cwm := ChatWarsMessageStockAck{} items := []ChatWarsItems{} - log.Printf("parseSubTypeMessageReport : Stock Ack identified\n") - log.Printf("parseSubTypeMessageReport : Used : %s\n", r.ReplaceAllString(m.Text, "${Used}")) - log.Printf("parseSubTypeMessageReport : Available : %s\n", r.ReplaceAllString(m.Text, "${Available}")) - re := regexp.MustCompile(`\n([a-zA-Z ]+) \(([0-9]+)\)`) for _, l := range re.FindAllStringSubmatch(r.ReplaceAllString(m.Text, "${Items}"), -1) { i := getObjItemID(``, l[1]) diff --git a/rules.go b/rules.go index 83b1127..c34dece 100644 --- a/rules.go +++ b/rules.go @@ -197,6 +197,8 @@ func resetMsgParsingRules() { ,(5000, ` + strconv.Itoa(objSubTypeMessageBusy) + `, "Too busy now", "^You are too busy with a different adventure. Try a bit later.$") ,(5000, ` + strconv.Itoa(objSubTypeMessageStockEmpty) + `, "Stock Empty", "^\\[empty\\]$") ,(5000, ` + strconv.Itoa(objSubTypeMessageStockAnyAck) + `, "Any Stock Ack", "^$") + ,(5000, ` + strconv.Itoa(objSubTypeMessageGDepositReq) + `, "GDeposit Req", "^/g_deposit (?P[0-9]+) (?P[0-9]+)$") + ,(5000, ` + strconv.Itoa(objSubTypeMessageGDepositAck) + `, "GDeposit Ack", "^Deposited successfully: (?P.+) \\((?P[0-9]+)\\)$") ;`) failOnError(err, "resetMsgParsingRules : populate table msg_rules") } diff --git a/sql.go b/sql.go index 0445a3e..9117587 100644 --- a/sql.go +++ b/sql.go @@ -502,6 +502,8 @@ func initDB() { ,(` + strconv.Itoa(objSubTypeMessageBusy) + `, "busy", "Busy", ` + strconv.Itoa(objTypeMessage) + `) ,(` + strconv.Itoa(objSubTypeMessageStockEmpty) + `, "stock_empty", "Stock Empty", ` + strconv.Itoa(objTypeMessage) + `) ,(` + strconv.Itoa(objSubTypeMessageStockAnyAck) + `, "stock_any_ack", "Stock Any Ack", ` + strconv.Itoa(objTypeMessage) + `) + ,(` + strconv.Itoa(objSubTypeMessageGDepositReq) + `, "g_deposit_req", "GDeposit Req", ` + strconv.Itoa(objTypeMessage) + `) + ,(` + strconv.Itoa(objSubTypeMessageGDepositAck) + `, "g_deposit_ack", "GDeposit Ack", ` + strconv.Itoa(objTypeMessage) + `) ,(` + strconv.Itoa(objSubTypeJobPillage) + `, "job_pillage", "Pillage job", ` + strconv.Itoa(objTypeJob) + `) ,(` + strconv.Itoa(objSubTypeJobTribute) + `, "job_tribute", "Tribute job", ` + strconv.Itoa(objTypeJob) + `) ,(` + strconv.Itoa(objSubTypeJobWithdrawal) + `, "job_withdraw", "Withdrawal job", ` + strconv.Itoa(objTypeJob) + `) @@ -513,6 +515,7 @@ func initDB() { ,(` + strconv.Itoa(objSubTypeJobBackupExport) + `, "job_backup_export", "Export Backup", ` + strconv.Itoa(objTypeJob) + `) ,(` + strconv.Itoa(objSubTypeJobBackupImport) + `, "job_backup_import", "Import Backup", ` + strconv.Itoa(objTypeJob) + `) ,(` + strconv.Itoa(objSubTypeJobGDeposit) + `, "job_gdeposit", "GDeposit job", ` + strconv.Itoa(objTypeJob) + `) + ,(` + strconv.Itoa(objSubTypeJobGDepositForward) + `, "job_gdeposit_fwd", "GDeposit Forward job", ` + strconv.Itoa(objTypeJob) + `) ,(` + strconv.Itoa(objSubTypeJobSaveRes) + `, "job_save_res", "Save resources job", ` + strconv.Itoa(objTypeJob) + `) ,(` + strconv.Itoa(objSubTypeItemResource) + `, "item_res", "Time", ` + strconv.Itoa(objTypeItem) + `) ,(` + strconv.Itoa(objSubTypeItemAlch) + `, "item_alch", "Time", ` + strconv.Itoa(objTypeItem) + `) diff --git a/workers.go b/workers.go index b6e8fb2..a297677 100644 --- a/workers.go +++ b/workers.go @@ -533,6 +533,8 @@ func JobWorker(id int, jobs <-chan Job) { jobGStock(j) case objSubTypeJobGDeposit: jobGDeposit(j) + case objSubTypeJobGDepositForward: + jobGDepositForward(j) default: log.Printf("jobWorker["+strconv.Itoa(id)+"] : No handler for job type #%d.\n", j.JobTypeID) }