From ba6dc3e7ab10c723972153ddc89d8137b905e79b Mon Sep 17 00:00:00 2001 From: shoopea Date: Thu, 25 Jun 2020 17:22:54 +0200 Subject: [PATCH] test --- data/obj_item/99.legacy.json | 11 + def.go | 1 + rules.go | 31 ++- sql.go | 1 + workers.go | 468 ++++++++++++++++++----------------- 5 files changed, 275 insertions(+), 237 deletions(-) diff --git a/data/obj_item/99.legacy.json b/data/obj_item/99.legacy.json index 5ac6573..9b712d7 100644 --- a/data/obj_item/99.legacy.json +++ b/data/obj_item/99.legacy.json @@ -1763,6 +1763,17 @@ "Pumpkin" ] }, + { + "item_type": "item_misc", + "code": "cst", + "weight": -1, + "exchange": "", + "auction": false, + "craftable": false, + "names": [ + "Chaos stone" + ] + }, { "item_type": "item_misc", "code": "pol", diff --git a/def.go b/def.go index 285df6c..10b419e 100644 --- a/def.go +++ b/def.go @@ -435,6 +435,7 @@ type MessageParsingRule struct { MsgTypeID64 int64 ChatID64 int64 `json:"chat_id"` SenderUserID64 int64 `json:"sender_id"` + BotCommand bool `json:"bot_cmd"` re *regexp.Regexp } diff --git a/rules.go b/rules.go index 63a0d66..1651127 100644 --- a/rules.go +++ b/rules.go @@ -27,6 +27,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_job_gwithdraw_req`], ChatID64: cfg.Bot.Mainchat, SenderUserID64: int64(bot.Me.ID), + BotCommand: true, } rules2 = append(rules2, r) @@ -37,6 +38,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_shutdown`], ChatID64: cfg.Bot.Admin, SenderUserID64: 0, + BotCommand: true, } rules2 = append(rules2, r) @@ -58,6 +60,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_user_config`], ChatID64: id, SenderUserID64: id, + BotCommand: true, } rules2 = append(rules2, r) @@ -68,6 +71,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_user_config_pillage_on`], ChatID64: id, SenderUserID64: id, + BotCommand: true, } rules2 = append(rules2, r) @@ -78,6 +82,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_user_config_pillage_off`], ChatID64: id, SenderUserID64: id, + BotCommand: true, } rules2 = append(rules2, r) @@ -88,6 +93,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_user_config_def_guild`], ChatID64: id, SenderUserID64: id, + BotCommand: true, } rules2 = append(rules2, r) @@ -98,6 +104,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_user_config_def_castle`], ChatID64: id, SenderUserID64: id, + BotCommand: true, } rules2 = append(rules2, r) @@ -108,6 +115,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_alch_all`], ChatID64: id, SenderUserID64: id, + BotCommand: true, } rules2 = append(rules2, r) @@ -118,6 +126,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_user_config_deposit_on`], ChatID64: id, SenderUserID64: id, + BotCommand: true, } rules2 = append(rules2, r) @@ -128,6 +137,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_user_config_deposit_off`], ChatID64: id, SenderUserID64: id, + BotCommand: true, } rules2 = append(rules2, r) } @@ -146,6 +156,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_craft_item`], ChatID64: chats[id], SenderUserID64: users[id], + BotCommand: true, } rules2 = append(rules2, r) } @@ -159,6 +170,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_g_stock`], ChatID64: chats[id], SenderUserID64: users[id], + BotCommand: true, } rules2 = append(rules2, r) @@ -169,6 +181,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_shops`], ChatID64: chats[id], SenderUserID64: users[id], + BotCommand: true, } rules2 = append(rules2, r) @@ -179,6 +192,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_job_gwithdraw_ack`], ChatID64: chats[id], SenderUserID64: users[id], + BotCommand: true, } rules2 = append(rules2, r) @@ -189,6 +203,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_craft_all`], ChatID64: chats[id], SenderUserID64: users[id], + BotCommand: true, } rules2 = append(rules2, r) @@ -199,6 +214,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_get_stash`], ChatID64: chats[id], SenderUserID64: users[id], + BotCommand: true, } rules2 = append(rules2, r) @@ -212,6 +228,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_rage_up`], ChatID64: cfg.Bot.Mainchat, SenderUserID64: 0, + BotCommand: true, } rules2 = append(rules2, r) @@ -222,6 +239,7 @@ func resetMsgParsingRules() error { MsgTypeID64: cacheObjSubType[`msg_bot_peace_up`], ChatID64: cfg.Bot.Mainchat, SenderUserID64: 0, + BotCommand: true, } rules2 = append(rules2, r) @@ -254,6 +272,7 @@ func resetMsgParsingRules() error { MsgType: r.MsgType, ChatID64: r.ChatID64, SenderUserID64: r.SenderUserID64, + BotCommand: false, } r2.MsgTypeID64, err = codeObjSubTypeId(r2.MsgType) @@ -278,8 +297,8 @@ func resetMsgParsingRules() error { return err } - stmt, err := db.Prepare(`INSERT INTO msg_rules (prio, msg_type_id, chat_id, user_id, descn, rule) - VALUES (?, ?, ?, ?, ?, ?);`) + stmt, err := db.Prepare(`INSERT INTO msg_rules (prio, msg_type_id, chat_id, user_id, descn, bot_cmd, rule) + VALUES (?, ?, ?, ?, ?, ?, ?);`) logOnError(err, "resetMsgParsingRules : prepare statement") if err != nil { return err @@ -287,7 +306,7 @@ func resetMsgParsingRules() error { defer stmt.Close() count = 0 for _, r2 := range rules2 { - _, err = stmt.Exec(r2.Priority, r2.MsgTypeID64, r2.ChatID64, r2.SenderUserID64, r2.Description, r2.Rule) + _, err = stmt.Exec(r2.Priority, r2.MsgTypeID64, r2.ChatID64, r2.SenderUserID64, r2.Description, r2.BotCommand, r2.Rule) logOnError(err, "resetMsgParsingRules : insert statement "+r2.Description) if err != nil { return err @@ -311,6 +330,7 @@ func loadMsgParsingRules() (m map[int]MessageParsingRule, err error) { msgTypeID64 int64 chatID64 int64 userID64 int64 + botCommand bool ) log.Println("Loading message parsing rules...") @@ -324,14 +344,14 @@ func loadMsgParsingRules() (m map[int]MessageParsingRule, err error) { } }() - rules, err := db.Query(`SELECT r.id, r.prio, r.descn, r.rule, r.msg_type_id, r.chat_id, r.user_id FROM msg_rules r ORDER BY r.prio DESC;`) + rules, err := db.Query(`SELECT r.id, r.prio, r.descn, r.rule, r.msg_type_id, r.chat_id, r.user_id, r.bot_cmd FROM msg_rules r ORDER BY r.prio DESC;`) if err != nil { return m, err } defer rules.Close() for rules.Next() { - err = rules.Scan(&id, &priority, &descn, &rule, &msgTypeID64, &chatID64, &userID64) + err = rules.Scan(&id, &priority, &descn, &rule, &msgTypeID64, &chatID64, &userID64, &botCommand) if err != nil { return m, err } @@ -343,6 +363,7 @@ func loadMsgParsingRules() (m map[int]MessageParsingRule, err error) { i.MsgTypeID64 = msgTypeID64 i.ChatID64 = chatID64 i.SenderUserID64 = userID64 + i.BotCommand = botCommand i.re = regexp.MustCompile(rule) m[count] = *i // log.Printf("New rule : %s\n", rule) diff --git a/sql.go b/sql.go index 648f0ec..9785956 100644 --- a/sql.go +++ b/sql.go @@ -402,6 +402,7 @@ func initDB() { ,msg_type_id SMALLINT UNSIGNED NOT NULL ,chat_id BIGINT NOT NULL ,user_id BIGINT NOT NULL + ,bot_cmd TINYINT NOT NULL ,UNIQUE KEY (id) ) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_bin;`) failOnError(err, "initDB : create table msg_rules") diff --git a/workers.go b/workers.go index 16d5c84..bbb0829 100644 --- a/workers.go +++ b/workers.go @@ -353,245 +353,249 @@ func SQLIdentifyMsgWorker(id int, objIds <-chan int64) { } else { err = setObjSubTypeId(objId, rule.MsgTypeID64) logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : setObjSubTypeId") - switch rule.MsgTypeID64 { - case cacheObjSubType[`msg_groles_req`]: - case cacheObjSubType[`msg_go`]: - case cacheObjSubType[`msg_report_req`]: - case cacheObjSubType[`msg_g_report_req`]: - case cacheObjSubType[`msg_hero_req`]: - case cacheObjSubType[`msg_me_req`]: - case cacheObjSubType[`msg_inv_req`]: - case cacheObjSubType[`msg_time_req`]: - case cacheObjSubType[`msg_pledge`]: - case cacheObjSubType[`msg_pillage_go`]: - case cacheObjSubType[`msg_pillage_timeout`]: - case cacheObjSubType[`msg_pillage_win`]: - case cacheObjSubType[`msg_pillage_loss`]: - case cacheObjSubType[`msg_go_quest_req`]: - case cacheObjSubType[`msg_fast_fight`]: - case cacheObjSubType[`msg_go_arena`]: - case cacheObjSubType[`msg_top_req`]: - case cacheObjSubType[`msg_menu`]: - case cacheObjSubType[`msg_buy_req`]: - case cacheObjSubType[`msg_sell_req`]: - case cacheObjSubType[`msg_orderbook_req`]: - case cacheObjSubType[`msg_withdraw_req`]: - case cacheObjSubType[`msg_withdraw_code`]: - case cacheObjSubType[`msg_withdraw_rcv`]: - cwm, err := parseSubTypeMessageWithdrawRcv(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_withdraw_rcv`]") - for _, i := range cwm.ItemList { - err = insertMsgItem(cwm.Msg.ObjID64, i.ItemID64, i.Quantity) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Inserting cacheObjSubType[`msg_withdraw_rcv`]") - } - case cacheObjSubType[`msg_stock_req`]: - case cacheObjSubType[`msg_misc_req`]: - case cacheObjSubType[`msg_gstock_res_req`]: - case cacheObjSubType[`msg_gstock_alch_req`]: - case cacheObjSubType[`msg_gstock_misc_req`]: - case cacheObjSubType[`msg_gstock_rec_req`]: - case cacheObjSubType[`msg_gstock_part_req`]: - case cacheObjSubType[`msg_gstock_oth_req`]: - case cacheObjSubType[`msg_gstock_any_ack`]: - _, err := parseSubTypeMessageGStockAnyAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_gstock_any_ack`]") - case cacheObjSubType[`msg_report_ack`]: - cwm, err := parseSubTypeMessageReportAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_report_ack`]") - cwm.ObjID64 = objId - case cacheObjSubType[`msg_quest_res_ambush`]: - cwm, err := parseSubTypeMessageQuestResultAmbush(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_quest_res_ambush`]") - if m.Date.Add(3 * time.Minute).After(time.Now().UTC()) { - if m.ChatID64 == chtwrsbotID64 && m.TGSenderUserID64 == chtwrsbotID64 { + if rule.BotCommand && m.Date.Add(time.Minute).After(time.Now().UTC()) { + log.Printf("SQLIdentifyMsgWorker[" + strconv.Itoa(id) + "] : Timed out command\n") + } else { + switch rule.MsgTypeID64 { + case cacheObjSubType[`msg_groles_req`]: + case cacheObjSubType[`msg_go`]: + case cacheObjSubType[`msg_report_req`]: + case cacheObjSubType[`msg_g_report_req`]: + case cacheObjSubType[`msg_hero_req`]: + case cacheObjSubType[`msg_me_req`]: + case cacheObjSubType[`msg_inv_req`]: + case cacheObjSubType[`msg_time_req`]: + case cacheObjSubType[`msg_pledge`]: + case cacheObjSubType[`msg_pillage_go`]: + case cacheObjSubType[`msg_pillage_timeout`]: + case cacheObjSubType[`msg_pillage_win`]: + case cacheObjSubType[`msg_pillage_loss`]: + case cacheObjSubType[`msg_go_quest_req`]: + case cacheObjSubType[`msg_fast_fight`]: + case cacheObjSubType[`msg_go_arena`]: + case cacheObjSubType[`msg_top_req`]: + case cacheObjSubType[`msg_menu`]: + case cacheObjSubType[`msg_buy_req`]: + case cacheObjSubType[`msg_sell_req`]: + case cacheObjSubType[`msg_orderbook_req`]: + case cacheObjSubType[`msg_withdraw_req`]: + case cacheObjSubType[`msg_withdraw_code`]: + case cacheObjSubType[`msg_withdraw_rcv`]: + cwm, err := parseSubTypeMessageWithdrawRcv(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_withdraw_rcv`]") + for _, i := range cwm.ItemList { + err = insertMsgItem(cwm.Msg.ObjID64, i.ItemID64, i.Quantity) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Inserting cacheObjSubType[`msg_withdraw_rcv`]") + } + case cacheObjSubType[`msg_stock_req`]: + case cacheObjSubType[`msg_misc_req`]: + case cacheObjSubType[`msg_gstock_res_req`]: + case cacheObjSubType[`msg_gstock_alch_req`]: + case cacheObjSubType[`msg_gstock_misc_req`]: + case cacheObjSubType[`msg_gstock_rec_req`]: + case cacheObjSubType[`msg_gstock_part_req`]: + case cacheObjSubType[`msg_gstock_oth_req`]: + case cacheObjSubType[`msg_gstock_any_ack`]: + _, err := parseSubTypeMessageGStockAnyAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_gstock_any_ack`]") + case cacheObjSubType[`msg_report_ack`]: + cwm, err := parseSubTypeMessageReportAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_report_ack`]") + cwm.ObjID64 = objId + case cacheObjSubType[`msg_quest_res_ambush`]: + cwm, err := parseSubTypeMessageQuestResultAmbush(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_quest_res_ambush`]") + if m.Date.Add(3 * time.Minute).After(time.Now().UTC()) { + if m.ChatID64 == chtwrsbotID64 && m.TGSenderUserID64 == chtwrsbotID64 { + s := TGCommand{ + Type: commandForwardMsg, + FromUserID64: m.TGUserID64, + FromMsgID64: m.ID64, + FromChatID64: m.ChatID64, + ToChatID64: angrybirbsbotID64, + } + MQTGCmdQueue <- s + } else if m.ChatID64 == cfg.Bot.Mainchat { + err = clientSpreadQuestResultAmbush(cwm) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : clientSpreadQuestResultAmbush.") + } + } + case cacheObjSubType[`msg_pillage_inc`]: + fallthrough + case cacheObjSubType[`msg_pillage_inc2`]: + cwm, err := parseSubTypeMessagePillageInc(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_pillage_inc`]") + cwm.ObjID64 = objId + err = insertMsgPillageInc(cwm) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : insertMsgPillageInc") + // only catch live pillages + if m.Date.Add(3*time.Minute).After(time.Now()) && m.ChatID64 == chtwrsbotID64 { s := TGCommand{ - Type: commandForwardMsg, - FromUserID64: m.TGUserID64, - FromMsgID64: m.ID64, - FromChatID64: m.ChatID64, - ToChatID64: angrybirbsbotID64, + Type: commandSendMsg, + Text: fmt.Sprintf("Catching pillage (%s)", m.Date.Format(time.RFC3339)), + ToUserID64: m.TGUserID64, } - MQTGCmdQueue <- s - } else if m.ChatID64 == cfg.Bot.Mainchat { - err = clientSpreadQuestResultAmbush(cwm) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : clientSpreadQuestResultAmbush.") - } - } - case cacheObjSubType[`msg_pillage_inc`]: - fallthrough - case cacheObjSubType[`msg_pillage_inc2`]: - cwm, err := parseSubTypeMessagePillageInc(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_pillage_inc`]") - cwm.ObjID64 = objId - err = insertMsgPillageInc(cwm) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : insertMsgPillageInc") - // only catch live pillages - if m.Date.Add(3*time.Minute).After(time.Now()) && m.ChatID64 == chtwrsbotID64 { - s := TGCommand{ - Type: commandSendMsg, - Text: fmt.Sprintf("Catching pillage (%s)", m.Date.Format(time.RFC3339)), - ToUserID64: m.TGUserID64, - } - TGCmdQueue <- s - p := JobPayloadPillage{ - ObjID64: objId, - Date: m.Date, - } - b, _ := json.Marshal(&p) - _, err = createJob(cacheObjSubType[`job_pillage`], objJobPriority, m.TGUserID64, m.ObjID64, m.Date.Add(time.Duration(25+rand.Intn(35))*time.Second), b) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : createJob(JobPillage)") - } - case cacheObjSubType[`msg_me_ack`]: - cwm, err := parseSubTypeMessageMeAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_me_ack`]") - clientMsgMeAck(cwm) - _, err = addObjXP(cwm.CWUserID64, cwm.ExpNow, cwm.ExpLvl, cwm.Level, m.Date) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : addObjXP(MeAck)") - case cacheObjSubType[`msg_go_quest_ack`]: - cwm, err := parseSubTypeMessageGoQuestAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_go_quest_ack`]") - uid, err := clientGetCWUserID64(m.TGUserID64) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Retrieving UserID64.") - if err != nil { - err = setObjSubTypeId(objId, cacheObjSubType[`msg`]) - } else { - clientMsgGoQuestAck(cwm) - _, err = addObjQuest(uid, cwm.QuestTypeID64, cwm.Duration, m.Date.UTC()) - } - err = setClientBusy(m.TGUserID64, m.Date, cwm.Duration) - case cacheObjSubType[`msg_duel_fight`]: - cwm, err := parseSubTypeMessageDuelFight(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_duel_fight`]") - cwm.ObjID64 = objId - err = insertMsgDuelFight(cwm) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : insertMsgDuelFight") - case cacheObjSubType[`msg_union_war`]: - _, err := parseSubTypeMessageUnionWar(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_union_war`]") - case cacheObjSubType[`msg_groles_ack`]: - cwm, err := parseSubTypeMessageGRolesAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_groles_ack`]") - clientMsgGRolesAck(cwm) - case cacheObjSubType[`msg_auction_announce`]: - cwm, err := parseSubTypeMessageAuctionAnnounce(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_auction_announce`]") - cwm.ObjID64 = objId - err = insertMsgAuctionAnnounce(cwm) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : insertMsgAuctionAnnounce") - if cwm.End.After(time.Now().UTC()) || strings.Compare(cwm.Status, `#active`) == 0 { - p := JobPayloadMsgRefresh{ - ObjID64: m.ObjID64, - } - b, _ := json.Marshal(&p) - _, err = createJob(cacheObjSubType[`job_msg_refresh`], objJobPriority, m.TGUserID64, m.ObjID64, cwm.End.Add(5*time.Minute).UTC(), b) - /* hack for autobid - FIXME */ - /* - if cwm.Price == 0 && cwm.ItemID64 == getObjItemID(`k05`, `Hunter blade`) { - clientSendCWMsg(cfg.Bot.Admin, fmt.Sprintf("/bet_%d_1", cwm.LotID)) + TGCmdQueue <- s + p := JobPayloadPillage{ + ObjID64: objId, + Date: m.Date, } - */ - } - case cacheObjSubType[`msg_time_ack`]: - _, err := parseSubTypeMessageTimeAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_time_ack`]") - case cacheObjSubType[`msg_orderbook_acl`]: - _, err := parseSubTypeMessageOrderbookAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_orderbook_acl`]") - case cacheObjSubType[`msg_stock_ack`]: - _, err := parseSubTypeMessageStockAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_stock_ack`]") - case cacheObjSubType[`msg_g_deposit_req`]: - _, err := parseSubTypeMessageGDepositReq(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_g_deposit_req`]") - case cacheObjSubType[`msg_g_deposit_ack`]: - cwm, err := parseSubTypeMessageGDepositAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_g_deposit_ack`]") - err = insertMsgItem(cwm.Msg.ObjID64, cwm.ItemID64, cwm.Quantity) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Inserting cacheObjSubType[`msg_g_deposit_ack`]") - case cacheObjSubType[`msg_stock_any_ack`]: - _, err := parseSubTypeMessageStockAnyAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_stock_any_ack`]") - case cacheObjSubType[`msg_exchange_ack`]: - _, err := parseSubTypeMessageExchangeAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_exchange_ack`]") - case cacheObjSubType[`msg_quest_res`]: - _, err := parseSubTypeMessageQuestResult(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_quest_res`]") - err = setClientIdle(m.TGUserID64, m.Date) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : setClientIdle") - case cacheObjSubType[`msg_job_gwithdraw_ack`]: - _, err := parseSubTypeMessageJobGWithdrawAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_quest_res`]") - case cacheObjSubType[`msg_bot_g_stock`]: - botGStock(m) - case cacheObjSubType[`msg_bot_shops`]: - botShops(m) - case cacheObjSubType[`msg_bot_craft_item`]: - 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) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_tributes_stats_ack`]") - err = insertMsgTributesStats(cwm) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : insertMsgTributesStats") - case cacheObjSubType[`msg_shop_main_req`]: - case cacheObjSubType[`msg_shop_main_ack`]: - cwm, err := parseSubTypeMessageShopMainAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_shop_main_ack`]") - err = insertMsgShopMainAck(cwm) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : insertMsgShopMainAck") - case cacheObjSubType[`msg_bot_user_config`]: - botUserConfig(m) - case cacheObjSubType[`msg_bot_user_config_pillage_on`]: - botUserConfigPillage(m, true) - case cacheObjSubType[`msg_bot_user_config_pillage_off`]: - botUserConfigPillage(m, false) - case cacheObjSubType[`msg_bot_user_config_def_guild`]: - botUserConfigWartime(m, `/g_def`) - case cacheObjSubType[`msg_bot_user_config_def_castle`]: - botUserConfigWartime(m, `🛡Defend`) - case cacheObjSubType[`msg_bot_user_config_deposit_on`]: - botUserConfigDeposit(m, true) - case cacheObjSubType[`msg_bot_user_config_deposit_off`]: - botUserConfigDeposit(m, false) - case cacheObjSubType[`msg_bot_shutdown`]: - botShutdown() - case cacheObjSubType[`msg_bot_rage_up`]: - case cacheObjSubType[`msg_bot_peace_up`]: - case cacheObjSubType[`msg_bot_alch_all`]: - botAlchAll(m) - case cacheObjSubType[`msg_alch_stock_req`]: - case cacheObjSubType[`msg_alch_stock_ack`]: - _, err := parseSubTypeMessageAlchStockAck(m, rule.re) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_alch_stock_ack`]") - case cacheObjSubType[`msg_skill_too_low`]: - default: - //log.Printf("SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Unknwon message type in rule %d : %d (%d)\n%s\n", msgParsingRules[i].ID, msgParsingRules[i].MsgTypeID64, objId, m.Text) - } - muxCallbacks.Lock() - if mc1, mok1 := callbacks[m.TGUserID64]; mok1 { - if mc2, mok2 := mc1[rule.MsgTypeID64]; mok2 { - for j := range mc2 { - err := rescheduleJob(mc2[j], m.ObjID64, time.Now().UTC()) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : callbacks triggering") + b, _ := json.Marshal(&p) + _, err = createJob(cacheObjSubType[`job_pillage`], objJobPriority, m.TGUserID64, m.ObjID64, m.Date.Add(time.Duration(25+rand.Intn(35))*time.Second), b) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : createJob(JobPillage)") } - mc1[rule.MsgTypeID64] = nil - } - } - if mc1, mok1 := callbacks[int64(bot.Me.ID)]; mok1 { - if mc2, mok2 := mc1[rule.MsgTypeID64]; mok2 { - for j := range mc2 { - err := rescheduleJob(mc2[j], m.ObjID64, time.Now().UTC()) - logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : callbacks triggering") + case cacheObjSubType[`msg_me_ack`]: + cwm, err := parseSubTypeMessageMeAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_me_ack`]") + clientMsgMeAck(cwm) + _, err = addObjXP(cwm.CWUserID64, cwm.ExpNow, cwm.ExpLvl, cwm.Level, m.Date) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : addObjXP(MeAck)") + case cacheObjSubType[`msg_go_quest_ack`]: + cwm, err := parseSubTypeMessageGoQuestAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_go_quest_ack`]") + uid, err := clientGetCWUserID64(m.TGUserID64) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Retrieving UserID64.") + if err != nil { + err = setObjSubTypeId(objId, cacheObjSubType[`msg`]) + } else { + clientMsgGoQuestAck(cwm) + _, err = addObjQuest(uid, cwm.QuestTypeID64, cwm.Duration, m.Date.UTC()) } - mc1[rule.MsgTypeID64] = nil + err = setClientBusy(m.TGUserID64, m.Date, cwm.Duration) + case cacheObjSubType[`msg_duel_fight`]: + cwm, err := parseSubTypeMessageDuelFight(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_duel_fight`]") + cwm.ObjID64 = objId + err = insertMsgDuelFight(cwm) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : insertMsgDuelFight") + case cacheObjSubType[`msg_union_war`]: + _, err := parseSubTypeMessageUnionWar(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_union_war`]") + case cacheObjSubType[`msg_groles_ack`]: + cwm, err := parseSubTypeMessageGRolesAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_groles_ack`]") + clientMsgGRolesAck(cwm) + case cacheObjSubType[`msg_auction_announce`]: + cwm, err := parseSubTypeMessageAuctionAnnounce(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_auction_announce`]") + cwm.ObjID64 = objId + err = insertMsgAuctionAnnounce(cwm) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : insertMsgAuctionAnnounce") + if cwm.End.After(time.Now().UTC()) || strings.Compare(cwm.Status, `#active`) == 0 { + p := JobPayloadMsgRefresh{ + ObjID64: m.ObjID64, + } + b, _ := json.Marshal(&p) + _, err = createJob(cacheObjSubType[`job_msg_refresh`], objJobPriority, m.TGUserID64, m.ObjID64, cwm.End.Add(5*time.Minute).UTC(), b) + /* hack for autobid - FIXME */ + /* + if cwm.Price == 0 && cwm.ItemID64 == getObjItemID(`k05`, `Hunter blade`) { + clientSendCWMsg(cfg.Bot.Admin, fmt.Sprintf("/bet_%d_1", cwm.LotID)) + } + */ + } + case cacheObjSubType[`msg_time_ack`]: + _, err := parseSubTypeMessageTimeAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_time_ack`]") + case cacheObjSubType[`msg_orderbook_acl`]: + _, err := parseSubTypeMessageOrderbookAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_orderbook_acl`]") + case cacheObjSubType[`msg_stock_ack`]: + _, err := parseSubTypeMessageStockAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_stock_ack`]") + case cacheObjSubType[`msg_g_deposit_req`]: + _, err := parseSubTypeMessageGDepositReq(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_g_deposit_req`]") + case cacheObjSubType[`msg_g_deposit_ack`]: + cwm, err := parseSubTypeMessageGDepositAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_g_deposit_ack`]") + err = insertMsgItem(cwm.Msg.ObjID64, cwm.ItemID64, cwm.Quantity) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Inserting cacheObjSubType[`msg_g_deposit_ack`]") + case cacheObjSubType[`msg_stock_any_ack`]: + _, err := parseSubTypeMessageStockAnyAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_stock_any_ack`]") + case cacheObjSubType[`msg_exchange_ack`]: + _, err := parseSubTypeMessageExchangeAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_exchange_ack`]") + case cacheObjSubType[`msg_quest_res`]: + _, err := parseSubTypeMessageQuestResult(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_quest_res`]") + err = setClientIdle(m.TGUserID64, m.Date) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : setClientIdle") + case cacheObjSubType[`msg_job_gwithdraw_ack`]: + _, err := parseSubTypeMessageJobGWithdrawAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_quest_res`]") + case cacheObjSubType[`msg_bot_g_stock`]: + botGStock(m) + case cacheObjSubType[`msg_bot_shops`]: + botShops(m) + case cacheObjSubType[`msg_bot_craft_item`]: + 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) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_tributes_stats_ack`]") + err = insertMsgTributesStats(cwm) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : insertMsgTributesStats") + case cacheObjSubType[`msg_shop_main_req`]: + case cacheObjSubType[`msg_shop_main_ack`]: + cwm, err := parseSubTypeMessageShopMainAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_shop_main_ack`]") + err = insertMsgShopMainAck(cwm) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : insertMsgShopMainAck") + case cacheObjSubType[`msg_bot_user_config`]: + botUserConfig(m) + case cacheObjSubType[`msg_bot_user_config_pillage_on`]: + botUserConfigPillage(m, true) + case cacheObjSubType[`msg_bot_user_config_pillage_off`]: + botUserConfigPillage(m, false) + case cacheObjSubType[`msg_bot_user_config_def_guild`]: + botUserConfigWartime(m, `/g_def`) + case cacheObjSubType[`msg_bot_user_config_def_castle`]: + botUserConfigWartime(m, `🛡Defend`) + case cacheObjSubType[`msg_bot_user_config_deposit_on`]: + botUserConfigDeposit(m, true) + case cacheObjSubType[`msg_bot_user_config_deposit_off`]: + botUserConfigDeposit(m, false) + case cacheObjSubType[`msg_bot_shutdown`]: + botShutdown() + case cacheObjSubType[`msg_bot_rage_up`]: + case cacheObjSubType[`msg_bot_peace_up`]: + case cacheObjSubType[`msg_bot_alch_all`]: + botAlchAll(m) + case cacheObjSubType[`msg_alch_stock_req`]: + case cacheObjSubType[`msg_alch_stock_ack`]: + _, err := parseSubTypeMessageAlchStockAck(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_alch_stock_ack`]") + case cacheObjSubType[`msg_skill_too_low`]: + default: + //log.Printf("SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Unknwon message type in rule %d : %d (%d)\n%s\n", msgParsingRules[i].ID, msgParsingRules[i].MsgTypeID64, objId, m.Text) } + muxCallbacks.Lock() + if mc1, mok1 := callbacks[m.TGUserID64]; mok1 { + if mc2, mok2 := mc1[rule.MsgTypeID64]; mok2 { + for j := range mc2 { + err := rescheduleJob(mc2[j], m.ObjID64, time.Now().UTC()) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : callbacks triggering") + } + mc1[rule.MsgTypeID64] = nil + } + } + if mc1, mok1 := callbacks[int64(bot.Me.ID)]; mok1 { + if mc2, mok2 := mc1[rule.MsgTypeID64]; mok2 { + for j := range mc2 { + err := rescheduleJob(mc2[j], m.ObjID64, time.Now().UTC()) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : callbacks triggering") + } + mc1[rule.MsgTypeID64] = nil + } + } + muxCallbacks.Unlock() } - muxCallbacks.Unlock() } } }