1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
/*
Implements methods to interact with the official Trade Offer API.
See: https://developer.valvesoftware.com/wiki/Steam_Web_API/IEconService
*/
package tradeoffer
import (
"encoding/json"
"github.com/Philipp15b/go-steam/economy/inventory"
"github.com/Philipp15b/go-steam/steamid"
)
type TradeOfferState uint
const (
TradeOfferState_Invalid TradeOfferState = 1 // Invalid
TradeOfferState_Active = 2 // This trade offer has been sent, neither party has acted on it yet.
TradeOfferState_Accepted = 3 // The trade offer was accepted by the recipient and items were exchanged.
TradeOfferState_Countered = 4 // The recipient made a counter offer
TradeOfferState_Expired = 5 // The trade offer was not accepted before the expiration date
TradeOfferState_Canceled = 6 // The sender cancelled the offer
TradeOfferState_Declined = 7 // The recipient declined the offer
TradeOfferState_InvalidItems = 8 // Some of the items in the offer are no longer available (indicated by the missing flag in the output)
TradeOfferState_CreatedNeedsConfirmation = 9 // The offer hasn't been sent yet and is awaiting email/mobile confirmation. The offer is only visible to the sender.
TradeOfferState_CanceledBySecondFactor = 10 // Either party canceled the offer via email/mobile. The offer is visible to both parties, even if the sender canceled it before it was sent.
TradeOfferState_InEscrow = 11 // The trade has been placed on hold. The items involved in the trade have all been removed from both parties' inventories and will be automatically delivered in the future.
)
type TradeOfferConfirmationMethod uint
const (
TradeOfferConfirmationMethod_Invalid TradeOfferConfirmationMethod = 0
TradeOfferConfirmationMethod_Email = 1
TradeOfferConfirmationMethod_MobileApp = 2
)
type Asset struct {
AppId uint32 `json:",string"`
ContextId uint64 `json:",string"`
AssetId uint64 `json:",string"`
CurrencyId uint64 `json:",string"`
ClassId uint64 `json:",string"`
InstanceId uint64 `json:",string"`
Amount uint64 `json:",string"`
Missing bool
}
type TradeOffer struct {
TradeOfferId uint64 `json:",string"`
TradeId uint64 `json:",string"`
OtherAccountId uint32 `json:"accountid_other"`
OtherSteamId steamid.SteamId `json:"-"`
Message string `json:"message"`
ExpirationTime uint32 `json:"expiraton_time"`
State TradeOfferState `json:"trade_offer_state"`
ToGive []*Asset `json:"items_to_give"`
ToReceive []*Asset `json:"items_to_receive"`
IsOurOffer bool `json:"is_our_offer"`
TimeCreated uint32 `json:"time_created"`
TimeUpdated uint32 `json:"time_updated"`
EscrowEndDate uint32 `json:"escrow_end_date"`
ConfirmationMethod TradeOfferConfirmationMethod `json:"confirmation_method"`
}
func (t *TradeOffer) UnmarshalJSON(data []byte) error {
type Alias TradeOffer
aux := struct {
*Alias
}{
Alias: (*Alias)(t),
}
if err := json.Unmarshal(data, &aux); err != nil {
return err
}
if t.OtherAccountId == 0 {
t.OtherSteamId = steamid.SteamId(0)
return nil
}
t.OtherSteamId = steamid.SteamId(uint64(t.OtherAccountId) + 76561197960265728)
return nil
}
type TradeOffersResult struct {
Sent []*TradeOffer `json:"trade_offers_sent"`
Received []*TradeOffer `json:"trade_offers_received"`
Descriptions []*Description
}
type TradeOfferResult struct {
Offer *TradeOffer
Descriptions []*Description
}
type Description struct {
AppId uint32 `json:"appid"`
ClassId uint64 `json:"classid,string"`
InstanceId uint64 `json:"instanceid,string"`
IconUrl string `json:"icon_url"`
IconUrlLarge string `json:"icon_url_large"`
Name string
MarketName string `json:"market_name"`
MarketHashName string `json:"market_hash_name"`
// Colors in hex, for example `B2B2B2`
NameColor string `json:"name_color"`
BackgroundColor string `json:"background_color"`
Type string
Tradable bool `json:"tradable"`
Commodity bool `json:"commodity"`
MarketTradableRestriction uint32 `json:"market_tradable_restriction"`
Descriptions inventory.DescriptionLines `json:"descriptions"`
Actions []*inventory.Action `json:"actions"`
}
|