Documentation ¶
Index ¶
- Constants
- Variables
- func Int(i int) *int
- func IsArenaRunning() (bool, error)
- func ParseCollection(raw string) (map[string]int, error)
- func String(s string) *string
- type ArenaAuthRequest
- type ArenaAuthRequestPayload
- type ArenaDeck
- type ArenaDeckCard
- type ArenaEvent
- type ArenaEventClaimPrize
- type ArenaEventClaimPrizeModuleInstanceData
- type ArenaEventClaimPrizeRequest
- type ArenaEventClaimPrizeRequestParams
- type ArenaEventClaimPrizeWinLossGate
- type ArenaEventGetPlayerCourse
- type ArenaEventJoin
- type ArenaEventPayEntry
- type ArenaInventoryUpdate
- type ArenaInventoryUpdateDelta
- type ArenaMatch
- type ArenaMatchEnd
- type ArenaMatchEndParams
- type ArenaMatchEvent
- type ArenaMatchGameObject
- type ArenaModuleInstanceData
- type ArenaPlay
- type ArenaPlayerInventory
- type ArenaPlayerInventoryBooster
- type ArenaRankInfo
- type ArenaWinLossGate
- type Booster
- type BoosterCard
- type GameStateMessage
- type GreToClientEvent
- type GreToClientMessages
- type Log
- func (l *Log) Auth() (string, error)
- func (l *Log) Boosters() ([]*Booster, error)
- func (l *Log) Collection() (map[string]int, error)
- func (l *Log) Decks() ([]ArenaDeck, error)
- func (l *Log) Events() ([]*ArenaEvent, error)
- func (l *Log) Inventory() (*ArenaPlayerInventory, error)
- func (l *Log) Matches() ([]*ArenaMatch, error)
- func (l *Log) Rank() (rank *ArenaRankInfo, err error)
- type LoggerType
- type PlayerState
- type RankUpdated
- type Segment
- func (s *Segment) IsArenaDecks() bool
- func (s *Segment) IsClaimPrize() bool
- func (s *Segment) IsCollection() bool
- func (s *Segment) IsCrackBooster() bool
- func (s *Segment) IsEventDeckSubmit() bool
- func (s *Segment) IsEventGetPlayerCourse() bool
- func (s *Segment) IsEventJoin() bool
- func (s *Segment) IsInventoryUpdate() bool
- func (s *Segment) IsMatchEnd() bool
- func (s *Segment) IsMatchEvent() bool
- func (s *Segment) IsMatchStart() bool
- func (s *Segment) IsPlayerAuth() bool
- func (s *Segment) IsPlayerInventory() bool
- func (s *Segment) IsRankInfo() bool
- func (s *Segment) IsRankUpdated() bool
- func (s *Segment) JSON(i interface{}) error
- func (s *Segment) JoinedEvent() bool
- func (s *Segment) ParseArenaDecks() ([]ArenaDeck, error)
- func (s *Segment) ParseAuth() (string, error)
- func (s *Segment) ParseCollection() (map[string]int, error)
- func (s *Segment) ParseCrackBooster() (*Booster, error)
- func (s *Segment) ParseEventClaimPrize() (*ArenaEventClaimPrize, error)
- func (s *Segment) ParseEventJoin() (*ArenaEventJoin, error)
- func (s *Segment) ParseEventPayEntry() (*ArenaEventPayEntry, error)
- func (s *Segment) ParseInventoryUpdate() (*ArenaInventoryUpdate, error)
- func (s *Segment) ParseJoinedEvent() (*ArenaEventGetPlayerCourse, error)
- func (s *Segment) ParseMatchEnd() (*ArenaMatchEnd, error)
- func (s *Segment) ParseMatchEvent() (*ArenaMatchEvent, error)
- func (s *Segment) ParseMatchStart() (*ArenaMatch, error)
- func (s *Segment) ParsePlayerInventory() (*ArenaPlayerInventory, error)
- func (s *Segment) ParseRankInfo() (*ArenaRankInfo, error)
- func (s *Segment) ParseRankUpdated() (*RankUpdated, error)
- type SegmentType
- type TurnInfo
- type UploadData
Constants ¶
const LogDir = ""
LogDir on Linux
Variables ¶
var ErrNotFound = errors.New("not found")
ErrNotFound is the error returned when a log item is not found
Functions ¶
func ParseCollection ¶
ParseCollection looks for a MTGA Collection JSON object in a given input
Types ¶
type ArenaAuthRequest ¶
type ArenaAuthRequest struct {
Payload ArenaAuthRequestPayload `json:"Payload"`
}
ArenaAuthRequest is the base structure which wraps a payload
func ParseAuthRequest ¶
func ParseAuthRequest(raw string) (*ArenaAuthRequest, error)
ParseAuthRequest parses the auth request (for username)
type ArenaAuthRequestPayload ¶
type ArenaAuthRequestPayload struct {
PlayerName string `json:"PlayerName"`
}
ArenaAuthRequestPayload is the payload the Arena client sends when authenticating. We only are interested in the Player's name
type ArenaDeck ¶
type ArenaDeck struct { ID string `json:"id"` Name string `json:"name"` Description string `json:"description"` Format string `json:"format"` ResourceID string `json:"resourceId"` DeckTileID int `json:"deckTileId"` MainDeck []ArenaDeckCard `json:"mainDeck"` Sideboard []ArenaDeckCard `json:"sideboard"` }
ArenaDeck is the log format for an ArenaDeck
type ArenaDeckCard ¶
ArenaDeckCard hold the info of the cards in a deck
type ArenaEvent ¶
type ArenaEvent struct { ClaimPrize *ArenaEventClaimPrize `json:"claimPrize"` Prize *ArenaInventoryUpdate `json:"prize"` }
ArenaEvent encapsulates the various stages a player may be in an event. When the log is parsed, the player may have started an event, be in the middle of an event, or just signed on to finish an event. The server will use the ID to track individual events.
type ArenaEventClaimPrize ¶ added in v0.5.0
type ArenaEventClaimPrize struct { ID string `json:"Id"` InternalEventName string `json:"InternalEventName"` ModuleInstanceData *ArenaEventClaimPrizeModuleInstanceData `json:"ModuleinstanceData"` CurrentEventState string `json:"CurrentEventState"` CurrentModule string `json:"CurrentModule"` CardPool []int `json:"Cardpool"` CourseDeck *ArenaDeck `json:"CourseDeck"` }
ArenaEventClaimPrize is what is sent to the client when the user claims their prize after finishing an event
type ArenaEventClaimPrizeModuleInstanceData ¶ added in v0.5.0
type ArenaEventClaimPrizeModuleInstanceData struct { HasPaidEntry string `json:"HasPaidEntry"` DeckSelected bool `json:"DeckSelected"` WinLossGate *ArenaEventClaimPrizeWinLossGate `json:"WinLossGate"` }
ArenaEventClaimPrizeModuleInstanceData has the data in claim prize about the event
type ArenaEventClaimPrizeRequest ¶
type ArenaEventClaimPrizeRequest struct {
// contains filtered or unexported fields
}
ArenaEventClaimPrizeRequest is the inventory update from an event to know what the prizes are.
type ArenaEventClaimPrizeRequestParams ¶
type ArenaEventClaimPrizeRequestParams struct {
EventName *string `json:"eventName"`
}
ArenaEventClaimPrizeRequestParams are the params sent when a client requests the prize (Which prize does it request?)
type ArenaEventClaimPrizeWinLossGate ¶ added in v0.5.0
type ArenaEventClaimPrizeWinLossGate struct { MaxWins int `json:"MaxWins"` MaxLosses int `json:"MaxLosses"` CurrentWins int `json:"CurrentWins"` CurrentLosses int `json:"CurrentLosses"` ProcessedMatchIds []string `json:"ProcessedMatchIds"` }
ArenaEventClaimPrizeWinLossGate has the player record for an event as well as max wins/losses and the matches played.
type ArenaEventGetPlayerCourse ¶
type ArenaEventGetPlayerCourse struct { ID string InternalEventName string ModuleInstanceData ArenaModuleInstanceData CurrentEventState string CurrentModule string CardPool []int CourseDeck *ArenaDeck }
ArenaEventGetPlayerCourse is fired when the player goes to find a new match. JoinQueue typically follows
type ArenaEventJoin ¶
type ArenaEventJoin struct { ID string InternalEventName string CurrentEventState string CurrentModule string CardPool []int CourseDeck ArenaDeck }
ArenaEventJoin is the payload when a user joins an event CardPool: Used in draft to list the cards available in the deck
type ArenaEventPayEntry ¶
type ArenaEventPayEntry struct { ID string InternalEventName string ModuleInstanceData ArenaModuleInstanceData CurrentEventState string CurrentModule string CardPool []int CourseDeck *ArenaDeck }
ArenaEventPayEntry is the payload when the user pays for an event
type ArenaInventoryUpdate ¶
type ArenaInventoryUpdate struct { Delta *ArenaInventoryUpdateDelta `json:"delta"` Context string `json:"context"` }
ArenaInventoryUpdate holds the incoming update for the player
type ArenaInventoryUpdateDelta ¶
type ArenaInventoryUpdateDelta struct { GemsDelta int `json:"gemsDelta"` BoosterDelta []ArenaPlayerInventoryBooster `json:"boosterDelta"` CardsAdded []int `json:"cardsAdded"` DecksAdded []interface{} `json:"decksAdded"` VanityItemsAdded []interface{} `json:"vanityItemsAdded"` VanityItemsRemoved []interface{} `json:"vanityItemsRemoved"` DraftTokensDelta int `json:"draftTokensDelta"` GoldDelta int `json:"goldDelta"` SealedTokensDelta int `json:"sealedTokensDelta"` VaultProgressDelta float64 `json:"vaultProgressDelta"` WcCommonDelta int `json:"wcCommonDelta"` WcUncommonDelta int `json:"wcUncommonDelta"` WcRareDelta int `json:"wcRarreDelta"` WcMythicDelta int `json:"wcMythicDelta"` }
ArenaInventoryUpdateDelta holds the delta change in a players inventory
type ArenaMatch ¶
type ArenaMatch struct { MatchID string `json:"matchId"` GameStart time.Time `json:"gameStart"` OpponentScreenName string `json:"opponentScreenName"` OpponentIsWotc bool `json:"opponentIsWotc"` OpponentRankingClass string `json:"opponentRankingClass"` OpponentRankingTier int `json:"opponentRankingTier"` OpponentMythicPercentile float64 `json:"opponentMythicPercentile"` OpponentMythicLeaderboardPlace int `json:"opponentMythicLeaderboardPlace"` EventID string `json:"eventId"` SeatID *int `json:"seatId"` TeamID *int `json:"teamId"` GameNumber *int `json:"gameNumber"` WinningTeamID *int `json:"winningTeamId"` WinningReason *string `json:"winningReason"` TurnCount *int `json:"turnCount"` SecondsCount *int `json:"secondsCount"` CourseDeck *ArenaDeck `json:"CourseDeck"` SeenObjects map[int][]ArenaMatchGameObject `json:"seenObjects"` }
ArenaMatch is a match in Arena. May not be completed yet
func ParseMatches ¶
func ParseMatches(raw string) []ArenaMatch
ParseMatches finds the matches in a log
func (*ArenaMatch) LogMatchEvent ¶
func (a *ArenaMatch) LogMatchEvent(event *ArenaMatchEvent)
LogMatchEvent adds an event to the log
type ArenaMatchEnd ¶
type ArenaMatchEnd struct {
Params *ArenaMatchEndParams `json:"params"`
}
ArenaMatchEnd is the outer structure
type ArenaMatchEndParams ¶
type ArenaMatchEndParams struct {
PayloadObject *ArenaMatch `json:"payloadObject"`
}
ArenaMatchEndParams are the params which hold the results of the match
type ArenaMatchEvent ¶
type ArenaMatchEvent struct { TransactionID string `json:"transactionId"` Timestamp string `json:"timestamp"` GreToClientEvent GreToClientEvent `json:"greToClientEvent"` }
ArenaMatchEvent is an event in the match
type ArenaMatchGameObject ¶
type ArenaMatchGameObject struct { InstanceID int `json:"instanceId"` GrpID int `json:"grpId"` Type string `json:"type"` ZoneID int `json:"zoneId"` Visibility string `json:"visibility"` OwnerSeatID int `json:"ownerSeatId"` }
ArenaMatchGameObject is a game object in a match
func (ArenaMatchGameObject) Hash ¶ added in v0.3.0
func (a ArenaMatchGameObject) Hash() string
Hash returns a unique string for this object
type ArenaModuleInstanceData ¶
type ArenaModuleInstanceData struct { HasPaidEntry string WinLossGate *ArenaWinLossGate }
ArenaModuleInstanceData is instance data in a request. This is used in: * ArenaEventPayEntry: To see how they paid.
type ArenaPlay ¶
type ArenaPlay struct { MatchID string `json:"matchId"` OpponentScreenName string `json:"opponentScreenName"` OpponentIsWotc bool `json:"opponentIsWotc"` OpponentRankingClass string `json:"opponentRankingClass"` OpponentRankingTier int `json:"opponentRankingTier"` OpponentMythicPercentile float64 `json:"opponentMythicPercentile"` OpponentMythicLeaderboardPlace int `json:"opponentMythicLeaderboardPlace"` EventID string `json:"eventId"` SeatID *int `json:"seatId"` TeamID *int `json:"teamId"` GameNumber *int `json:"gameNumber"` WinningTeamID *int `json:"winningTeamId"` WinningReason *string `json:"winningReason"` TurnCount *int `json:"turnCount"` SecondsCount *int `json:"secondsCount"` CourseDeck *ArenaDeck `json:"CourseDeck"` }
ArenaPlay :12494
type ArenaPlayerInventory ¶
type ArenaPlayerInventory struct { PlayerID string `json:"playerId"` WcCommon int `json:"wcCommon"` WcUncommon int `json:"wcUncommon"` WcRare int `json:"wcRare"` WcMythic int `json:"wcMythic"` Gold int `json:"gold"` Gems int `json:"gems"` DraftTokens int `json:"draftTokens"` SealedTokens int `json:"sealedTokens"` WcTrackPosition int `json:"wcTrackPosition"` VaultProgress float64 `json:"vaultProgress"` }
ArenaPlayerInventory is your player profile details
func ParsePlayerInventory ¶
func ParsePlayerInventory(raw string) (*ArenaPlayerInventory, error)
ParsePlayerInventory gets a players details
type ArenaPlayerInventoryBooster ¶
ArenaPlayerInventoryBooster is a struct which holds the type of booster and how many of that booster a player has.
type ArenaRankInfo ¶
type ArenaRankInfo struct { PlayerID *string `json:"playerId"` ConstructedSeasonOrdinal *int `json:"constructedSeasonOrdinal"` ConstructedClass *string `json:"constructedClass"` ConstructedLevel *int `json:"constructedLevel"` ConstructedStep *int `json:"constructedStep"` ConstructedMatchesWon *int `json:"constructedMatchesWon"` ConstructedMatchesLost *int `json:"constructedMatchesLost"` ConstructedMatchesDrawn *int `json:"constructedMatchesDrawn"` LimitedSeasonOrdinal *int `json:"limitedSeasonOrdinal"` LimitedClass *string `json:"limitedClass"` LimitedLevel *int `json:"limitedLevel"` LimitedStep *int `json:"limitedStep"` LimitedMatchesWon *int `json:"limitedMatchesWon"` LimitedMatchesLost *int `json:"limitedMatchesLost"` LimitedMatchesDrawn *int `json:"limitedMatchesDrawn"` }
ArenaRankInfo contains a players rank info
func ParseRankInfo ¶
func ParseRankInfo(raw string) (*ArenaRankInfo, error)
ParseRankInfo finds a users rank info
func (*ArenaRankInfo) Update ¶ added in v0.4.0
func (a *ArenaRankInfo) Update(update *RankUpdated)
Update updates rank info with a server update
type ArenaWinLossGate ¶
type ArenaWinLossGate struct { MaxWins int MaxLosses int CurrentWins int CurrentLosses int ProcessedMatchIDs []string }
ArenaWinLossGate tracks your results as you go through an event
type Booster ¶ added in v0.4.0
type Booster struct { CardsOpened []BoosterCard `json:"cardsOpened"` TotalVaultProgress float64 `json:"totalVaultProgress"` WildCardTrackMoves int `json:"wildCardTrackMoves"` WildCardTrackPosition int `json:"wildCardTrackPosition"` WildCardTrackCommons int `json:"wildCardTrackCommons"` WildCardTrackUnCommons int `json:"wildCardTrackUncommons"` WildCardTrackRares int `json:"wildCardTrackRares"` WildCardTrackMythics int `json:"wildCardTrackMythics"` OpenedAt time.Time `json:"openedAt"` }
Booster is an opened Booster
type BoosterCard ¶ added in v0.4.0
type BoosterCard struct { GrpID int `json:"grpId"` GoldAwarded int `json:"goldAwarded"` GemsAwarded int `json:"gemsAwarded"` Set string `json:"set"` // Empty }
BoosterCard is a card opened in a booster
type GameStateMessage ¶
type GameStateMessage struct { Type string `json:"type"` GameObjects []ArenaMatchGameObject `json:"gameObjects"` TurnInfo *TurnInfo `json:"turnInfo"` Players []PlayerState `json:"players"` }
GameStateMessage see log
type GreToClientEvent ¶
type GreToClientEvent struct {
GreToClientMessages []GreToClientMessages `json:"greToClientMessages"`
}
GreToClientEvent see log
type GreToClientMessages ¶
type GreToClientMessages struct { Type string `json:"type"` GameStateMessage GameStateMessage `json:"gameStateMessage"` }
GreToClientMessages see log
type Log ¶
type Log struct {
Segments []*Segment
}
Log is the well-structured format of the output_log.txt, parsed into Segments
func (*Log) Collection ¶
Collection finds a collection
func (*Log) Events ¶ added in v0.5.0
func (l *Log) Events() ([]*ArenaEvent, error)
Events finds Arena Events in the logs
func (*Log) Inventory ¶
func (l *Log) Inventory() (*ArenaPlayerInventory, error)
Inventory finds the player inventory information
func (*Log) Matches ¶
func (l *Log) Matches() ([]*ArenaMatch, error)
Matches finds the player matches This is a little more involved, since we really need 3 pieces of information and they are not together. First, we look for the start of a match. Once we find that, we look backward until we figure out what deck they are using. Finally, we look forward again to find the result of the match. The result may not be known when we start parsing, so those values are all optional. The server only needs the MatchID to tie together the data.
func (*Log) Rank ¶
func (l *Log) Rank() (rank *ArenaRankInfo, err error)
Rank finds the rank information The game doesn't ask for the entire rank info often, so we go through the log and update the parsed rank with changes so we return the most up to date version
type LoggerType ¶
type LoggerType int
LoggerType is the logger that created this segment (log section)
const ( UnityLogger LoggerType = iota ClientGRE )
The Available Log types
type PlayerState ¶
type PlayerState struct { LifeTotal int `json:"lifeTotal"` SystemSeatNumber int `json:"systemSeatNumber"` TeamID int `json:"teamId"` ControllerSeatID int `json:"controllerSeatId"` }
PlayerState see log
type RankUpdated ¶ added in v0.4.0
type RankUpdated struct { PlayerID string `json:"playerId"` SeasonOrdinal int `json:"seasonOrdinal"` NewClass string `json:"newClass"` OldClass string `json:"oldClass"` NewLevel int `json:"newLevel"` OldLevel int `json:"oldLevel"` NewStep int `json:"newStep"` OldStep int `json:"oldStep"` WasLossProtected bool `json:"wasLossProtected"` RankUpdateType string `json:"rankUpdateType"` }
RankUpdated holds the rank update info from the server RankUpdateType: 'Constructed' | 'Limited'
type Segment ¶
type Segment struct { LoggerType LoggerType Time *time.Time SegmentType SegmentType Text string Range []int Line string }
Segment is a piece of the log
func (*Segment) IsArenaDecks ¶
IsArenaDecks checks if a segment contains Arena Decks
func (*Segment) IsClaimPrize ¶ added in v0.5.0
IsClaimPrize checks if this segment claims a prize
func (*Segment) IsCollection ¶
IsCollection checks if a segment contains the collection
func (*Segment) IsCrackBooster ¶ added in v0.4.0
IsCrackBooster checks to see if the user opened a booster
func (*Segment) IsEventDeckSubmit ¶
IsEventDeckSubmit does this segment contain a deck submit for the play queue
func (*Segment) IsEventGetPlayerCourse ¶
IsEventGetPlayerCourse does this segment contain the player course
func (*Segment) IsEventJoin ¶
IsEventJoin checks if a segment contains an Event Join
func (*Segment) IsInventoryUpdate ¶ added in v0.5.0
IsInventoryUpdate checks if a segment is an inventory update
func (*Segment) IsMatchEnd ¶
IsMatchEnd does this segment contain a match end
func (*Segment) IsMatchEvent ¶
IsMatchEvent checks if this segment contains anything interesting about a currently parsing match
func (*Segment) IsMatchStart ¶
IsMatchStart does this segment contain match start
func (*Segment) IsPlayerAuth ¶
IsPlayerAuth checks if a segment contains an auth statement
func (*Segment) IsPlayerInventory ¶
IsPlayerInventory checks if a segment contains player inventory
func (*Segment) IsRankInfo ¶
IsRankInfo checks if a segment contains Rank Info
func (*Segment) IsRankUpdated ¶ added in v0.4.0
IsRankUpdated checks if a segment contains Rank Update
func (*Segment) JoinedEvent ¶
JoinedEvent is a higher level function to find if you joined any queue with a deck. Works with events and "play"
func (*Segment) ParseArenaDecks ¶
ParseArenaDecks parses out arena decks from a segment if present. Note, it is the caller's responsibility to check if this segment contains ArenaDecks by calling `IsArenaDecks()`
func (*Segment) ParseCollection ¶
ParseCollection parses a collection from a Segment. It is up to the caller to check if this segment contains a Collection with `IsCollection()`
func (*Segment) ParseCrackBooster ¶ added in v0.4.0
ParseCrackBooster parses a booster from the log
func (*Segment) ParseEventClaimPrize ¶ added in v0.5.0
func (s *Segment) ParseEventClaimPrize() (*ArenaEventClaimPrize, error)
ParseEventClaimPrize parses an event claim prize
func (*Segment) ParseEventJoin ¶
func (s *Segment) ParseEventJoin() (*ArenaEventJoin, error)
ParseEventJoin parses out an event from JSON
func (*Segment) ParseEventPayEntry ¶
func (s *Segment) ParseEventPayEntry() (*ArenaEventPayEntry, error)
ParseEventPayEntry parses out a pay entry value
func (*Segment) ParseInventoryUpdate ¶ added in v0.5.0
func (s *Segment) ParseInventoryUpdate() (*ArenaInventoryUpdate, error)
ParseInventoryUpdate parses an incoming inventory update
func (*Segment) ParseJoinedEvent ¶
func (s *Segment) ParseJoinedEvent() (*ArenaEventGetPlayerCourse, error)
ParseJoinedEvent gets the player course, which is another good way to verify the deck the player is using going into a game.
func (*Segment) ParseMatchEnd ¶
func (s *Segment) ParseMatchEnd() (*ArenaMatchEnd, error)
ParseMatchEnd parses the match end. Contains the match ID
func (*Segment) ParseMatchEvent ¶
func (s *Segment) ParseMatchEvent() (*ArenaMatchEvent, error)
ParseMatchEvent looks through the match segments and pulls out cards played by whom
func (*Segment) ParseMatchStart ¶
func (s *Segment) ParseMatchStart() (*ArenaMatch, error)
ParseMatchStart parses out the match start (will return an incomplete ArenaMatch object)
func (*Segment) ParsePlayerInventory ¶
func (s *Segment) ParsePlayerInventory() (*ArenaPlayerInventory, error)
ParsePlayerInventory parses the player inventory information from a segment
func (*Segment) ParseRankInfo ¶
func (s *Segment) ParseRankInfo() (*ArenaRankInfo, error)
ParseRankInfo parses the rank information out of a segment.
func (*Segment) ParseRankUpdated ¶ added in v0.4.0
func (s *Segment) ParseRankUpdated() (*RankUpdated, error)
ParseRankUpdated parses the rank update
type SegmentType ¶
type SegmentType int
SegmentType is the type of log info
const ( Unknown SegmentType = iota PlayerInventoryGetPlayerInventory PlayerInventoryGetPlayerCards DeckGetDeckLists EventGetCombinedRankInfo EventJoin EventPayEntry EventGetPlayerCourse EventDeckSubmit EventMatchCreated PlayerAuth MatchStart MatchEnd MatchEvent CrackBooster InventoryRankUpdated EventClaimPrize IncomingInventoryUpdate )
The type of data you can expect to find in the text of the log
type TurnInfo ¶
type TurnInfo struct { Phase string `json:"phase"` Step string `json:"step"` TurnNumber int `json:"turnNumber"` ActivePlayer int `json:"activePlayer"` }
TurnInfo see log
type UploadData ¶
type UploadData struct { IsPlaying bool `json:"isPlaying"` Collection map[string]int `json:"collection"` Decks []ArenaDeck `json:"deck"` Inventory *ArenaPlayerInventory `json:"inventory"` Rank *ArenaRankInfo `json:"rank"` Auth *ArenaAuthRequest `json:"auth"` Matches []*ArenaMatch `json:"matches"` Boosters []*Booster `json:"boosters"` Events []*ArenaEvent `json:"events"` }
UploadData encapsulates the data to send to the server