Claude-skill-registry go-dota2-steam
Go libraries for Steam and Dota 2 Game Coordinator development. This skill should be used when working with paralin/go-steam or paralin/go-dota2 libraries, building Steam bots, creating Dota 2 lobby managers, implementing GC communication, handling SOCache events, managing parties/lobbies, or automating Steam account operations.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/go-dota2-steam" ~/.claude/skills/majiayu000-claude-skill-registry-go-dota2-steam && rm -rf "$T"
manifest:
skills/data/go-dota2-steam/SKILL.mdsource content
go-dota2 and go-steam Development
Go libraries for Steam protocol and Dota 2 Game Coordinator integration.
When to Use
- Building Steam bots or automation tools
- Creating Dota 2 lobby management systems
- Implementing Game Coordinator (GC) communication
- Handling SOCache (Shared Object Cache) events
- Managing Dota 2 parties, lobbies, or matches
- Steam authentication and session management
- Trading system integration
Quick Start
import ( "github.com/paralin/go-steam" "github.com/paralin/go-dota2" "github.com/sirupsen/logrus" ) // 1. Create Steam client and connect client := steam.NewClient() go func() { for event := range client.Events() { // Handle events } }() client.Connect() // 2. Authenticate client.Auth.LogOn(&steam.LogOnDetails{ Username: "user", Password: "pass", }) // 3. After LoggedOnEvent, initialize Dota 2 d := dota2.New(client, logrus.New()) d.SetPlaying(true) d.SayHello() // 4. Wait for GC connection, then use APIs
Key Concepts
Event-Driven Architecture
Both libraries use channels for events. Always listen in a goroutine:
for event := range client.Events() { switch e := event.(type) { case *steam.LoggedOnEvent: // Handle login } }
SOCache for Real-Time State
Dota 2 uses SOCache for lobbies, parties, items. Subscribe to changes:
eventCh, cancel, _ := d.GetCache().SubscribeType(cso.Lobby) defer cancel() for event := range eventCh { lobby := event.Object.(*protocol.CSODOTALobby) // React to lobby changes }
Context-Based Requests
Methods returning responses require context:
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() err := d.LeaveCreateLobby(ctx, details, true)
Common Tasks
Create Dota 2 Lobby
details := &protocol.CMsgPracticeLobbySetDetails{ GameName: proto.String("My Lobby"), GameMode: proto.Uint32(uint32(protocol.DOTA_GameMode_DOTA_GAMEMODE_AP)), ServerRegion: proto.Uint32(1), } d.CreateLobby(details)
Handle Authentication
case *steam.LogOnFailedEvent: if e.Result == steam.EResult_AccountLogonDenied { // Need 2FA code } case *steam.MachineAuthUpdateEvent: // Save sentry hash for future logins
References
Detailed API documentation in references/:
- Steam client, auth, social, trading, web sessionsreferences/go-steam.md
- Dota 2 client, lobbies, parties, SOCache, generated methodsreferences/go-dota2.md
External Resources
- go-steam: https://github.com/paralin/go-steam
- go-dota2: https://github.com/paralin/go-dota2
- Protocol buffers: See
package in go-dota2protocol/