Documentation ¶
Overview ¶
This package allows you to automate actions on Valve's Steam network. It is a Go port of SteamKit.
To login, you'll have to create a new Client first. Then connect to the Steam network and wait for a ConnectedCallback. Then you may call the Login method in the Auth module with your login information. This is covered in more detail in the method's documentation. After you've received the LoggedOnEvent, you should set your persona state to online to receive friend lists etc.
client := steam.NewClient() client.Connect() for event := range client.Events() { switch e := event.(type) { case *steam.ConnectedEvent: client.Auth.LogOn(myLoginInfo) case *steam.MachineAuthUpdateEvent: ioutil.WriteFile("sentry", e.Hash, 0666) case *steam.LoggedOnEvent: client.Social.SetPersonaState(steamlang.EPersonaState_Online) case steam.FatalErrorEvent: client.Connect() // please do some real error handling here log.Print(e) case error: log.Print(e) } }
Events ¶
go-steam emits events that can be read via Client.Events(). Although the channel has the type interface{}, only types from this package ending with "Event" and errors will be emitted.
Index ¶
- Variables
- func GetPublicKey(universe EUniverse) *rsa.PublicKey
- func GetRandomCM() *netutil.PortAddr
- type Auth
- type ChatMsgEvent
- type Client
- func (c *Client) Connect() *netutil.PortAddr
- func (c *Client) ConnectTo(addr *netutil.PortAddr)
- func (c *Client) Connected() bool
- func (c *Client) Disconnect()
- func (c *Client) Emit(event interface{})
- func (c *Client) Errorf(format string, a ...interface{})
- func (c *Client) Events() <-chan interface{}
- func (c *Client) Fatalf(format string, a ...interface{})
- func (c *Client) GetNextJobId() JobId
- func (c *Client) RegisterPacketHandler(handler PacketHandler)
- func (c *Client) SessionId() int32
- func (c *Client) SteamId() SteamId
- func (c *Client) Write(msg IMsg)
- type ClientCMListEvent
- type ConnectedEvent
- type FatalErrorEvent
- type Friend
- type FriendListEvent
- type FriendStateEvent
- type FriendsList
- type GCPacketHandler
- type GameCoordinator
- type Group
- type GroupStateEvent
- type GroupsList
- type LogOnDetails
- type LoggedOnEvent
- type MachineAuthUpdateEvent
- type NotificationEvent
- type NotificationType
- type Notifications
- type PacketHandler
- type SentryHash
- type Social
- func (s *Social) AddFriend(id SteamId)
- func (s *Social) HandlePacket(packet *Packet)
- func (s *Social) RemoveFriend(id SteamId)
- func (s *Social) SendChatMessage(to SteamId, message string)
- func (s *Social) SendMessage(to SteamId, message string, entryType EChatEntryType)
- func (s *Social) SetName(name string)
- func (s *Social) SetPersonaState(state EPersonaState)
- type TradeProposedEvent
- type TradeRequestId
- type TradeResultEvent
- type TradeSessionStartEvent
- type Trading
- type Web
- type WebLoggedOnEvent
- type WebSessionIdEvent
Constants ¶
This section is empty.
Variables ¶
var CMServers = []string{
"72.165.61.174:27017",
"72.165.61.174:27018",
"72.165.61.175:27017",
"72.165.61.175:27018",
"72.165.61.176:27017",
"72.165.61.176:27018",
"72.165.61.185:27017",
"72.165.61.185:27018",
"72.165.61.187:27017",
"72.165.61.187:27018",
"72.165.61.188:27017",
"72.165.61.188:27018",
"146.66.152.12:27017",
"146.66.152.12:27018",
"146.66.152.12:27019",
"146.66.152.13:27017",
"146.66.152.13:27018",
"146.66.152.13:27019",
"146.66.152.14:27017",
"146.66.152.14:27018",
"146.66.152.14:27019",
"146.66.152.15:27017",
"146.66.152.15:27018",
"146.66.152.15:27019",
"209.197.29.196:27017",
"209.197.29.197:27017",
}
Functions ¶
func GetPublicKey ¶
func GetRandomCM ¶
Types ¶
type Auth ¶
type Auth struct {
// contains filtered or unexported fields
}
func (*Auth) HandlePacket ¶
func (a *Auth) HandlePacket(packet *Packet)
func (*Auth) LogOn ¶
func (a *Auth) LogOn(details *LogOnDetails)
Log on with the given details. You must always specify username and password. For the first login, don't set an authcode or a hash and you'll receive an error and Steam will send you an authcode. Then you have to login again, this time with the authcode. Shortly after logging in, you'll receive a MachineAuthUpdateEvent with a hash which allows you to login without using an authcode in the future.
If you don't use Steam Guard, username and password are enough.
type ChatMsgEvent ¶
type ChatMsgEvent struct { Chatroom SteamId // not set for friend messages Sender SteamId Message string Type EChatEntryType }
func (*ChatMsgEvent) IsMessage ¶
func (c *ChatMsgEvent) IsMessage() bool
Whether the type is ChatMsg
type Client ¶
type Client struct { Auth *Auth Social *Social Web *Web Notifications *Notifications Trading *Trading GC *GameCoordinator ConnectionTimeout time.Duration // contains filtered or unexported fields }
Represents a client to the Steam network. Always poll events from the channel returned by Events() or receiving messages will stop. All access, unless otherwise noted, should be threadsafe.
When a FatalErrorEvent is emitted, the connection is automatically closed. The same client can be used to reconnect. Other errors don't have any effect.
func (*Client) Connect ¶
Connects to a random server of the included list of connection managers and returns the address. If this client is already connected, it is disconnected first.
You will receive a ServerListEvent after logging in which contains a new list of servers of which you should choose one yourself and connect with ConnectTo since the included list may not always be up to date.
func (*Client) ConnectTo ¶
Connects to a specific server. If this client is already connected, it is disconnected first.
func (*Client) Disconnect ¶
func (c *Client) Disconnect()
func (*Client) Events ¶
func (c *Client) Events() <-chan interface{}
Get the event channel. By convention all events are pointers, except for errors. It is never closed.
func (*Client) GetNextJobId ¶
func (c *Client) GetNextJobId() JobId
func (*Client) RegisterPacketHandler ¶
func (c *Client) RegisterPacketHandler(handler PacketHandler)
Registers a PacketHandler that receives all incoming packets.
type ClientCMListEvent ¶
A list of connection manager addresses to connect to in the future. You should always save them and then select one of these instead of the builtin ones for the next connection.
type ConnectedEvent ¶
type ConnectedEvent struct{}
type FatalErrorEvent ¶
type FatalErrorEvent error
When this event is emitted by the Client, the connection is automatically closed. This may be caused by a network error, for example.
type Friend ¶
type Friend struct {
// contains filtered or unexported fields
}
A thread-safe friend in a friend list which contains references to its predecessor and successor. It is mutable and will be changed by Social.
func (*Friend) Relationship ¶
func (f *Friend) Relationship() EFriendRelationship
type FriendListEvent ¶
type FriendListEvent struct{}
type FriendStateEvent ¶
type FriendStateEvent struct { SteamId SteamId Relationship EFriendRelationship }
func (*FriendStateEvent) IsFriend ¶
func (f *FriendStateEvent) IsFriend() bool
func (*FriendStateEvent) IsMember ¶
func (f *FriendStateEvent) IsMember() bool
type FriendsList ¶
type FriendsList struct {
// contains filtered or unexported fields
}
func (*FriendsList) ById ¶
func (f *FriendsList) ById(id SteamId) *Friend
func (*FriendsList) First ¶
func (f *FriendsList) First() *Friend
func (*FriendsList) Last ¶
func (f *FriendsList) Last() *Friend
type GCPacketHandler ¶
type GCPacketHandler interface {
HandleGCPacket(*GCPacket)
}
type GameCoordinator ¶
type GameCoordinator struct {
// contains filtered or unexported fields
}
func (*GameCoordinator) HandlePacket ¶
func (g *GameCoordinator) HandlePacket(packet *Packet)
func (*GameCoordinator) RegisterPacketHandler ¶
func (g *GameCoordinator) RegisterPacketHandler(handler GCPacketHandler)
func (*GameCoordinator) SetGamesPlayed ¶
func (g *GameCoordinator) SetGamesPlayed(appIds ...uint64)
Sets you in the given games. Specify none to quit all games.
func (*GameCoordinator) Write ¶
func (g *GameCoordinator) Write(msg IGCMsg)
type Group ¶
type Group struct {
// contains filtered or unexported fields
}
Represents a group within a doubly-linked group list.
func (*Group) Next ¶
Returns the next element in the group list or nil if this group is the last in the list.
func (*Group) Prev ¶
Returns the previous element in the group list or nil if this group is the first in the list.
func (*Group) Relationship ¶
func (g *Group) Relationship() EClanRelationship
type GroupStateEvent ¶
type GroupStateEvent struct { SteamId SteamId Relationship EClanRelationship }
type GroupsList ¶
type GroupsList struct {
// contains filtered or unexported fields
}
func (*GroupsList) ById ¶
func (list *GroupsList) ById(id SteamId) *Group
Returns the group by a SteamId or nil if there is no such group.
func (*GroupsList) First ¶
func (list *GroupsList) First() *Group
Returns the first group in the group list or nil if the list is empty.
func (*GroupsList) Last ¶
func (list *GroupsList) Last() *Group
Returns the last group in the group list or nil if the list is empty.
type LogOnDetails ¶
type LogOnDetails struct { Username string Password string AuthCode string SentryFileHash SentryHash }
type LoggedOnEvent ¶
type LoggedOnEvent struct{}
type MachineAuthUpdateEvent ¶
type MachineAuthUpdateEvent struct {
Hash SentryHash
}
type NotificationEvent ¶
type NotificationEvent struct { Type NotificationType Count uint }
This event is emitted for every CMsgClientUserNotifications message and likewise only used for trade offers. Unlike the the above it is also emitted when the count of a type that was tracked before by this Notifications instance reaches zero.
type Notifications ¶
type Notifications struct {
// contains filtered or unexported fields
}
func (*Notifications) HandlePacket ¶
func (n *Notifications) HandlePacket(packet *Packet)
type PacketHandler ¶
type PacketHandler interface {
HandlePacket(*Packet)
}
type SentryHash ¶
type SentryHash []byte
type Social ¶
type Social struct { Friends *FriendsList Groups *GroupsList // contains filtered or unexported fields }
Provides access to social aspects of Steam.
Friend and group lists are implemented as doubly-linked lists for thread-safety. They can be iterated over like so:
for friend := client.Social.Friends.First(); friend != nil; friend = friend.Next() { log.Println(friend.SteamId()) }
func (*Social) AddFriend ¶
func (s *Social) AddFriend(id SteamId)
Adds a friend to your friends list or accepts a friend. You'll receive a FriendStateEvent for every new/changed friend.
func (*Social) HandlePacket ¶
func (s *Social) HandlePacket(packet *Packet)
func (*Social) RemoveFriend ¶
func (s *Social) RemoveFriend(id SteamId)
func (*Social) SendChatMessage ¶
Sends a chat message to the given friend. Chatrooms/Group chats are not supported yet. This just calls SendMessage with EChatEntryType_ChatMsg as the entry type.
func (*Social) SendMessage ¶
Sends a chat message to the given friend. Chatrooms/Group chats are not supported yet.
func (*Social) SetPersonaState ¶
func (s *Social) SetPersonaState(state EPersonaState)
type TradeProposedEvent ¶
type TradeProposedEvent struct { RequestId TradeRequestId Other SteamId OtherName string }
type TradeRequestId ¶
type TradeRequestId uint32
type TradeResultEvent ¶
type TradeResultEvent struct { RequestId TradeRequestId Response EEconTradeResponse Other SteamId // Number of days Steam Guard is required to have been active NumDaysSteamGuardRequired uint32 // Number of days a new device cannot trade for. NumDaysNewDeviceCooldown uint32 // Default number of days one cannot trade after a password reset. DefaultNumDaysPasswordResetProbation uint32 // See above. NumDaysPasswordResetProbation uint32 }
type TradeSessionStartEvent ¶
type TradeSessionStartEvent struct {
Other SteamId
}
type Trading ¶
type Trading struct {
// contains filtered or unexported fields
}
Provides access to the Steam client's part of Steam Trading, that is bootstrapping the trade. The trade itself is not handled by the Steam client itself, but it's a part of the Steam website.
You'll receive a TradeProposedEvent when a friend proposes a trade. You can accept it with the RespondRequest method. You can request a trade yourself with RequestTrade.
func (*Trading) CancelRequest ¶
func (t *Trading) CancelRequest(other SteamId)
This cancels a request made with RequestTrade.
func (*Trading) HandlePacket ¶
func (t *Trading) HandlePacket(packet *Packet)
func (*Trading) RequestTrade ¶
func (t *Trading) RequestTrade(other SteamId)
Requests a trade. You'll receive a TradeResultEvent if the request fails or if the friend accepted the trade.
func (*Trading) RespondRequest ¶
func (t *Trading) RespondRequest(requestId TradeRequestId, accept bool)
Responds to a TradeProposedEvent.
type Web ¶
type Web struct { // The `sessionid` cookie required to use the steam website. // This cookie may contain a characters that will need to be URL-escaped, otherwise // Steam (probably) interprets is as a string. // When used as an URL paramter this is automatically escaped by the Go HTTP package. SessionId string // The `steamLogin` cookie required to use the steam website. Already URL-escaped. // It is only available after calling LogOn(). SteamLogin string // contains filtered or unexported fields }
func (*Web) HandlePacket ¶
func (w *Web) HandlePacket(packet *Packet)
type WebLoggedOnEvent ¶
type WebLoggedOnEvent struct{}
type WebSessionIdEvent ¶
type WebSessionIdEvent struct{}
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
inventory
Includes inventory types as used in the trade package
|
Includes inventory types as used in the trade package |
This program generates the protobuf and SteamLanguage files from the SteamKit data.
|
This program generates the protobuf and SteamLanguage files from the SteamKit data. |
This package includes some basics for the Steam protocol.
|
This package includes some basics for the Steam protocol. |
steamlang
Contains code generated from SteamKit's SteamLanguage data.
|
Contains code generated from SteamKit's SteamLanguage data. |
Includes helper types for working with JSON data
|
Includes helper types for working with JSON data |
Provides access to TF2 Game Coordinator functionality.
|
Provides access to TF2 Game Coordinator functionality. |
Allows automation of Steam Trading.
|
Allows automation of Steam Trading. |
tradeapi
Wrapper around the HTTP trading API for type safety 'n' stuff.
|
Wrapper around the HTTP trading API for type safety 'n' stuff. |
Implements methods to interact with the official Trade Offer API.
|
Implements methods to interact with the official Trade Offer API. |