ValvePython / steamctl

🤸 Take control of Steam from your terminal
https://pypi.org/project/steamctl/
MIT License
306 stars 16 forks source link

[BUG] `No access token available` for some depot #65

Open nisehime opened 1 year ago

nisehime commented 1 year ago

Description Trying to get info on some depot doesn't work. No access token available error. I already reported it to https://github.com/SteamRE/DepotDownloader/issues/349, so if you don't mind, refer to it. I think steamctl has the same reason.

Steps to Reproduce the behavior steamctl --user --password depot info -a 1030830 -d 1523211

Expected behavior Depot info should be shown

What actually happend No access token available

Logs

steamctl -l debug ``` [DEBUG] steamctl: Parsed args: {'versions_report': None, 'log_level': 'debug', 'anonymous': False, 'user': '***', 'password': None, 'command': 'depot', '_cmd_func': 'steamctl.commands.depot.gcmds:cmd_depot_info', 'subcommand': 'info', 'cell_id': None, 'os': 'any', 'file': None, 'app': 1030830, 'depot': 1523211, 'manifest': None, 'branch': 'public', 'skip_depot': None, 'skip_login': False, 'skip_licenses': False} [DEBUG] SteamClient: Reading CM servers from 'C:\\Users\\Madobe\\AppData\\Local\\steamctl\\steamctl\\client\\cm_servers.json' [DEBUG] CMServerList: Added 80 new CM addresses. [DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\Madobe\AppData\Local\steamctl\steamctl\cs_servers.json [DEBUG] CachingCDNClient: Trying to fetch content servers from Steam API [DEBUG] urllib3.connectionpool: Starting new HTTPS connection (1): api.steampowered.com:443 [DEBUG] urllib3.connectionpool: https://api.steampowered.com:443 "GET /IContentServerDirectoryService/GetServersForSteamPipe/v1/?cell_id=7&max_servers=20&format=json HTTP/1.1" 200 616 [DEBUG] steamctl.utils.storage: Opening file (w): C:\Users\Madobe\AppData\Local\steamctl\steamctl\cs_servers.json [DEBUG] CachingCDNClient: No steam licenses found on SteamClient instance [DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\Madobe\AppData\Local\steamctl\steamctl\client\lastuser [INFO] SteamClient: Attempting login with remembered credentials [DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\Madobe\AppData\Local\steamctl\steamctl\client\***.key [DEBUG] SteamClient: Attempting login [DEBUG] SteamClient: Connect initiated. [DEBUG] Connection: Attempting connection to ('162.254.192.75', 27018) [DEBUG] Connection: Connected. [DEBUG] SteamClient: Emit event: 'connected' [DEBUG] SteamClient: Incoming: | ChannelEncryptRequest)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Securing channel [DEBUG] SteamClient: Outgoing: | ChannelEncryptResponse)> [DEBUG] SteamClient: Incoming: | ChannelEncryptResult)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Channel secured [DEBUG] SteamClient: Emit event: 'channel_secured' [DEBUG] SteamClient: Outgoing: | CMsgClientLogon)> [DEBUG] SteamClient: Incoming: | CMsgMulti)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Multi: Unpacking [DEBUG] SteamClient: Multi: Decompressing payload (3691 -> 11017) [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgClientLogonResponse)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgClientFriendsList)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgClientLicenseList)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgClientCMList)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Logon completed [DEBUG] SteamClient: Heartbeat started. [DEBUG] SteamClient: Emit event: 'logged_on' [DEBUG] CachingSteamClient.friends: Emit event: 'friend_invite' [DEBUG] CachingSteamClient.friends: Emit event: 'friend_invite' [DEBUG] CachingSteamClient.friends: Emit event: 'friend_invite' [DEBUG] CachingSteamClient.friends: Emit event: 'friend_invite' [DEBUG] SteamClient: Outgoing: | CMsgClientRequestFriendData)> [DEBUG] CachingSteamClient.friends: Emit event: 'ready' [DEBUG] SteamClient: Incoming: | CMsgMulti)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Multi: Unpacking [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgMulti)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Multi: Unpacking [DEBUG] SteamClient: Multi: Decompressing payload (498 -> 686) [DEBUG] SteamClient: Incoming: | CMsgClientPersonaState)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgClientPersonaState)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgClientPersonaState)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgClientPersonaState)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgClientPersonaState)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgClientPersonaState)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgClientPersonaState)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgClientPersonaState)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Re-login result is: [INFO] steamctl.commands.depot.gcmds: Login to Steam successful [INFO] steamctl.commands.depot.gcmds: Checking licenses [DEBUG] SteamClient: Fetching product info [DEBUG] SteamClient: Outgoing: | CMsgClientPICSAccessTokenRequest)> [DEBUG] SteamClient: Incoming: | CMsgMulti)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Multi: Unpacking [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgMulti)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Multi: Unpacking [DEBUG] SteamClient: Multi: Decompressing payload (1270 -> 1436) [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Emit event: 'job_1' [DEBUG] SteamClient: Outgoing: | CMsgClientPICSProductInfoRequest)> [DEBUG] SteamClient: Incoming: | CMsgMulti)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Multi: Unpacking [DEBUG] SteamClient: Multi: Decompressing payload (15307 -> 35942) [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Emit event: 'job_2' [INFO] steamctl.commands.depot.gcmds: Checking change list [DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\Madobe\AppData\Local\steamctl\steamctl\Cache\last_change_number [DEBUG] SteamClient: Checking PICS for app changes [DEBUG] SteamClient: Outgoing: | CMsgClientPICSChangesSinceRequest)> [DEBUG] SteamClient: Incoming: | CMsgMulti)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Multi: Unpacking [DEBUG] SteamClient: Multi: Decompressing payload (540 -> 1229) [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Incoming: | CMsgMulti)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Multi: Unpacking [DEBUG] SteamClient: Multi: Decompressing payload (2821 -> 5258) [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Emit event: 'job_3' [DEBUG] steamctl.utils.storage: Opening file (w): C:\Users\Madobe\AppData\Local\steamctl\steamctl\Cache\last_change_number [DEBUG] SteamClient: Checking for outdated cached appinfo files [INFO] steamctl.commands.depot.gcmds: Getting manifests for 'public' branch [DEBUG] SteamClient: Serving appinfo from cache [DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\Madobe\AppData\Local\steamctl\steamctl\Cache\appinfo\1030830.json [DEBUG] SteamClient: Fetching product info [DEBUG] SteamClient: Outgoing: | CMsgClientPICSAccessTokenRequest)> [DEBUG] SteamClient: Incoming: | CMsgMulti)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Multi: Unpacking [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Emit event: 'job_4' [DEBUG] SteamClient: Outgoing: | CMsgClientPICSProductInfoRequest)> [DEBUG] SteamClient: Incoming: | CMsgMulti)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Multi: Unpacking [DEBUG] SteamClient: Incoming: | not parsed)> [DEBUG] SteamClient: Emit event: [DEBUG] SteamClient: Emit event: 'job_5' [ERROR] steamctl.commands.depot.gcmds: (EResult.Fail) No access token available ```

