From e3f360d66583e50ecd054022e7f2e7a888858b05 Mon Sep 17 00:00:00 2001 From: shoopea Date: Tue, 21 Jan 2020 14:01:45 +0800 Subject: [PATCH 01/14] test inspect --- data/code_obj_sub_type.json | 15 +++++++++++++++ data/msg_rules.json | 24 ++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/data/code_obj_sub_type.json b/data/code_obj_sub_type.json index 2e9713b..ed60dac 100644 --- a/data/code_obj_sub_type.json +++ b/data/code_obj_sub_type.json @@ -34,6 +34,21 @@ "name": "Guild withdraw conf ack", "obj_type": "msg" }, + { + "intl_id": "msg_g_inspect_req", + "name": "Guild inspect reg", + "obj_type": "msg" + }, + { + "intl_id": "msg_inspect_ack", + "name": "Item inspect ack", + "obj_type": "msg" + }, + { + "intl_id": "msg_invalid_action", + "name": "Item inspect ack", + "obj_type": "msg" + }, { "intl_id": "msg_war", "name": "War report", diff --git a/data/msg_rules.json b/data/msg_rules.json index ef770c6..014590e 100644 --- a/data/msg_rules.json +++ b/data/msg_rules.json @@ -1830,5 +1830,29 @@ "msg_type": "msg_ny2020_battle", "chat_id": -1001198527605, "user_id": 841616455 + }, + { + "prio": 5000, + "descn": "Invalid action", + "rule": "^\\[invalid action\\]$", + "msg_type": "msg_invalid_action", + "chat_id": 0, + "user_id": 0 + }, + { + "prio": 5000, + "descn": "Guild inspect req", + "rule": "^/g_inspect_(?P[a-z0-9]+)$", + "msg_type": "msg_g_inspect_req", + "chat_id": 0, + "user_id": 0 + }, + { + "prio": 5000, + "descn": "Item inspect ack", + "rule": "^Item: (?P .*)$", + "msg_type": "msg_inspect_ack", + "chat_id": 0, + "user_id": 0 } ] \ No newline at end of file From 94a03fdaa6af7194a3ff6ea510f0edbb44f27524 Mon Sep 17 00:00:00 2001 From: shoopea Date: Tue, 21 Jan 2020 14:03:35 +0800 Subject: [PATCH 02/14] test --- data/msg_rules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/msg_rules.json b/data/msg_rules.json index 014590e..9d72b51 100644 --- a/data/msg_rules.json +++ b/data/msg_rules.json @@ -1850,7 +1850,7 @@ { "prio": 5000, "descn": "Item inspect ack", - "rule": "^Item: (?P .*)$", + "rule": "^Item: (?P.*)$", "msg_type": "msg_inspect_ack", "chat_id": 0, "user_id": 0 From 6c2b48620aed9b071d0fe23a3a574e0d07ac87e0 Mon Sep 17 00:00:00 2001 From: shoopea Date: Tue, 21 Jan 2020 14:14:58 +0800 Subject: [PATCH 03/14] update payload job --- job.go | 28 +++++++++++++++++----------- sql.go | 1 + 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/job.go b/job.go index 26c08a2..d05c12d 100644 --- a/job.go +++ b/job.go @@ -145,7 +145,7 @@ func setJobPayload(jobID64 int64, payload []byte) error { return errors.New("payload too long") } - stmt, err := db.Prepare(`UPDATE obj_job j SET j.payload = ? WHERE j.obj_id = ?;`) + stmt, err := db.Prepare(`UPDATE obj_job j SET j.payload = ?, j.zipped = 1 WHERE j.obj_id = ?;`) logOnError(err, "setJobTimeout : prepare update obj_job") if err != nil { return err @@ -227,6 +227,7 @@ func loadCurrentJobs() ([]Job, error) { userID64 int64 trigger int64 timeout time.Time + zipped int zpayload []byte jobs []Job ) @@ -240,7 +241,7 @@ func loadCurrentJobs() ([]Job, error) { return jobs, err } - stmt, err := db.Prepare("SELECT o.id, o.obj_sub_type_id, j.trigger_id, j.user_id, j.payload, j.timeout FROM obj_job j, obj o WHERE j.obj_id = o.id AND j.is_done = 0 AND j.in_work = 1 AND j.seq_nr = ? ORDER BY j.priority ASC, j.obj_id ASC;") + stmt, err := db.Prepare("SELECT o.id, o.obj_sub_type_id, j.trigger_id, j.user_id, j.zipped, j.payload, j.timeout FROM obj_job j, obj o WHERE j.obj_id = o.id AND j.is_done = 0 AND j.in_work = 1 AND j.seq_nr = ? ORDER BY j.priority ASC, j.obj_id ASC;") logOnError(err, "loadCurrentJobs : prepare select statement") if err != nil { stmt.Close() @@ -256,18 +257,23 @@ func loadCurrentJobs() ([]Job, error) { } for rows.Next() { - err = rows.Scan(&objId, &jobTypeID64, &trigger, &userID64, &zpayload, &timeout) + err = rows.Scan(&objId, &jobTypeID64, &trigger, &userID64, &zipped, &zpayload, &timeout) logOnError(err, "loadCurrentJobs : scan query rows") - zb := bytes.NewReader(zpayload) - zr, err := zlib.NewReader(zb) - if err != nil { - logOnError(err, "loadCurrentJobs : zlib.NewReader") - continue + var payload []byte + if zipped > 0 { + zb := bytes.NewReader(zpayload) + zr, err := zlib.NewReader(zb) + if err != nil { + logOnError(err, "loadCurrentJobs : zlib.NewReader") + continue + } + b := new(bytes.Buffer) + b.ReadFrom(zr) + payload = b.Bytes() + } else { + payload = zpayload } - b := new(bytes.Buffer) - b.ReadFrom(zr) - payload := b.Bytes() job := Job{ ID64: objId, diff --git a/sql.go b/sql.go index e8b0550..b1766b2 100644 --- a/sql.go +++ b/sql.go @@ -385,6 +385,7 @@ func initDB() { ,started TIMESTAMP ,ended TIMESTAMP ,timeout TIMESTAMP + ,zipped TINYINT NOT NULL ,payload VARBINARY(20000) ,FOREIGN KEY (obj_id) REFERENCES obj(id) ON DELETE CASCADE ,KEY (is_done) From 0e4ca45b800385bf0ae9f00647f4d4ab5c457195 Mon Sep 17 00:00:00 2001 From: shoopea Date: Tue, 21 Jan 2020 14:18:23 +0800 Subject: [PATCH 04/14] update jobs --- job.go | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/job.go b/job.go index d05c12d..3535b57 100644 --- a/job.go +++ b/job.go @@ -23,12 +23,23 @@ import ( ) func createJob(jobTypeID64 int64, priority int32, userID64 int64, trigger int64, schedule time.Time, payload []byte) (int64, error) { - var zb bytes.Buffer - zw := zlib.NewWriter(&zb) - zw.Write(payload) - zw.Close() - zpayload := zb.Bytes() + var ( + zb bytes.Buffer + zpayload []byte + zipped int + ) + + if len(payload) > 10000 { + zw := zlib.NewWriter(&zb) + zw.Write(payload) + zw.Close() + zpayload = zb.Bytes() + zipped = 1 + } else { + zpayload = payload + zipped = 0 + } if len(zpayload) > 20000 { return 0, errors.New("payload too long") @@ -55,15 +66,15 @@ func createJob(jobTypeID64 int64, priority int32, userID64 int64, trigger int64, return 0, err } - stmt, err = db.Prepare(`INSERT INTO obj_job (obj_id, priority, user_id, trigger_id, seq_nr, schedule, is_done, in_work, inserted, timeout, pulled, started, ended, payload) - VALUES (?, ?, ?, ?, NULL, ?, 0, 0, ?, ?, NULL, NULL, NULL, ?);`) + stmt, err = db.Prepare(`INSERT INTO obj_job (obj_id, priority, user_id, trigger_id, seq_nr, schedule, is_done, in_work, inserted, timeout, pulled, started, ended, zipped, payload) + VALUES (?, ?, ?, ?, NULL, ?, 0, 0, ?, ?, NULL, NULL, NULL, ?, ?);`) logOnError(err, "createJob : prepare insert obj_job") if err != nil { return 0, err } defer stmt.Close() - _, err = stmt.Exec(objId, priority, userID64, trigger, schedule.UTC(), time.Now().UTC(), time.Unix(maxUnixTimestamp, 0).UTC(), zpayload) + _, err = stmt.Exec(objId, priority, userID64, trigger, schedule.UTC(), time.Now().UTC(), time.Unix(maxUnixTimestamp, 0).UTC(), zipped, zpayload) logOnError(err, "createJob : insert obj_job") if err != nil { return 0, err From 1d2af2ee69c2f82dbbf37467beeba390e3207a0d Mon Sep 17 00:00:00 2001 From: shoopea Date: Tue, 21 Jan 2020 15:40:32 +0800 Subject: [PATCH 05/14] test g withdraw inspect --- job.go | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/job.go b/job.go index 3535b57..62f7288 100644 --- a/job.go +++ b/job.go @@ -1432,9 +1432,10 @@ func jobVaultUserStatus(j Job) { func jobGWithdraw(j Job) { var ( - p JobPayloadGWithdraw - reqTab map[int64]int64 - doneTab map[int64]int64 + p JobPayloadGWithdraw + reqTab map[int64]int64 + doneTab map[int64]int64 + inspectTab map[string]bool ) log.Printf("jobGWithdraw[%d] : Starting.\n", j.ID64) @@ -1455,6 +1456,8 @@ func jobGWithdraw(j Job) { doneTab[cacheObjSubType[`item_part`]] = 1 << 14 doneTab[cacheObjSubType[`item_other`]] = 1 << 15 + inspectTab = make(map[string]bool) + err := setJobStart(j.ID64) logOnError(err, "jobGWithdraw : setJobStart") @@ -1462,12 +1465,13 @@ func jobGWithdraw(j Job) { logOnError(err, "jobGWithdraw : Unmarshal payload") if p.Status == 0 { - for _, item := range p.Items { + for k, item := range p.Items { id := getSilentObjItemID(item.Code, ``) if id != 0 { obj, _ := getObjItem(id) p.Status = p.Status | reqTab[obj.ItemTypeID] } else if ok, _ := regexp.MatchString(`^u[0-9]+$`, item.Code); ok { + p.Items[k].Inspect = true p.Status = p.Status | reqTab[cacheObjSubType[`item_other`]] } } @@ -1497,6 +1501,7 @@ func jobGWithdraw(j Job) { logOnError(err, "jobGWithdraw : getObjSubType("+strconv.FormatInt(j.Trigger, 10)+")") if err == nil { if id == cacheObjSubType[`msg_gstock_any_ack`] { + var isUnique bool m, err := getObjMsg(j.Trigger) logOnError(err, "jobGWithdraw : getObjMsg") rule, err := getMsgParsingRule(m) @@ -1509,8 +1514,12 @@ func jobGWithdraw(j Job) { if req.Code == disp.Code { p.Items[k].Available = disp.Quantity p.Items[k].Name = disp.Name + p.Items[k].Inspect = false log.Printf("jobGWithdraw[%d] : Found %s - %s : %d.\n", j.ID64, disp.Code, disp.Name, disp.Quantity) } + if ok, _ := regexp.MatchString(`^u[0-9]+$`, disp.Code); ok { + isUnique = true + } } } @@ -1520,6 +1529,31 @@ func jobGWithdraw(j Job) { } b2, _ := json.Marshal(p2) createJob(cacheObjSubType[`job_msg_del`], objJobPriority, j.UserID64, 0, time.Now().UTC(), b2) + + for k, req := range p.Items { + if req.Inspect { + p2 = JobPayloadMsgDel{ + MsgTypeID64: cacheObjSubType[`msg_g_inspect_req`], + Delay: (10 * time.Second), + ObjMsgID64: 0, + } + b2, _ = json.Marshal(p2) + createJobCallback(cacheObjSubType[`job_msg_del`], j.UserID64, p2.MsgTypeID64, b2, time.Minute) + + p.Inspecting = req.Code + b, _ := json.Marshal(p) + + id, err := createJob(cacheObjSubType[`job_gwithdraw`], objJobPriority, j.UserID64, 0, time.Unix(maxUnixTimestamp, 0).UTC(), b) + logOnError(err, "jobGWithdraw : createJob") + setJobCallback(id, int64(bot.Me.ID), cacheObjSubType[`msg_invalid_action`]) + setJobCallback(id, int64(bot.Me.ID), cacheObjSubType[`msg_inspect_ack`]) + clientSendCWMsg(j.UserID64, fmt.Sprintf("/g_inspect_%s", p.Inspecting)) + err = setJobDone(j.ID64) + logOnError(err, "jobGWithdraw : setJobDone") + return + } + } + } if id == cacheObjSubType[`msg_msg_job_gwithdraw_ack`] { From 1c28877a711e5d0fd51d303f54c9197211dc974c Mon Sep 17 00:00:00 2001 From: shoopea Date: Tue, 21 Jan 2020 15:40:47 +0800 Subject: [PATCH 06/14] fix def --- def.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/def.go b/def.go index 1608998..c43d2e0 100644 --- a/def.go +++ b/def.go @@ -408,6 +408,7 @@ type JobPayloadGWithdrawItem struct { Name string `json:"name"` Available int64 `json:"available"` Required int64 `json:"required"` + Inspect bool `json:"inspect"` } type JobPayloadGWithdraw struct { @@ -418,6 +419,7 @@ type JobPayloadGWithdraw struct { Status int64 `json:"status"` CleanupMsg []ChatWarsMessage `json:"cleanup_msg"` Validated bool `json:"validated"` + Inspecting string `json:"inspecting"` } type JobPayloadGDeposit struct { From 9b5fac7dde9f1e8b5008a558ad93a9713e571fcc Mon Sep 17 00:00:00 2001 From: shoopea Date: Tue, 21 Jan 2020 15:41:36 +0800 Subject: [PATCH 07/14] fix unique --- job.go | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/job.go b/job.go index 62f7288..1ce7516 100644 --- a/job.go +++ b/job.go @@ -1530,30 +1530,31 @@ func jobGWithdraw(j Job) { b2, _ := json.Marshal(p2) createJob(cacheObjSubType[`job_msg_del`], objJobPriority, j.UserID64, 0, time.Now().UTC(), b2) - for k, req := range p.Items { - if req.Inspect { - p2 = JobPayloadMsgDel{ - MsgTypeID64: cacheObjSubType[`msg_g_inspect_req`], - Delay: (10 * time.Second), - ObjMsgID64: 0, + if isUnique { + for k, req := range p.Items { + if req.Inspect { + p2 = JobPayloadMsgDel{ + MsgTypeID64: cacheObjSubType[`msg_g_inspect_req`], + Delay: (10 * time.Second), + ObjMsgID64: 0, + } + b2, _ = json.Marshal(p2) + createJobCallback(cacheObjSubType[`job_msg_del`], j.UserID64, p2.MsgTypeID64, b2, time.Minute) + + p.Inspecting = req.Code + b, _ := json.Marshal(p) + + id, err := createJob(cacheObjSubType[`job_gwithdraw`], objJobPriority, j.UserID64, 0, time.Unix(maxUnixTimestamp, 0).UTC(), b) + logOnError(err, "jobGWithdraw : createJob") + setJobCallback(id, int64(bot.Me.ID), cacheObjSubType[`msg_invalid_action`]) + setJobCallback(id, int64(bot.Me.ID), cacheObjSubType[`msg_inspect_ack`]) + clientSendCWMsg(j.UserID64, fmt.Sprintf("/g_inspect_%s", p.Inspecting)) + err = setJobDone(j.ID64) + logOnError(err, "jobGWithdraw : setJobDone") + return } - b2, _ = json.Marshal(p2) - createJobCallback(cacheObjSubType[`job_msg_del`], j.UserID64, p2.MsgTypeID64, b2, time.Minute) - - p.Inspecting = req.Code - b, _ := json.Marshal(p) - - id, err := createJob(cacheObjSubType[`job_gwithdraw`], objJobPriority, j.UserID64, 0, time.Unix(maxUnixTimestamp, 0).UTC(), b) - logOnError(err, "jobGWithdraw : createJob") - setJobCallback(id, int64(bot.Me.ID), cacheObjSubType[`msg_invalid_action`]) - setJobCallback(id, int64(bot.Me.ID), cacheObjSubType[`msg_inspect_ack`]) - clientSendCWMsg(j.UserID64, fmt.Sprintf("/g_inspect_%s", p.Inspecting)) - err = setJobDone(j.ID64) - logOnError(err, "jobGWithdraw : setJobDone") - return } } - } if id == cacheObjSubType[`msg_msg_job_gwithdraw_ack`] { From d52e58493a0884c39666c4c58214999790d149a1 Mon Sep 17 00:00:00 2001 From: shoopea Date: Tue, 21 Jan 2020 15:42:17 +0800 Subject: [PATCH 08/14] test --- job.go | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/job.go b/job.go index 1ce7516..5922b84 100644 --- a/job.go +++ b/job.go @@ -1432,10 +1432,9 @@ func jobVaultUserStatus(j Job) { func jobGWithdraw(j Job) { var ( - p JobPayloadGWithdraw - reqTab map[int64]int64 - doneTab map[int64]int64 - inspectTab map[string]bool + p JobPayloadGWithdraw + reqTab map[int64]int64 + doneTab map[int64]int64 ) log.Printf("jobGWithdraw[%d] : Starting.\n", j.ID64) @@ -1456,8 +1455,6 @@ func jobGWithdraw(j Job) { doneTab[cacheObjSubType[`item_part`]] = 1 << 14 doneTab[cacheObjSubType[`item_other`]] = 1 << 15 - inspectTab = make(map[string]bool) - err := setJobStart(j.ID64) logOnError(err, "jobGWithdraw : setJobStart") @@ -1531,7 +1528,7 @@ func jobGWithdraw(j Job) { createJob(cacheObjSubType[`job_msg_del`], objJobPriority, j.UserID64, 0, time.Now().UTC(), b2) if isUnique { - for k, req := range p.Items { + for _, req := range p.Items { if req.Inspect { p2 = JobPayloadMsgDel{ MsgTypeID64: cacheObjSubType[`msg_g_inspect_req`], From e99839e67a605ebe555ede22bef4d91f3504811a Mon Sep 17 00:00:00 2001 From: shoopea Date: Tue, 21 Jan 2020 15:46:27 +0800 Subject: [PATCH 09/14] update load obj job --- obj.go | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/obj.go b/obj.go index 672c7d6..e33fe4b 100644 --- a/obj.go +++ b/obj.go @@ -1085,20 +1085,21 @@ func loadObjJob() error { timeout time.Time user int64 zpayload []byte + zipped int ) muxObjJob.Lock() cacheObjJob = make(map[int64]Job) muxObjJob.Unlock() - jobs, err := db.Query(`SELECT o.id, o.obj_sub_type_id, oj.trigger_id, oj.timeout, oj.user_id, oj.payload FROM obj o, obj_job oj WHERE o.id = oj.obj_id;;`) + jobs, err := db.Query(`SELECT o.id, o.obj_sub_type_id, oj.trigger_id, oj.timeout, oj.user_id, oj.zipped, oj.payload FROM obj o, obj_job oj WHERE o.id = oj.obj_id;;`) if err != nil { return err } defer jobs.Close() for jobs.Next() { - err = jobs.Scan(&id, &type_id, &trigger, &timeout, &user, &zpayload) + err = jobs.Scan(&id, &type_id, &trigger, &timeout, &user, &zipped, &zpayload) if err != nil { return err } @@ -1109,16 +1110,20 @@ func loadObjJob() error { j.Timeout = timeout j.UserID64 = user - zb := bytes.NewReader(zpayload) - zr, err := zlib.NewReader(zb) - if err != nil { - logOnError(err, "loadObjJob : zlib.NewReader") - continue + if zipped > 0 { + zb := bytes.NewReader(zpayload) + zr, err := zlib.NewReader(zb) + if err != nil { + logOnError(err, "loadObjJob : zlib.NewReader") + continue + } + b := new(bytes.Buffer) + b.ReadFrom(zr) + payload := b.Bytes() + j.Payload = payload + } else { + j.Payload = zpayload } - b := new(bytes.Buffer) - b.ReadFrom(zr) - payload := b.Bytes() - j.Payload = payload muxObjJob.Lock() cacheObjJob[id] = *j From 16b3a70c968d97d8b1564cc6a2797fe781443b0f Mon Sep 17 00:00:00 2001 From: shoopea Date: Wed, 22 Jan 2020 17:07:14 +0800 Subject: [PATCH 10/14] update job --- def.go | 4 ++++ job.go | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ msg.go | 7 ++++++ 3 files changed, 76 insertions(+), 7 deletions(-) diff --git a/def.go b/def.go index c43d2e0..823e132 100644 --- a/def.go +++ b/def.go @@ -334,6 +334,10 @@ type ChatWarsMessageTimeAck struct { WeatherNext string `json:"weather_next"` } +type ChatWarsMessageInspectAck struct { + Name string `json:"name"` +} + type ChatWarsMessageJobGWithdrawAck struct { Msg *ChatWarsMessage `json:"msg"` Ref string `json:"ref"` diff --git a/job.go b/job.go index 5922b84..98cc47a 100644 --- a/job.go +++ b/job.go @@ -1520,12 +1520,11 @@ func jobGWithdraw(j Job) { } } - p2 := JobPayloadMsgDel{ - Delay: (10 * time.Second), - ObjMsgID64: j.Trigger, + m, err := getObjMsg(j.Trigger) + logOnError(err, "jobGWithdraw : getObjMsg") + if err == nil { + p.CleanupMsg = append(p.CleanupMsg, *m) } - b2, _ := json.Marshal(p2) - createJob(cacheObjSubType[`job_msg_del`], objJobPriority, j.UserID64, 0, time.Now().UTC(), b2) if isUnique { for _, req := range p.Items { @@ -1552,9 +1551,68 @@ func jobGWithdraw(j Job) { } } } - } + } else if id == cacheObjSubType[`msg_inspect_ack`] { + m, err := getObjMsg(j.Trigger) + logOnError(err, "jobGWithdraw : getObjMsg") + rule, err := getMsgParsingRule(m) + logOnError(err, "jobGWithdraw : getMsgParsingRule") + cwm, err := parseSubTypeMessageInspectAck(m, rule.re) + logOnError(err, "jobGWithdraw : parseSubTypeMessageInspectAck") + for k, req := range p.Items { + if req.Code == p.Inspecting { + p.Items[k].Available = 1 + p.Items[k].Name = cwm.Name + p.Items[k].Inspect = false + break + } + } + p.Inspecting = `` - if id == cacheObjSubType[`msg_msg_job_gwithdraw_ack`] { + m, err := getObjMsg(j.Trigger) + logOnError(err, "jobGWithdraw : getObjMsg") + if err == nil { + p.CleanupMsg = append(p.CleanupMsg, *m) + } + + for _, req := range p.Items { + if req.Inspect { + p2 = JobPayloadMsgDel{ + MsgTypeID64: cacheObjSubType[`msg_g_inspect_req`], + Delay: (10 * time.Second), + ObjMsgID64: 0, + } + b2, _ = json.Marshal(p2) + createJobCallback(cacheObjSubType[`job_msg_del`], j.UserID64, p2.MsgTypeID64, b2, time.Minute) + + p.Inspecting = req.Code + b, _ := json.Marshal(p) + + id, err := createJob(cacheObjSubType[`job_gwithdraw`], objJobPriority, j.UserID64, 0, time.Unix(maxUnixTimestamp, 0).UTC(), b) + logOnError(err, "jobGWithdraw : createJob") + setJobCallback(id, int64(bot.Me.ID), cacheObjSubType[`msg_invalid_action`]) + setJobCallback(id, int64(bot.Me.ID), cacheObjSubType[`msg_inspect_ack`]) + clientSendCWMsg(j.UserID64, fmt.Sprintf("/g_inspect_%s", p.Inspecting)) + err = setJobDone(j.ID64) + logOnError(err, "jobGWithdraw : setJobDone") + return + } + } + } else if id == cacheObjSubType[`msg_invalid_action`] { + + for k, req := range p.Items { + if req.Code == p.Inspecting { + p.Items[k].Available = 1 + p.Items[k].Inspect = false + break + } + } + p.Inspecting = `` + m, err := getObjMsg(j.Trigger) + logOnError(err, "jobGWithdraw : getObjMsg") + if err == nil { + p.CleanupMsg = append(p.CleanupMsg, *m) + } + } else if id == cacheObjSubType[`msg_msg_job_gwithdraw_ack`] { m, err := getObjMsg(j.Trigger) logOnError(err, "jobGWithdraw : getObjMsg") rule, err := getMsgParsingRule(m) diff --git a/msg.go b/msg.go index 47ee1f7..536bc0f 100644 --- a/msg.go +++ b/msg.go @@ -27,6 +27,13 @@ func getMsgParsingRule(m *ChatWarsMessage) (*MessageParsingRule, error) { } } +func parseSubTypeMessageInspectAck(m *ChatWarsMessage, r *regexp.Regexp) (*ChatWarsMessageInspectAck, error) { + cwm := ChatWarsMessageInspectAck{} + cwm.Name = r.ReplaceAllString(m.Text, "${Item}") + log.Printf("parseSubTypeMessageInspectAck : Name : %s\n", cwm.Name) + return &cwm, nil +} + func parseSubTypeMessageExchangeAck(m *ChatWarsMessage, r *regexp.Regexp) (*ChatWarsMessageExchangeAck, error) { cwm := ChatWarsMessageExchangeAck{} deals := []ChatWarsExchangeDeal{} From 8abb3bc2d2bbcacef4f4c50b3e7c8eb0fb3ab6a7 Mon Sep 17 00:00:00 2001 From: shoopea Date: Thu, 23 Jan 2020 14:09:07 +0800 Subject: [PATCH 11/14] update deposit all --- bot.go | 1 + job.go | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/bot.go b/bot.go index 9839407..ad896fd 100644 --- a/bot.go +++ b/bot.go @@ -880,6 +880,7 @@ func botGDepositAll(m *tb.Message) { } p.ResObjID64 = append(p.ResObjID64, getObjItemID(`03`, `Pelt`)) p.ResObjID64 = append(p.ResObjID64, getObjItemID(`04`, `Bone`)) + p.ResObjID64 = append(p.ResObjID64, getObjItemID(`05`, `Coal`)) p.ResObjID64 = append(p.ResObjID64, getObjItemID(`07`, `Powder`)) p.ResObjID64 = append(p.ResObjID64, getObjItemID(`08`, `Iron Ore`)) p.ResObjID64 = append(p.ResObjID64, getObjItemID(`09`, `Cloth`)) diff --git a/job.go b/job.go index 98cc47a..a2dc23a 100644 --- a/job.go +++ b/job.go @@ -1612,6 +1612,30 @@ func jobGWithdraw(j Job) { if err == nil { p.CleanupMsg = append(p.CleanupMsg, *m) } + + for _, req := range p.Items { + if req.Inspect { + p2 = JobPayloadMsgDel{ + MsgTypeID64: cacheObjSubType[`msg_g_inspect_req`], + Delay: (10 * time.Second), + ObjMsgID64: 0, + } + b2, _ = json.Marshal(p2) + createJobCallback(cacheObjSubType[`job_msg_del`], j.UserID64, p2.MsgTypeID64, b2, time.Minute) + + p.Inspecting = req.Code + b, _ := json.Marshal(p) + + id, err := createJob(cacheObjSubType[`job_gwithdraw`], objJobPriority, j.UserID64, 0, time.Unix(maxUnixTimestamp, 0).UTC(), b) + logOnError(err, "jobGWithdraw : createJob") + setJobCallback(id, int64(bot.Me.ID), cacheObjSubType[`msg_invalid_action`]) + setJobCallback(id, int64(bot.Me.ID), cacheObjSubType[`msg_inspect_ack`]) + clientSendCWMsg(j.UserID64, fmt.Sprintf("/g_inspect_%s", p.Inspecting)) + err = setJobDone(j.ID64) + logOnError(err, "jobGWithdraw : setJobDone") + return + } + } } else if id == cacheObjSubType[`msg_msg_job_gwithdraw_ack`] { m, err := getObjMsg(j.Trigger) logOnError(err, "jobGWithdraw : getObjMsg") From ab880672917f213ae90bef735d86c9f1d12e0dda Mon Sep 17 00:00:00 2001 From: shoopea Date: Thu, 23 Jan 2020 14:10:58 +0800 Subject: [PATCH 12/14] fix --- job.go | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/job.go b/job.go index a2dc23a..683ae14 100644 --- a/job.go +++ b/job.go @@ -1520,21 +1520,17 @@ func jobGWithdraw(j Job) { } } - m, err := getObjMsg(j.Trigger) - logOnError(err, "jobGWithdraw : getObjMsg") - if err == nil { - p.CleanupMsg = append(p.CleanupMsg, *m) - } + p.CleanupMsg = append(p.CleanupMsg, *m) if isUnique { for _, req := range p.Items { if req.Inspect { - p2 = JobPayloadMsgDel{ + p2 := JobPayloadMsgDel{ MsgTypeID64: cacheObjSubType[`msg_g_inspect_req`], Delay: (10 * time.Second), ObjMsgID64: 0, } - b2, _ = json.Marshal(p2) + b2, _ := json.Marshal(p2) createJobCallback(cacheObjSubType[`job_msg_del`], j.UserID64, p2.MsgTypeID64, b2, time.Minute) p.Inspecting = req.Code @@ -1568,20 +1564,16 @@ func jobGWithdraw(j Job) { } p.Inspecting = `` - m, err := getObjMsg(j.Trigger) - logOnError(err, "jobGWithdraw : getObjMsg") - if err == nil { - p.CleanupMsg = append(p.CleanupMsg, *m) - } + p.CleanupMsg = append(p.CleanupMsg, *m) for _, req := range p.Items { if req.Inspect { - p2 = JobPayloadMsgDel{ + p2 := JobPayloadMsgDel{ MsgTypeID64: cacheObjSubType[`msg_g_inspect_req`], Delay: (10 * time.Second), ObjMsgID64: 0, } - b2, _ = json.Marshal(p2) + b2, _ := json.Marshal(p2) createJobCallback(cacheObjSubType[`job_msg_del`], j.UserID64, p2.MsgTypeID64, b2, time.Minute) p.Inspecting = req.Code From c6ef1a79d50db30c92a95121deb69c8e57cf3f5a Mon Sep 17 00:00:00 2001 From: shoopea Date: Thu, 23 Jan 2020 14:13:49 +0800 Subject: [PATCH 13/14] fix g withdraw --- job.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/job.go b/job.go index 683ae14..c6c1ac9 100644 --- a/job.go +++ b/job.go @@ -1607,12 +1607,12 @@ func jobGWithdraw(j Job) { for _, req := range p.Items { if req.Inspect { - p2 = JobPayloadMsgDel{ + p2 := JobPayloadMsgDel{ MsgTypeID64: cacheObjSubType[`msg_g_inspect_req`], Delay: (10 * time.Second), ObjMsgID64: 0, } - b2, _ = json.Marshal(p2) + b2, _ := json.Marshal(p2) createJobCallback(cacheObjSubType[`job_msg_del`], j.UserID64, p2.MsgTypeID64, b2, time.Minute) p.Inspecting = req.Code From 8daa5c74004c857df5334964fcf52a32bb46971e Mon Sep 17 00:00:00 2001 From: shoopea Date: Fri, 24 Jan 2020 15:50:55 +0800 Subject: [PATCH 14/14] readme --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d3de63c..b3f6a32 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ ChirpNestBot - [ ] Make sure refresh message receives the message later (jobMsgRefresh) - [ ] Adjust /time clock for auctions/... (delay between cw and real time ?) - [ ] Update old auctions with client -- [ ] Convert config to json and insert sql structure in it - [ ] Add metrics - [ ] Eliminate cache map race conditions (all maps with read/write) and use redis ? - [ ] Transform import/export to jobs, feed msg to identification channel instead of inserting directly @@ -15,8 +14,6 @@ ChirpNestBot - [ ] Update items parsing/identification with gear details (atk/def/mana) - [ ] Auto identificate weight of items - [ ] Tribute interception -- [ ] Withdrawal bot -- [x] Crontab : engine - [ ] Crontab : user interface - [ ] Resources hidding - [ ] Resources auto destroy @@ -27,8 +24,12 @@ ChirpNestBot - [ ] Impersonate - [ ] Link TelegramUserID and UserID (can use historic auction messages) - [ ] Issue with Squire in the /g_roles ? -- [x] Foray interception - [ ] Handle Foray timeout to stop spamming in case something goes bad +- [ ] Insert sql structure in config ? +- [x] Convert config to json +- [x] Foray interception +- [x] Withdrawal bot +- [x] Crontab : engine - [x] Export/import all messages - [x] Test HTML in message - [x] Update auction from broadcast