mirror of
https://github.com/42wim/matterbridge
synced 2024-11-09 07:10:25 +00:00
85 lines
2.3 KiB
Go
85 lines
2.3 KiB
Go
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())
|
|
}
|