diff --git a/bot.go b/bot.go index a840b7b..84fd5ed 100644 --- a/bot.go +++ b/bot.go @@ -45,6 +45,15 @@ func BotHandlers(b *tb.Bot) { b.Handle("/get_item_id", botGetItemId) b.Handle("/clients", botGetClients) + b.Handle("/vault", botVaultHelp) + b.Handle("/vault_all", botVault) + b.Handle("/vault_res", botVault) + b.Handle("/vault_alch", botVault) + b.Handle("/vault_misc", botVault) + b.Handle("/vault_rec", botVault) + b.Handle("/vault_part", botVault) + b.Handle("/vault_other", botVault) + b.Handle(tb.OnPhoto, botPhoto) b.Handle(tb.OnChannelPost, botChannelPost) b.Handle(tb.OnQuery, botQuery) @@ -112,7 +121,8 @@ func botHelp(m *tb.Message) { /get_item_id - identify item_id from string /clients - list all connected clients /g_deposit_all - deposit all res to vault -/g_withdraw .. - withdraw items`, +/g_withdraw .. - withdraw items +/vault - Deposit and withdrawal stats`, FromMsgID64: int64(m.ID), FromChatID64: m.Chat.ID, } diff --git a/def.go b/def.go index 6080248..6c12ff5 100644 --- a/def.go +++ b/def.go @@ -124,6 +124,11 @@ type ChatWarsMessageGStock struct { ItemList []ChatWarsItems `json:"item_list"` } +type ChatWarsMessageWithdrawRcv struct { + Msg *ChatWarsMessage `json:"msg"` + ItemList []ChatWarsItems `json:"item_list"` +} + type ChatWarsMessageGDepositReq struct { Msg *ChatWarsMessage `json:"msg"` ItemID64 int64 `json:"item_id"` diff --git a/msg.go b/msg.go index 224b59f..1144f49 100644 --- a/msg.go +++ b/msg.go @@ -219,6 +219,25 @@ func parseSubTypeMessageAuctionAnnounce(m *ChatWarsMessage, r *regexp.Regexp) (* return &cwm, nil } +func parseSubTypeMessageWithdrawRcv(m *ChatWarsMessage, r *regexp.Regexp) (*ChatWarsMessageWithdrawRcv, error) { + cwm := ChatWarsMessageWithdrawRcv{} + items := []ChatWarsItems{} + re := regexp.MustCompile(`(.*) x (.*)`) + for _, l := range re.FindAllStringSubmatch(m.Text), -1) { + i := getObjItemID(``, l[1]) + q, _ := strconv.ParseInt(l[2], 10, 64) + if i != 0 { + item := ChatWarsItems{ + ItemID64: i, + Quantity: q, + } + items = append(items, item) + } + } + cwm.ItemList = items + return &cwm, nil +} + func parseSubTypeMessageGStockAnyAck(m *ChatWarsMessage, r *regexp.Regexp) (*ChatWarsMessageGStock, error) { cwm := ChatWarsMessageGStock{} items := []ChatWarsItems{} diff --git a/sql.go b/sql.go index c888fd4..32f7c1b 100644 --- a/sql.go +++ b/sql.go @@ -546,6 +546,10 @@ func initDB() { ,(` + strconv.Itoa(objSubTypeMessageOrderbookSearch) + `, "orderbook_search", "Orderbook search", ` + strconv.Itoa(objTypeMessage) + `) ,(` + strconv.Itoa(objSubTypeMessageQuestReq) + `, "quest_req", "Quest Req", ` + strconv.Itoa(objTypeMessage) + `) ,(` + strconv.Itoa(objSubTypeMessageQuestAck) + `, "quest_ack", "Quest Ack", ` + strconv.Itoa(objTypeMessage) + `) + ,(` + strconv.Itoa(objSubTypeMessageBattle) + `, "battle", "Battle", ` + strconv.Itoa(objTypeMessage) + `) + ,(` + strconv.Itoa(objSubTypeMessageOrderCancelReq) + `, "order_cancel_req", "Order Cancel Req", ` + strconv.Itoa(objTypeMessage) + `) + ,(` + strconv.Itoa(objSubTypeMessageOrderCancelAck) + `, "order_cancel_ack", "Order Cancel Ack", ` + strconv.Itoa(objTypeMessage) + `) + ,(` + strconv.Itoa(objSubTypeMessageStaminaRestored) + `, "stamina_restored", "Stamina Restored", ` + 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(objSubTypeJobGWithdraw) + `, "job_gwithdraw", "GWithdrawal job", ` + strconv.Itoa(objTypeJob) + `) @@ -580,6 +584,22 @@ func initDB() { log.Println("initDB : Database set up") } +func insertMsgItem(objId int64, itemId int64, quantity int64) error { + stmt, err := db.Prepare(`INSERT INTO obj_msg_item (obj_id, item_id, quantity) + VALUES (?, ?, ?);`) + if err != nil { + return err + } + defer stmt.Close() + + _, err = stmt.Exec(objId, itemId, quantity) + if err != nil { + return err + } + + return nil +} + func insertMsgReport(objId int64, war_date int32, atk int32, def int32, exp int32, gold int32, stock int32, crit bool, stamina bool) error { objSubTypeId, err := getObjSubTypeId(objId) if err != nil { diff --git a/workers.go b/workers.go index 1d4d830..92ddcc5 100644 --- a/workers.go +++ b/workers.go @@ -362,6 +362,8 @@ func SQLIdentifyMsgWorker(id int, objIds <-chan int64) { case objSubTypeMessageWithdrawReq: case objSubTypeMessageWithdrawCode: case objSubTypeMessageWithdrawRcv: + _, err := parseSubTypeMessageWithdrawRcv(m, rule.re) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing objSubTypeMessageWithdrawRcv.") case objSubTypeMessageStockReq: case objSubTypeMessageMiscReq: case objSubTypeMessageGStockResReq: @@ -461,8 +463,10 @@ func SQLIdentifyMsgWorker(id int, objIds <-chan int64) { _, err := parseSubTypeMessageGDepositReq(m, rule.re) logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing objSubTypeMessageGDepositReq.") case objSubTypeMessageGDepositAck: - _, err := parseSubTypeMessageGDepositAck(m, rule.re) + cwm, err := parseSubTypeMessageGDepositAck(m, rule.re) logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing objSubTypeMessageGDepositAck.") + err = insertMsgItem(cwm.Msg.ObjID64, cwm.ItemID64, cwm.Quantity) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Inserting objSubTypeMessageGDepositAck.") case objSubTypeMessageStockAnyAck: _, err := parseSubTypeMessageStockAnyAck(m, rule.re) logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing objSubTypeMessageStockAnyAck.")