zlh-agent/internal/provision/steam/common_steam.go
2025-12-13 20:54:18 +00:00

81 lines
1.6 KiB
Go

package steam
import (
"fmt"
"os"
"os/exec"
"path/filepath"
"strings"
"zlh-agent/internal/provcommon"
"zlh-agent/internal/state"
)
func GameDir(cfg state.Config) string {
return provcommon.ServerDir(cfg)
}
func EnsureSteamCMD() error {
path := filepath.Join(provcommon.SteamCMDPath, "steamcmd.sh")
if _, err := os.Stat(path); err != nil {
return fmt.Errorf("steamcmd not found at %s", path)
}
return nil
}
func RunSteamCMD(args ...string) error {
if err := EnsureSteamCMD(); err != nil {
return err
}
steamcmd := filepath.Join(provcommon.SteamCMDPath, "steamcmd.sh")
flatArgs := []string{}
for _, a := range args {
parts := strings.Fields(a)
flatArgs = append(flatArgs, parts...)
}
cmd := exec.Command(steamcmd, flatArgs...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
func EnsureGameDir(cfg state.Config) (string, error) {
dir := GameDir(cfg)
if err := os.MkdirAll(dir, 0o755); err != nil {
return "", fmt.Errorf("mkdir game dir: %w", err)
}
return dir, nil
}
func ValidateApp(appID string) error {
if strings.TrimSpace(appID) == "" {
return fmt.Errorf("invalid Steam App ID")
}
return nil
}
func SteamLoginArgs(cfg state.Config) string {
user := strings.TrimSpace(cfg.SteamUser)
pass := strings.TrimSpace(cfg.SteamPass)
auth := strings.TrimSpace(cfg.SteamAuth)
// Default: anonymous login if nothing set
if user == "" {
return "anonymous"
}
parts := []string{user}
if pass != "" {
parts = append(parts, pass)
}
if auth != "" {
parts = append(parts, auth)
}
return strings.Join(parts, " ")
}