81 lines
1.6 KiB
Go
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, " ")
|
|
}
|