package trade import ( "github.com/Philipp15b/go-steam/economy/inventory" "github.com/Philipp15b/go-steam/trade/tradeapi" "time" ) type Slot uint func (t *Trade) action(status *tradeapi.Status, err error) error { if err != nil { return err } t.onStatus(status) return nil } // Returns the next batch of events to process. These can be queued from calls to methods // like `AddItem` or, if there are no queued events, from a new HTTP request to Steam's API (blocking!). // If the latter is the case, this method may also sleep before the request // to conform to the polling interval of the official Steam client. func (t *Trade) Poll() ([]interface{}, error) { if t.queuedEvents != nil { return t.Events(), nil } if d := time.Since(t.lastPoll); d < pollTimeout { time.Sleep(pollTimeout - d) } t.lastPoll = time.Now() err := t.action(t.api.GetStatus()) if err != nil { return nil, err } return t.Events(), nil } func (t *Trade) GetTheirInventory(contextId uint64, appId uint32) (*inventory.Inventory, error) { return inventory.GetFullInventory(func() (*inventory.PartialInventory, error) { return t.api.GetForeignInventory(contextId, appId, nil) }, func(start uint) (*inventory.PartialInventory, error) { return t.api.GetForeignInventory(contextId, appId, &start) }) } func (t *Trade) GetOwnInventory(contextId uint64, appId uint32) (*inventory.Inventory, error) { return t.api.GetOwnInventory(contextId, appId) } func (t *Trade) GetMain() (*tradeapi.Main, error) { return t.api.GetMain() } func (t *Trade) AddItem(slot Slot, item *Item) error { return t.action(t.api.AddItem(uint(slot), item.AssetId, item.ContextId, item.AppId)) } func (t *Trade) RemoveItem(slot Slot, item *Item) error { return t.action(t.api.RemoveItem(uint(slot), item.AssetId, item.ContextId, item.AppId)) } func (t *Trade) Chat(message string) error { return t.action(t.api.Chat(message)) } func (t *Trade) SetCurrency(amount uint, currency *Currency) error { return t.action(t.api.SetCurrency(amount, currency.CurrencyId, currency.ContextId, currency.AppId)) } func (t *Trade) SetReady(ready bool) error { return t.action(t.api.SetReady(ready)) } // This may only be called after a successful `SetReady(true)`. func (t *Trade) Confirm() error { return t.action(t.api.Confirm()) } func (t *Trade) Cancel() error { return t.action(t.api.Cancel()) }