2019-05-13 08:15:53 +02:00
package main
import (
"fmt"
2019-05-18 09:46:34 +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-05-30 11:09:55 +02:00
"unicode/utf8"
2019-05-13 08:15:53 +02:00
)
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-05-28 06:14:46 +02:00
func parseSubTypeMessageMeAck ( m * ChatWarsMessage , r * regexp . Regexp ) ( * ChatWarsMessageMeAck , error ) {
2019-05-30 07:49:11 +02:00
cwm := ChatWarsMessageMeAck {
UserID64 : getObjUserID ( r . ReplaceAllString ( m . Text , "${Player}" ) ) ,
GuildID64 : getObjGuildID ( r . ReplaceAllString ( m . Text , "${Guild}" ) ) ,
State : r . ReplaceAllString ( m . Text , "${State}" ) ,
}
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}" ) )
* /
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-05-30 10:57:10 +02:00
if strings . Compare ( ` [unassigned] ` , r . ReplaceAllString ( m . Text , "${Bartender}" ) ) != 0 {
2019-05-30 10:53:57 +02:00
s := r . ReplaceAllString ( m . Text , "${Bartender}" )
2019-05-30 11:10:26 +02:00
_ , i := utf8 . DecodeRuneInString ( s )
2019-05-30 11:30:10 +02:00
_ , j := utf8 . DecodeRuneInString ( s [ i : ] )
2019-05-30 11:28:50 +02:00
cwm . BartenderID64 = getObjUserID ( s [ i + j : ] )
2019-05-30 10:55:38 +02:00
} else {
cwm . BartenderID64 = 0
2019-05-30 10:53:57 +02:00
}
2019-05-30 10:57:10 +02:00
if strings . Compare ( ` [unassigned] ` , r . ReplaceAllString ( m . Text , "${Commander}" ) ) != 0 {
2019-05-30 10:53:57 +02:00
s := r . ReplaceAllString ( m . Text , "${Commander}" )
2019-05-30 11:10:26 +02:00
_ , i := utf8 . DecodeRuneInString ( s )
2019-05-30 11:30:10 +02:00
_ , j := utf8 . DecodeRuneInString ( s [ i : ] )
2019-05-30 11:28:50 +02:00
cwm . CommanderID64 = getObjUserID ( s [ i + j : ] )
2019-05-30 10:55:38 +02:00
} else {
cwm . CommanderID64 = 0
2019-05-30 10:53:57 +02:00
}
2019-05-30 10:57:10 +02:00
if strings . Compare ( ` [unassigned] ` , r . ReplaceAllString ( m . Text , "${Squire}" ) ) != 0 {
2019-05-30 11:26:42 +02:00
s := r . ReplaceAllString ( m . Text , "${Squire}" )
2019-05-30 11:10:26 +02:00
_ , i := utf8 . DecodeRuneInString ( s )
2019-05-30 11:30:10 +02:00
_ , j := utf8 . DecodeRuneInString ( s [ i : ] )
2019-05-30 11:28:50 +02:00
cwm . SquireID64 = getObjUserID ( s [ i + j : ] )
2019-05-30 10:55:38 +02:00
} else {
cwm . SquireID64 = 0
2019-05-30 10:53:57 +02:00
}
2019-05-30 10:57:10 +02:00
if strings . Compare ( ` [unassigned] ` , r . ReplaceAllString ( m . Text , "${Treasurer}" ) ) != 0 {
2019-05-30 11:26:42 +02:00
s := r . ReplaceAllString ( m . Text , "${Treasurer}" )
2019-05-30 11:10:26 +02:00
_ , i := utf8 . DecodeRuneInString ( s )
2019-05-30 11:30:10 +02:00
_ , j := utf8 . DecodeRuneInString ( s [ i : ] )
2019-05-30 11:28:50 +02:00
cwm . TreasurerID64 = getObjUserID ( s [ i + j : ] )
2019-05-30 10:55:38 +02:00
} else {
cwm . TreasurerID64 = 0
2019-05-30 10:53:57 +02:00
}
2019-05-30 12:57:00 +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-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-05-30 10:36:40 +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-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
}