forked from lug/matterbridge
		
	
		
			
				
	
	
		
			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"`
 | 
						|
}
 |