Versions Report

steamctl --versions-report (Run steamctl --versions-report and paste the output below) ```yaml steamctl: 0.9.5 Dependencies: steam: 1.4.3 appdirs: 1.4.4 argcomplete: 2.0.0 tqdm: 4.64.0 arrow: 1.2.2 pyqrcode: 1.2.1 beautifulsoup4: 4.11.1 vpk: 1.4.0 vdf: 3.4 gevent-eventemitter: 2.1 gevent: 21.12.0 greenlet: 1.1.2 pyyaml: Not Installed pycryptodomex: 3.15.0 protobuf: 3.20.1 Python runtime: executable: C:\Python39\python.exe version: 3.9.7 (tags/v3.9.7:1016ef3, Aug 30 2021, 20:19:38) [MSC v.1929 64 bit (AMD64)] platform: win32 System info: system: Windows machine: AMD64 release: 8.1 version: 6.3.9600 ```
rossengeorgiev commented 1 year ago

You need to own app to get info. Steam no longer gives to you without a license.

nisehime commented 1 year ago

Read the issue I linked on DepotDownloader please. I can access the depot with steamcmd

SlejmUr commented 1 year ago

Depot 1523211 is fail to get info from steamdb too.

nisehime commented 1 year ago

Because it's a shared depot and steamdb doesn't own master appid, but if you use appid of app you own it would work normally.

nisehime commented 1 year ago

You can also test it like this: steamctl --anonymous depot info -a 90 -d 1

It downloads with DepotDownloader, but fails with steamctl, and the reason is: (EResult.AccessDenied) Failed to acquire manifest code (app=70 depot=1 manifest=5928322771446233610)

As I said, it uses depotfromapp appid instead -a 90, like DepotDownloader did before fix.

Btw, steamctl --anonymous depot info -a 90 -d 1 -m 5928322771446233610 and steamctl --user *** depot info -a 1030830 -d 1523211 -m 4005512837758401031 works. So if -m is specified it works as expected

rossengeorgiev commented 1 year ago

Yeah that looks like a bug. Although, is using the 90 (instead of depotfromapp) as appid correct or this a bug in Steam?

nisehime commented 1 year ago

I don't think it's steam's issue. You're techically requesting manifest and decryption key for app you don't own. Also from DepotDownloader:

