119 lines
4.8 KiB
Go
119 lines
4.8 KiB
Go
/*
|
|
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"`
|
|
}
|