获取steam游戏版本号,检查是否有更新

问题描述 投票:0回答:2

我正在尝试创建一个 NPM 模块来从 appID 获取 Steam 游戏版本。

目前,我可以通过以下方式获取游戏信息 https://store.steampowered.com/api/appdetails?appids=730 (730是CSGO appID)

如何获取当前游戏版本?

这样我就可以检查是否有可用的更新。

steam steam-web-api
2个回答
1
投票

您可以使用

steamdb.info
steamcmd查询buildid。每当文件发生更改时,此值都会增加。


0
投票

我发现SteamCMD是一个笨拙的破损工具。如果您只想在游戏服务器运行时快速检查更新。因此,如果您想停止服务器并更新检查结果,只需在代码中进行检查和决定。那么 SteamCMD 就不是你的朋友了。

所以我写了一个简短的 powershell 脚本来从 SteamCMD 中获取更多有用的信息。

param(
    [Parameter(Mandatory)][string]$SteamCMD,          # Path to SteamCMD.exe, path can have spaces. Example: -SteamCMD C:\SteamCMD\steamcmd.exe
    [Parameter(Mandatory)][string]$AppID,             # Steam AppID. Example for ARK Ascended server: -AppID 2430930
    [Parameter(Mandatory)][string]$branch,            # Branch you want to check for updates. Example: -branch public
    [Parameter(Mandatory)][string]$force_install_dir, # Path of local install you want to check for updates, path cannot have spaces (SteamCMD limitation)
                                                      # Example: -force_install_dir C:\SERVERS\ArkAscended\server\
    [ValidateSet("update_available","installed_version","latest_version","app_status_json","app_info_json")]
    [Parameter(Mandatory)][string]$output="update_available"
                                                      # What output do you want.
                                                      # -output update_available (will output single line with true or false)
                                                      # -output installed_version (will output a single line with a number)
                                                      # -output latest_version (will output a single line with a number)
                                                      # -output app_status_json (will output what SteamCMD should have output when they would have developed their tooling right)
                                                      # -output app_info_json (will output what SteamCMD should have output when they would have developed their tooling right)
  )

$exec = @'
& "$SteamCMD" +@ShutdownOnFailedCommand 1 +@NoPromptForPassword 1 +force_install_dir $force_install_dir +login anonymous +app_info_update 1 +app_status $AppID +quit
'@
$App_Status_stdout=Invoke-Expression -Command $exec
$App_Status = [PSCustomObject]@{}
foreach($App_Status_line in $App_Status_stdout){
    if($App_Status_line.StartsWith('AppID')){
        $Items=$App_Status_line -split "\(",2
        $App_Status | Add-Member -MemberType NoteProperty -Name ($Items[0].Trim() -split " ",2)[0] -Value ($Items[0].Trim() -split " ",2)[1]
        $App_Status | Add-Member -MemberType NoteProperty -Name 'Name' -Value ($Items[1].Trim() -split "\)",2)[0]

    }
    if($App_Status_line.StartsWith(' - ') -or $App_Status_line.StartsWith('   ')){
        if($App_Status_line.StartsWith('   ')){
            #Add-NoteProperty -InputObject $App_Status -Property "mounted_depots.$(($App_Status_line -split ':',2)[0].Replace(' - ','').trim().replace(' ','_'))" -Value ($App_Status_line -split ':',2)[1].trim()
            $App_Status.mounted_depots | Add-Member -MemberType NoteProperty -Name ($App_Status_line -split ':',2)[0].Replace(' - ','').trim().replace(' ','_') -Value ($App_Status_line -split ':',2)[1].trim()
        }else{
            if(($App_Status_line -split ':',2)[0].Replace(' - ','').trim().replace(' ','_') -eq "mounted_depots"){
                $App_Status | Add-Member -MemberType NoteProperty -Name ($App_Status_line -split ':',2)[0].Replace(' - ','').trim().replace(' ','_') -Value (New-Object PSCustomObject) -Force:$Force.IsPresent
            }else{
                $App_Status | Add-Member -MemberType NoteProperty -Name ($App_Status_line -split ':',2)[0].Replace(' - ','').trim().replace(' ','_') -Value ($App_Status_line -split ':',2)[1].trim()
            }
        }
    }
}

$exec = @'
& "$SteamCMD" +@ShutdownOnFailedCommand 1 +@NoPromptForPassword 1 +login anonymous +app_info_update 1 +app_info_print $AppID +logoff +quit
'@
$App_Info_stdout=Invoke-Expression -Command $exec
#Remove unwanted content from the output of App_Info
$App_Info= ($App_Info_stdout | ? {$_.contains('{') -or $_.contains('}') -or $_.contains('"')}) -join "`r`n" | Out-String
$App_Info = $App_Info.SubString($App_Info.IndexOf("{"),$App_Info.LastIndexOf("}")+1-$App_Info.IndexOf("{"))
#Correct the output to be proper json and convert to object
$App_Info = ConvertFrom-Json $App_Info.Replace("`t", "").Replace('""','":"').Replace("`"`r`n{","`":`r`n{").Replace("`"`r`n`"","`",`r`n`"").Replace("}`r`n`"","},`r`n`"")


Switch($output){
    "update_available" {
        If($($App_Status.size_on_disk.Split(',',2)[1].trim().split(' ',2)[1]) -ne $($App_Info.depots.branches."$($branch)".buildid)){
            Write-Host "true"
        }else{
            Write-Host "false"
        }
    }
    "installed_version" {
        Write-Host $($App_Status.size_on_disk.Split(',',2)[1].trim().split(' ',2)[1])
    }
    "latest_version" {
        Write-Host $($App_Info.depots.branches."$($branch)".buildid)
    }
    "app_status_json" {
        Write-Host (ConvertTo-Json $App_Status -Depth 99)
    }
    "app_info_json" {
        Write-Host (ConvertTo-Json $App_Info -Depth 99)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.