Shared depots can either provide manifests, or leave you relying on their parent app. It seems that with the latter, "sharedinstall" will exist (and equals 2 in the one existance I know of). Rather than relay on the unknown sharedinstall key, just look for manifests. Test cases: 111710, 346680.

AppInfo for 111710 ``` "depots": { "1004": { "config": { "oslist": "windows" }, "depotfromapp": "1007", "manifests": { "public": "5329354416203291021" }, "maxsize": "42086632", "name": "Steamworks SDK Redist (WIN32)" }, "1005": { "config": { "oslist": "macos" }, "depotfromapp": "1007", "manifests": { "public": "2135359612286175146" }, "name": "Steamworks SDK Redist (OSX32)" }, "1006": { "config": { "oslist": "linux" }, "depotfromapp": "1007", "manifests": { "public": "4444585935428744334" }, "maxsize": "66706004", "name": "Steamworks SDK Redist (LINUX32)" }, "111711": { "config": { "oslist": "linux" }, "encryptedmanifests": { "beta": { "encrypted_gid_2": "3B1D00F81FBE146692B4D66115C8F29F", "encrypted_size_2": "875956FA653D447A1FB9EEFFA6A489DB" }, "previous": { "encrypted_gid_2": "D8E407722BD27A231DB9486154871C49", "encrypted_size_2": "401A9525DCDDFFC04FBD55EA5B2A49C7" } }, "manifests": { "public": "8871863972997944411" }, "maxsize": "37750808", "name": "Nuclear Dawn LinuxDedicated Engine", "systemdefined": "1" }, "17711": { "depotfromapp": "17710", "maxsize": "4633578503", "name": "Nuclear Dawn Content", "sharedinstall": "2", "systemdefined": "1" }, "17712": { "config": { "oslist": "windows" }, "depotfromapp": "17710", "maxsize": "73369365", "name": "Nuclear Dawn Windows Engine", "sharedinstall": "2", "systemdefined": "1" }, "17718": { "config": { "oslist": "windows" }, "encryptedmanifests": { "beta": { "encrypted_gid_2": "504AB37A274E32E64A3211B9798F8E32", "encrypted_size_2": "1B544FC39988938F991DACBCD79ADFCD" }, "previous": { "encrypted_gid_2": "F8CC04D24610CA5345EC46AB64BB72FE", "encrypted_size_2": "648B11DD9EB8CCE22769588D7709E5CA" } }, "manifests": { "public": "3735901233717536875" }, "maxsize": "1", "name": "nuclear dawn DS helper", "optional": "1", "systemdefined": "1" }, ```

Pay attention that depots with sharedinstall key don't have manifests, so you have to run AppInfo for depotfromapp to get manifest IDs from there. But depots without sharedinstall provide manifest ID even if they have depotfromapp. That's also why steamctl throws No access token available in my case:

AppInfo for 1030830 ``` }, "1523211": { "config": { "oslist": "windows" }, "depotfromapp": "1523210", "encryptedmanifests": { "2kqa_a": { "encrypted_gid_2": "76264B675F9516F5D39589E0CABA07A2", "encrypted_size_2": "C5FE5DFAACC8464A5670058F09837FE6" }, "2kqa_b": { "encrypted_gid_2": "773D01CA473718BA41AC80312EE8D67D", "encrypted_size_2": "FF1EC6343960A0E426A5A16090D8F29A" }, "autoupdater": { "encrypted_gid_2": "4E3E3F1638E281108D8D37D424AA3B57", "encrypted_size_2": "44F8535B58F456BAA811D23863866A60" }, "d2ctest": { "encrypted_gid_2": "56B8043BACC5EBEE1F2E96E4FD454246", "encrypted_size_2": "AAADF7F96AF1069F8836A1331E7A01F5" }, "dev2klauncherintegration": { "encrypted_gid_2": "15AA5D724100E14CE8BB45BD3BF2D82C", "encrypted_size_2": "5870B1EBB14E4D35AAF91DACD6A1DBAC" }, "integration": { "encrypted_gid_2": "7BD9D20CE86454BAF67C52EFFD0DE219", "encrypted_size_2": "24D9E93D742F4CE62CF1C6E5ABCB1A42" }, "newtest": { "encrypted_gid_2": "B71D86B4E537AF4D220C11B90094D116", "encrypted_size_2": "B11349C29A462BBA492548316EF116F7" } }, "manifests": { "public": "4005512837758401031" }, "maxsize": "105599103", "name": "D2C Service Content" }, ```

The depot itself has a manifest ID, but steamctl still tries to run AppInfo for depotfromapp, but the parent app is private.

rossengeorgiev commented 1 year ago

I see, thanks for the clarification. Will need to update the logic