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.md
source 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/:

  • references/go-steam.md
    - Steam client, auth, social, trading, web sessions
  • references/go-dota2.md
    - Dota 2 client, lobbies, parties, SOCache, generated methods

External Resources