2019-05-13 08:15:53 +02:00
package main
import (
2019-08-21 08:37:53 +02:00
"errors"
2019-05-13 08:15:53 +02:00
"fmt"
2019-07-09 07:04:57 +02:00
"log"
2019-05-13 08:15:53 +02:00
"regexp"
"strconv"
2019-05-30 10:56:37 +02:00
"strings"
2019-05-13 08:15:53 +02:00
"time"
)
2019-08-21 08:37:53 +02:00
func getMsgParsingRule ( m * ChatWarsMessage ) ( * MessageParsingRule , error ) {
var i int
for i = 0 ; i < len ( msgParsingRules ) && msgParsingRules [ i ] . re . FindStringSubmatch ( m . Text ) == nil ; i ++ {
}
if i == len ( msgParsingRules ) {
return nil , errors . New ( "Can't find message type in rules." )
} else {
2019-08-21 08:53:36 +02:00
r := msgParsingRules [ i ]
2019-08-21 08:54:06 +02:00
return & r , nil
2019-08-21 08:37:53 +02:00
}
}
2019-08-30 09:11:49 +02:00
func parseSubTypeMessageStockAnyAck ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageStockAnyAck , error ) {
cwm := ChatWarsMessageStockAnyAck { }
items := [ ] ChatWarsItems { }
re := regexp . MustCompile ( ` ([a-zA-Z ]+) \(([0-9]+)\)\n { 0,1} ` )
for _ , l := range re . FindAllStringSubmatch ( r . ReplaceAllString ( m . Text , "${Items}" ) , - 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 . Stock = items
cwm . Msg = m
return & cwm , nil
}
2019-08-30 04:14:30 +02:00
func parseSubTypeMessageGDepositReq ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageGDepositReq , error ) {
cwm := ChatWarsMessageGDepositReq { }
cwm . ItemID64 = getObjItemID ( r . ReplaceAllString ( m . Text , "${Item}" ) , ` ` ) // FIXME, handle uXXX items ?
cwm . Quantity , _ = strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${Quantity}" ) , 10 , 64 )
cwm . Msg = m
return & cwm , nil
}
2019-08-27 17:10:57 +02:00
func parseSubTypeMessageGDepositAck ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageGDepositAck , error ) {
cwm := ChatWarsMessageGDepositAck { }
2019-08-29 13:52:09 +02:00
cwm . ItemID64 = getObjItemID ( ` ` , r . ReplaceAllString ( m . Text , "${Item}" ) )
2019-08-27 17:10:57 +02:00
cwm . Quantity , _ = strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${Quantity}" ) , 10 , 64 )
2019-08-30 04:14:30 +02:00
gDepositForwardMux . Lock ( )
for i := range gDepositForwardMsg {
msg , err := getObjMsg ( gDepositForwardMsg [ i ] )
logOnError ( err , "parseSubTypeMessageGDepositAck : gDepositForwardMsg" )
if err == nil && m . TGUserID64 == msg . TGUserID64 {
rule , err := getMsgParsingRule ( msg )
logOnError ( err , "parseSubTypeMessageGDepositAck : getMsgParsingRule" )
cwmreq , err := parseSubTypeMessageGDepositReq ( msg , rule . re )
logOnError ( err , "parseSubTypeMessageGDepositAck : parseSubTypeMessageGDepositReq" )
if err == nil && cwmreq . ItemID64 == cwm . ItemID64 && cwmreq . Quantity == cwm . Quantity {
2019-08-30 05:07:37 +02:00
if m . Date . UTC ( ) . Before ( msg . Date . UTC ( ) . Add ( 1 * time . Minute ) ) {
clientFwdCWMsg ( msg . TGUserID64 , m . ID64 , m . ChatID64 , cfg . Bot . Depositchat )
}
2019-08-30 04:14:30 +02:00
gDepositForwardMsg [ i ] = gDepositForwardMsg [ len ( gDepositForwardMsg ) - 1 ]
gDepositForwardMsg = gDepositForwardMsg [ : len ( gDepositForwardMsg ) - 1 ]
break
}
}
}
gDepositForwardMux . Unlock ( )
2019-08-27 17:10:57 +02:00
cwm . Msg = m
return & cwm , nil
}
2019-08-22 11:31:16 +02:00
func parseSubTypeMessageStockAck ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageStockAck , error ) {
cwm := ChatWarsMessageStockAck { }
items := [ ] ChatWarsItems { }
2019-08-22 11:38:16 +02:00
re := regexp . MustCompile ( ` \n([a-zA-Z ]+) \(([0-9]+)\) ` )
2019-08-22 11:31:16 +02:00
for _ , l := range re . FindAllStringSubmatch ( r . ReplaceAllString ( m . Text , "${Items}" ) , - 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 )
}
}
2019-08-27 06:00:58 +02:00
re = regexp . MustCompile ( ` \n\/sg_[0-9]+ ([a-zA-Z ]+) \(([0-9]+)\) ` )
2019-08-27 05:58:23 +02:00
for _ , l := range re . FindAllStringSubmatch ( r . ReplaceAllString ( m . Text , "${Items}" ) , - 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 )
}
}
2019-08-22 11:31:16 +02:00
cwm . Used , _ = strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${Used}" ) , 10 , 64 )
cwm . Available , _ = strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${Available}" ) , 10 , 64 )
cwm . Stock = items
cwm . Msg = m
return & cwm , nil
}
2019-05-19 06:19:24 +02:00
func parseSubTypeMessageReportAck ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageReportAck , error ) {
cwm := ChatWarsMessageReportAck { }
2019-05-30 07:49:11 +02:00
/ *
log . Printf ( "parseSubTypeMessageReport : War report identified\n" )
log . Printf ( "parseSubTypeMessageReport : Castle : %s\n" , r . ReplaceAllString ( m . Text , "${Castle}" ) )
log . Printf ( "parseSubTypeMessageReport : Guild : %s\n" , r . ReplaceAllString ( m . Text , "${Guild}" ) )
log . Printf ( "parseSubTypeMessageReport : User : %s\n" , r . ReplaceAllString ( m . Text , "${User}" ) )
log . Printf ( "parseSubTypeMessageReport : Attack : %s\n" , r . ReplaceAllString ( m . Text , "${Attack}" ) )
log . Printf ( "parseSubTypeMessageReport : AttackMod : %s\n" , r . ReplaceAllString ( m . Text , "${AttackMod}" ) )
log . Printf ( "parseSubTypeMessageReport : Defense : %s\n" , r . ReplaceAllString ( m . Text , "${Defense}" ) )
log . Printf ( "parseSubTypeMessageReport : Level : %s\n" , r . ReplaceAllString ( m . Text , "${Level}" ) )
log . Printf ( "parseSubTypeMessageReport : Exp : %s\n" , r . ReplaceAllString ( m . Text , "${Exp}" ) )
log . Printf ( "parseSubTypeMessageReport : Gold : %s\n" , r . ReplaceAllString ( m . Text , "${Gold}" ) )
log . Printf ( "parseSubTypeMessageReport : Stock : %s\n" , r . ReplaceAllString ( m . Text , "${Stock}" ) )
log . Printf ( "parseSubTypeMessageReport : Stamina : %s\n" , r . ReplaceAllString ( m . Text , "${Stamina}" ) )
log . Printf ( "parseSubTypeMessageReport : Crit : %s\n" , r . ReplaceAllString ( m . Text , "${Crit}" ) )
* /
2019-05-18 10:09:33 +02:00
return & cwm , nil
2019-05-18 09:44:25 +02:00
}
2019-08-21 08:37:53 +02:00
func parseSubTypeMessageOrderbookAck ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageOrderbookAck , error ) {
cwm := ChatWarsMessageOrderbookAck { }
log . Printf ( "parseSubTypeMessageOrderbookAck : Orderbook identified\n" )
log . Printf ( "parseSubTypeMessageOrderbookAck : Name : %s\n" , r . ReplaceAllString ( m . Text , "${Name}" ) )
log . Printf ( "parseSubTypeMessageOrderbookAck : Code : %s\n" , r . ReplaceAllString ( m . Text , "${Code}" ) )
log . Printf ( "parseSubTypeMessageOrderbookAck : Qty : %s\n" , r . ReplaceAllString ( m . Text , "${Qty}" ) )
log . Printf ( "parseSubTypeMessageOrderbookAck : Gold : %s\n" , r . ReplaceAllString ( m . Text , "${Gold}" ) )
log . Printf ( "parseSubTypeMessageOrderbookAck : Qty1 : %s\n" , r . ReplaceAllString ( m . Text , "${Qty1}" ) )
log . Printf ( "parseSubTypeMessageOrderbookAck : Price1 : %s\n" , r . ReplaceAllString ( m . Text , "${Price1}" ) )
log . Printf ( "parseSubTypeMessageOrderbookAck : Qty2 : %s\n" , r . ReplaceAllString ( m . Text , "${Qty2}" ) )
log . Printf ( "parseSubTypeMessageOrderbookAck : Price2 : %s\n" , r . ReplaceAllString ( m . Text , "${Price2}" ) )
log . Printf ( "parseSubTypeMessageOrderbookAck : Qty3 : %s\n" , r . ReplaceAllString ( m . Text , "${Qty3}" ) )
log . Printf ( "parseSubTypeMessageOrderbookAck : Price3 : %s\n" , r . ReplaceAllString ( m . Text , "${Price3}" ) )
return & cwm , nil
}
2019-06-06 07:52:22 +02:00
func parseSubTypeMessageAuctionAnnounce ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageAuctionAnnounce , error ) {
cwm := ChatWarsMessageAuctionAnnounce { }
l , _ := strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${Lot}" ) , 10 , 32 )
cwm . LotID = int32 ( l )
2019-06-06 07:54:10 +02:00
cwm . ItemID64 = getObjItemID ( ` ` , r . ReplaceAllString ( m . Text , "${Item}" ) )
2019-06-06 07:52:22 +02:00
cwm . Cond = r . ReplaceAllString ( m . Text , "${Cond}" )
cwm . Quality = r . ReplaceAllString ( m . Text , "${Quality}" )
cwm . SellerUserID64 = getObjUserID ( r . ReplaceAllString ( m . Text , "${SellerUser}" ) )
2019-06-11 04:06:04 +02:00
cwm . SellerGuildID64 = getObjGuildID ( r . ReplaceAllString ( m . Text , "${SellerGuild}" ) )
cwm . SellerCastleID64 = getObjCastleID ( r . ReplaceAllString ( m . Text , "${SellerCastle}" ) )
2019-06-06 07:52:22 +02:00
cwm . BuyerUserID64 = getObjUserID ( r . ReplaceAllString ( m . Text , "${BuyerUser}" ) )
2019-06-11 04:06:04 +02:00
cwm . BuyerGuildID64 = getObjGuildID ( r . ReplaceAllString ( m . Text , "${BuyerGuild}" ) )
cwm . BuyerCastleID64 = getObjCastleID ( r . ReplaceAllString ( m . Text , "${BuyerCastle}" ) )
2019-06-06 07:52:22 +02:00
p , _ := strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${Price}" ) , 10 , 32 )
cwm . Price = int32 ( p )
cwm . Status = r . ReplaceAllString ( m . Text , "${Status}" )
cwm . End , _ = fromChatWarsDate ( r . ReplaceAllString ( m . Text , "${End}" ) )
2019-06-06 08:25:05 +02:00
2019-06-06 07:56:28 +02:00
return & cwm , nil
2019-06-06 07:52:22 +02:00
}
2019-08-22 11:31:16 +02:00
func parseSubTypeMessageGStockAnyAck ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageGStock , error ) {
2019-08-22 11:32:36 +02:00
cwm := ChatWarsMessageGStock { }
2019-06-02 12:44:11 +02:00
items := [ ] ChatWarsItems { }
2019-06-02 11:52:10 +02:00
re := regexp . MustCompile ( ` \n([0-9a-z]+) (.*) x ([0-9]+) ` )
2019-06-02 11:50:29 +02:00
for _ , l := range re . FindAllStringSubmatch ( r . ReplaceAllString ( m . Text , "${Stock}" ) , - 1 ) {
2019-06-02 15:27:53 +02:00
i := getObjItemID ( l [ 1 ] , l [ 2 ] )
2019-06-02 12:33:55 +02:00
q , _ := strconv . ParseInt ( l [ 3 ] , 10 , 64 )
if i != 0 {
item := ChatWarsItems {
ItemID64 : i ,
Quantity : q ,
}
2019-06-02 12:44:11 +02:00
items = append ( items , item )
2019-06-02 12:33:55 +02:00
}
2019-06-02 11:30:04 +02:00
}
2019-06-02 12:33:55 +02:00
cwm . ItemList = items
2019-06-02 11:30:04 +02:00
return & cwm , nil
}
2019-05-28 06:14:46 +02:00
func parseSubTypeMessageMeAck ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageMeAck , error ) {
2019-05-31 04:02:21 +02:00
var i int64
2019-05-30 07:49:11 +02:00
cwm := ChatWarsMessageMeAck {
2019-07-31 10:57:45 +02:00
CWUserID64 : getObjUserID ( r . ReplaceAllString ( m . Text , "${Player}" ) ) ,
CWGuildID64 : getObjGuildID ( r . ReplaceAllString ( m . Text , "${Guild}" ) ) ,
State : r . ReplaceAllString ( m . Text , "${State}" ) ,
2019-05-30 07:49:11 +02:00
}
2019-05-31 04:04:37 +02:00
i , _ = strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${ExpNow}" ) , 10 , 64 )
2019-05-31 04:02:21 +02:00
cwm . ExpNow = i
2019-05-31 04:04:37 +02:00
i , _ = strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${ExpLvl}" ) , 10 , 64 )
2019-05-31 04:02:21 +02:00
cwm . ExpLvl = i
2019-05-31 04:04:37 +02:00
i , _ = strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${Level}" ) , 10 , 64 )
2019-05-31 04:02:21 +02:00
cwm . Level = i
2019-05-28 09:00:37 +02:00
/ *
log . Printf ( "parseSubTypeMessageReport : Me report identified\n" )
log . Printf ( "parseSubTypeMessageReport : Class : %s\n" , r . ReplaceAllString ( m . Text , "${Class}" ) )
log . Printf ( "parseSubTypeMessageReport : Castle : %s\n" , r . ReplaceAllString ( m . Text , "${Castle}" ) )
log . Printf ( "parseSubTypeMessageReport : Level : %s\n" , r . ReplaceAllString ( m . Text , "${Level}" ) )
log . Printf ( "parseSubTypeMessageReport : Atk : %s\n" , r . ReplaceAllString ( m . Text , "${Atk}" ) )
log . Printf ( "parseSubTypeMessageReport : Def : %s\n" , r . ReplaceAllString ( m . Text , "${Def}" ) )
log . Printf ( "parseSubTypeMessageReport : ExpNow : %s\n" , r . ReplaceAllString ( m . Text , "${ExpNow}" ) )
log . Printf ( "parseSubTypeMessageReport : ExpLvl : %s\n" , r . ReplaceAllString ( m . Text , "${ExpLvl}" ) )
log . Printf ( "parseSubTypeMessageReport : StaminaNow : %s\n" , r . ReplaceAllString ( m . Text , "${StaminaNow}" ) )
log . Printf ( "parseSubTypeMessageReport : StaminaMax : %s\n" , r . ReplaceAllString ( m . Text , "${StaminaMax}" ) )
log . Printf ( "parseSubTypeMessageReport : Gold : %s\n" , r . ReplaceAllString ( m . Text , "${Gold}" ) )
log . Printf ( "parseSubTypeMessageReport : Pogs : %s\n" , r . ReplaceAllString ( m . Text , "${Pogs}" ) )
log . Printf ( "parseSubTypeMessageReport : Gems : %s\n" , r . ReplaceAllString ( m . Text , "${Gems}" ) )
log . Printf ( "parseSubTypeMessageReport : AtkGear : %s\n" , r . ReplaceAllString ( m . Text , "${AtkGear}" ) )
log . Printf ( "parseSubTypeMessageReport : DefGear : %s\n" , r . ReplaceAllString ( m . Text , "${DefGear}" ) )
log . Printf ( "parseSubTypeMessageReport : BagUsed : %s\n" , r . ReplaceAllString ( m . Text , "${BagUsed}" ) )
log . Printf ( "parseSubTypeMessageReport : BagDispo : %s\n" , r . ReplaceAllString ( m . Text , "${BagDispo}" ) )
* /
2019-08-21 08:37:53 +02:00
cwm . Msg = m
2019-05-28 09:00:37 +02:00
return & cwm , nil
}
2019-05-28 06:14:46 +02:00
2019-05-30 10:36:40 +02:00
func parseSubTypeMessageGRolesAck ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageGRolesAck , error ) {
cwm := ChatWarsMessageGRolesAck {
Msg : m ,
}
/ *
BartenderID64 : getObjUserID ( r . ReplaceAllString ( m . Text , "${Bartender}" ) ) ,
CommanderID64 : getObjUserID ( r . ReplaceAllString ( m . Text , "${Commander}" ) ) ,
SquireID64 : getObjUserID ( r . ReplaceAllString ( m . Text , "${Squire}" ) ) ,
TreasurerID64 : getObjUserID ( r . ReplaceAllString ( m . Text , "${Treasurer}" ) ) ,
* /
2019-08-12 10:42:18 +02:00
if len ( r . ReplaceAllString ( m . Text , "${Bartender}" ) ) > 0 {
2019-08-12 10:30:06 +02:00
cwm . BartenderID64 = getObjUserID ( r . ReplaceAllString ( m . Text , "${Bartender}" ) )
2019-05-30 10:55:38 +02:00
} else {
cwm . BartenderID64 = 0
2019-05-30 10:53:57 +02:00
}
2019-08-12 10:42:18 +02:00
if len ( r . ReplaceAllString ( m . Text , "${Commander}" ) ) > 0 {
2019-08-12 10:30:06 +02:00
cwm . CommanderID64 = getObjUserID ( r . ReplaceAllString ( m . Text , "${Commander}" ) )
2019-05-30 10:55:38 +02:00
} else {
cwm . CommanderID64 = 0
2019-05-30 10:53:57 +02:00
}
2019-08-12 10:42:18 +02:00
if len ( r . ReplaceAllString ( m . Text , "${Squire}" ) ) > 0 {
2019-08-12 10:30:06 +02:00
cwm . SquireID64 = getObjUserID ( r . ReplaceAllString ( m . Text , "${Squire}" ) )
2019-05-30 10:55:38 +02:00
} else {
cwm . SquireID64 = 0
2019-05-30 10:53:57 +02:00
}
2019-08-12 10:42:18 +02:00
if len ( r . ReplaceAllString ( m . Text , "${Treasurer}" ) ) > 0 {
2019-08-12 10:30:06 +02:00
cwm . TreasurerID64 = getObjUserID ( r . ReplaceAllString ( m . Text , "${Treasurer}" ) )
2019-05-30 10:55:38 +02:00
} else {
cwm . TreasurerID64 = 0
2019-05-30 10:53:57 +02:00
}
2019-08-13 05:09:44 +02:00
/ *
log . Printf ( "parseSubTypeMessageGRolesAck : Guild roles Ack identified\n" )
log . Printf ( "parseSubTypeMessageGRolesAck : Bartender : %s\n" , r . ReplaceAllString ( m . Text , "${Bartender}" ) )
log . Printf ( "parseSubTypeMessageGRolesAck : Commander : %s\n" , r . ReplaceAllString ( m . Text , "${Commander}" ) )
log . Printf ( "parseSubTypeMessageGRolesAck : Squire : %s\n" , r . ReplaceAllString ( m . Text , "${Squire}" ) )
log . Printf ( "parseSubTypeMessageGRolesAck : Treasurer : %s\n" , r . ReplaceAllString ( m . Text , "${Treasurer}" ) )
log . Printf ( "cwm.BartenderID64 : %d\n" , cwm . BartenderID64 )
log . Printf ( "cwm.CommanderID64 : %d\n" , cwm . CommanderID64 )
log . Printf ( "cwm.SquireID64 : %d\n" , cwm . SquireID64 )
log . Printf ( "cwm.TreasurerID64 : %d\n" , cwm . TreasurerID64 )
* /
2019-08-21 08:37:53 +02:00
cwm . Msg = m
2019-05-30 10:36:40 +02:00
return & cwm , nil
}
2019-05-28 09:00:37 +02:00
func parseSubTypeMessageGoQuestAck ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageGoQuestAck , error ) {
cwm := ChatWarsMessageGoQuestAck { }
2019-07-08 12:29:23 +02:00
/ *
log . Printf ( "parseSubTypeMessageGoQuestAck : Go Quest Ack report identified\n" )
log . Printf ( "parseSubTypeMessageGoQuestAck : Place : %s\n" , r . ReplaceAllString ( m . Text , "${Place}" ) )
log . Printf ( "parseSubTypeMessageGoQuestAck : Time : %s\n" , r . ReplaceAllString ( m . Text , "${Time}" ) )
* /
2019-07-09 07:04:23 +02:00
switch quest := strings . ToLower ( r . ReplaceAllString ( m . Text , "${Place}" ) ) ; quest {
case "forest" :
cwm . QuestTypeID = objSubTypeQuestForest
default :
log . Printf ( "parseSubTypeMessageGoQuestAck : no reference for quest `%s`\n" , quest )
cwm . QuestTypeID = objSubTypeQuestForest
}
2019-07-08 12:31:22 +02:00
i , err := strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${Time}" ) , 10 , 64 )
if err != nil {
2019-07-08 12:33:24 +02:00
cwm . Duration = time . Duration ( i ) * time . Minute
2019-07-08 12:31:22 +02:00
} else {
cwm . Duration = 0 * time . Minute
}
2019-08-21 08:37:53 +02:00
cwm . Msg = m
2019-05-28 06:14:46 +02:00
return & cwm , nil
}
2019-05-25 13:12:31 +02:00
func parseSubTypeMessageUnionWar ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageUnionWar , error ) {
2019-05-26 13:30:21 +02:00
//re := regexp.MustCompile('^(🏠Trade union news:\\n)(?P<Union>(?s:[^(🎪State of exclusive rights)]*))(🎪State of exclusive rights:)(?P<Fair>(?s:.*))$')
2019-05-25 13:12:31 +02:00
/ *
" ^ ( 🏠 Trade union news : \ \ n ) { 0 , 1 } ` +
` (((?P<Union>[A-Z][a-z]+ [A-Z][a-z]+) was (?P<Status>(easily defended|defended successfully|breached.|easily breached.|closely breached.))(Attackers have pillage union for (?<Loot>[0-9]+) stock):\\n ` +
` (🎖Attack leaders: (?P<AtkCastle1>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUser1>[^,]+)(,(?P<AtkCastle2>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUser2>[^,]+)) { 0,1}(,(?P<AtkCastle3>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUser3>[^,]+)) { 0,1}(,(?P<AtkCastle4>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUser4>[^,]+)) { 0,1}) { 0,1}(\\n) { 0,1} ` +
` (🎖Defense leaders: (?P<DefCastle1>[🐉🦅🐺🦈🦌🥔🌑])(?P<DefUser1>[^,]+)(,(?P<DefCastle2>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUser2>[^,]+)) { 0,1}(,(?P<DefCastle3>[🐉🦅🐺🦈🦌🥔🌑])(?P<DefUser3>[^,]+)) { 0,1}(,(?P<DefCastle4>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUser4>[^,]+)) { 0,1}) { 0,1}(\\n) { 0,1})(\\n)*)* ` +
` (🎪State of exclusive rights:\\n) { 0,1} ` +
` (((?P<Fair>[A-Z][a-z]+ [A-Z][a-z]+) (?P<Status>(was protected|belongs to)( (?P<Attacker>[A-Z][a-z]+ [A-Z][a-z]+):)\\n ` +
` (🎖Attack leaders: (?P<AtkCastle1>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUser1>[^,]+)(,(?P<AtkCastle2>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUser2>[^,]+)) { 0,1}(,(?P<AtkCastle3>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUser3>[^,]+)) { 0,1}(,(?P<AtkCastle4>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUser4>[^,]+)) { 0,1}) { 0,1}(\\n) { 0,1} ` +
` (🎖Defense leaders: (?P<DefCastle1>[🐉🦅🐺🦈🦌🥔🌑])(?P<DefUser1>[^,]+)(,(?P<DefCastle2>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUser2>[^,]+)) { 0,1}(,(?P<DefCastle3>[🐉🦅🐺🦈🦌🥔🌑])(?P<DefUser3>[^,]+)) { 0,1}(,(?P<DefCastle4>[🐉🦅🐺🦈🦌🥔🌑])(?P<AtkUser4>[^,]+)) { 0,1}) { 0,1}(\\n) { 0,1})(\\n)*)* ` +
` $ ) "
* /
cwm := ChatWarsMessageUnionWar { }
/ *
log . Printf ( "parseSubTypeMessageReport : War report identified\n" )
log . Printf ( "parseSubTypeMessageReport : Castle : %s\n" , r . ReplaceAllString ( m . Text , "${Castle}" ) )
log . Printf ( "parseSubTypeMessageReport : Guild : %s\n" , r . ReplaceAllString ( m . Text , "${Guild}" ) )
log . Printf ( "parseSubTypeMessageReport : User : %s\n" , r . ReplaceAllString ( m . Text , "${User}" ) )
log . Printf ( "parseSubTypeMessageReport : Attack : %s\n" , r . ReplaceAllString ( m . Text , "${Attack}" ) )
log . Printf ( "parseSubTypeMessageReport : AttackMod : %s\n" , r . ReplaceAllString ( m . Text , "${AttackMod}" ) )
log . Printf ( "parseSubTypeMessageReport : Defense : %s\n" , r . ReplaceAllString ( m . Text , "${Defense}" ) )
log . Printf ( "parseSubTypeMessageReport : Level : %s\n" , r . ReplaceAllString ( m . Text , "${Level}" ) )
log . Printf ( "parseSubTypeMessageReport : Exp : %s\n" , r . ReplaceAllString ( m . Text , "${Exp}" ) )
log . Printf ( "parseSubTypeMessageReport : Gold : %s\n" , r . ReplaceAllString ( m . Text , "${Gold}" ) )
log . Printf ( "parseSubTypeMessageReport : Stock : %s\n" , r . ReplaceAllString ( m . Text , "${Stock}" ) )
log . Printf ( "parseSubTypeMessageReport : Stamina : %s\n" , r . ReplaceAllString ( m . Text , "${Stamina}" ) )
log . Printf ( "parseSubTypeMessageReport : Crit : %s\n" , r . ReplaceAllString ( m . Text , "${Crit}" ) )
* /
return & cwm , nil
}
2019-05-18 16:16:26 +02:00
func parseSubTypeMessageDuelFight ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageDuelFight , error ) {
2019-05-18 16:15:24 +02:00
cwm := ChatWarsMessageDuelFight { }
2019-05-19 14:00:18 +02:00
if r . ReplaceAllString ( m . Text , "${Duelist1}" ) == r . ReplaceAllString ( m . Text , "${WinDuelist}" ) {
cwm . WinCastle = r . ReplaceAllString ( m . Text , "${Castle1}" )
cwm . WinGuild = r . ReplaceAllString ( m . Text , "${Guild1}" )
cwm . WinUser = r . ReplaceAllString ( m . Text , "${Duelist1}" )
cwm . WinLife , _ = strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${Life1}" ) , 10 , 64 )
cwm . LossCastle = r . ReplaceAllString ( m . Text , "${Castle2}" )
cwm . LossGuild = r . ReplaceAllString ( m . Text , "${Guild2}" )
cwm . LossUser = r . ReplaceAllString ( m . Text , "${Duelist2}" )
cwm . LossLife , _ = strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${Life2}" ) , 10 , 64 )
} else {
cwm . LossCastle = r . ReplaceAllString ( m . Text , "${Castle1}" )
cwm . LossGuild = r . ReplaceAllString ( m . Text , "${Guild1}" )
cwm . LossUser = r . ReplaceAllString ( m . Text , "${Duelist1}" )
cwm . LossLife , _ = strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${Life1}" ) , 10 , 64 )
cwm . WinCastle = r . ReplaceAllString ( m . Text , "${Castle2}" )
cwm . WinGuild = r . ReplaceAllString ( m . Text , "${Guild2}" )
cwm . WinUser = r . ReplaceAllString ( m . Text , "${Duelist2}" )
cwm . WinLife , _ = strconv . ParseInt ( r . ReplaceAllString ( m . Text , "${Life2}" ) , 10 , 64 )
}
cwm . Weapon = r . ReplaceAllString ( m . Text , "${Weapon}" )
2019-05-18 16:15:24 +02:00
return & cwm , nil
}
2019-05-13 08:16:44 +02:00
func parseSubTypeMessageMiniWar ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageMiniWar , error ) {
2019-05-13 08:15:53 +02:00
t , err := time . Parse ( "02/01/06 15:04" , r . ReplaceAllString ( m . Text , "${Time}" ) )
logOnError ( err , "parseSubTypeMessageMiniWar : parsing time : " + r . ReplaceAllString ( m . Text , "${Time}" ) )
cwm := ChatWarsMessageMiniWar {
Time : t ,
Report : make ( map [ string ] * ChatWarsMessageMiniWarCastle ) ,
}
for i := 1 ; i <= 7 ; i ++ {
loot := fmt . Sprintf ( "${Loot%d}" , i )
gardian := fmt . Sprintf ( "${Gardian%d}" , i )
result := fmt . Sprintf ( "${Result%d}" , i )
gold := fmt . Sprintf ( "${Gold%d}" , i )
stock := fmt . Sprintf ( "${Stock%d}" , i )
rep := ChatWarsMessageMiniWarCastle {
Gardian : r . ReplaceAllString ( m . Text , gardian ) ,
Result : r . ReplaceAllString ( m . Text , result ) ,
}
rep . Gold , err = strconv . ParseInt ( r . ReplaceAllString ( m . Text , gold ) , 10 , 64 )
rep . Stock , err = strconv . ParseInt ( r . ReplaceAllString ( m . Text , stock ) , 10 , 64 )
cwm . Report [ r . ReplaceAllString ( m . Text , loot ) ] = & rep
}
for i := 1 ; i <= 7 ; i ++ {
score := fmt . Sprintf ( "${Score%d}" , i )
points := fmt . Sprintf ( "${Points%d}" , i )
cwm . Report [ r . ReplaceAllString ( m . Text , score ) ] . Points , err = strconv . ParseInt ( r . ReplaceAllString ( m . Text , points ) , 10 , 64 )
}
2019-05-13 08:17:15 +02:00
return & cwm , err
2019-05-13 08:15:53 +02:00
}
2019-05-15 12:02:17 +02:00
func parseSubTypeMessagePillageInc ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessagePillageInc , error ) {
cwm := ChatWarsMessagePillageInc { }
cwm . Attacker = r . ReplaceAllString ( m . Text , "${Attacker}" )
cwm . Castle = r . ReplaceAllString ( m . Text , "${Castle}" )
cwm . Guild = r . ReplaceAllString ( m . Text , "${Guild}" )
return & cwm , nil
}