GithubHelp home page GithubHelp logo

valvepython / steamctl Goto Github PK

View Code? Open in Web Editor NEW
284.0 9.0 16.0 260 KB

🤸 Take control of Steam from your terminal

Home Page: https://pypi.org/project/steamctl/

License: MIT License

Makefile 0.28% Python 99.72%
steam steamctl steam-authenticator python hlmaster master-server-query-protocol steam-worshop steam-webapi webapi steamid depotdownloader hacktoberfest steamcli cli steamcmd

steamctl's Introduction

Latest version released on PyPi PyPI - Python Version MIT License
SonarCloud Rating SonarCloud Rating SonarCloud Rating

steamctl

steamctl is an open-source CLI utility similar to steamcmd. It provides access to a number of Steam features and data from the command line. While it is possible to download apps and content from Steam, steamctl is not a game launcher.

Install

pip install steamctl

Install directly from github:

pip install git+https://github.com/ValvePython/steamctl#egg=steamctl

Command list

apps                Get information about apps
|- activate_key       Activate key(s) on account
|- licenses           Manage licenses
|  |- list              List all licenses on account
|  |- add               Add free package license(s)
|  \- remove            Remove free package license(s)
|- list               List owned or all apps
|- product_info       Show product info for app
\- item_def           Get item definitions for app

assistant           Helpful automation
|- idle-games         Idle up to 32 games for game time
|- idle-cards         Automatic idling for game cards
\- discovery-queue    Explore a single discovery queue

authenticator       Manage Steam authenticators
|- add                Add authentictor to a Steam account
|- remove             Remove an authenticator
|- list               List all authenticators
|- status             Query Steam Guard status for account
|- code               Generate auth code
\- qrcode             Generate QR code

clear               Remove data stored on disk
|- cache              Remove all cache and data files
|- credentials        Remove all credentials and saved logins
\- all                Remove all cache files

cloud               Manage Steam Cloud files (e.g. save files, settings, etc)
|- list               List files for app
|- list_apps          List all apps with cloud files
\- download           Download files for app

depot               List and download from Steam depots
|- info               View info about a depot(s)
|- list               List files from depot(s)
|- download           Download depot files
|- diff               Compare files between manifest(s) and filesystem
\- decrypt_gid        Decrypt manifest gid

hlmaster            Query master server and server information
|- query              Query HL Master for servers
\- info               Query info from a goldsrc or source server

steamid             Parse SteamID representations

ugc                 Info and download of user generated content
|- info               Get details for UGC
\- download           Download UGC

webapi              Access to WebAPI
|- set-key            Set WebAPI key
|- clear-key          Remove saved key
|- list               List all available WebAPI endpoints
\- call               Call WebAPI endpoint

workshop            Search and download workshop items
|- search             Search the workshop
|- info               Get all details for a workshop item
|- download           Download a workshop item
|- subscribe          Subscribe to workshop items
|- unsubscribe        Unsubscribe to workshop items
|- favorite           Favourite workshop items
\- unfavorite         Unfavourite workshop items

Previews

steamctl authenticator (No root required, and transferable token. Steamapp, steamctl, and aegis, with the same token)

preview: steamctl authenticator

(video) steamctl depot

asciinema preview: steamctl depot

(video) steamctl workshop

asciinema preview: steamctl workshop

(video) steamctl webapi

asciinema preview: steamctl workshop

(video) steamctl hlmaster

asciinema preview: steamctl hlmaster

steamctl's People

Contributors

dmzda avatar rossengeorgiev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

steamctl's Issues

discovery-queue AttributeError

[INFO] Attempting login with remembered credentials
[INFO] Connecting to Steam...
[INFO] Generating new discovery queue...
Traceback (most recent call last):
  File "/home/xxx/.local/bin/steamctl", line 10, in <module>
    sys.exit(main())
  File "/home/xxx/.local/lib/python3.5/site-packages/steamctl/__main__.py", line 49, in main
    rcode = cmd_func(args=args)
  File "/home/xxx/.local/lib/python3.5/site-packages/steamctl/commands/assistant/discovery_queue.py", line 67, in cmd_assistant_discovery_queue
    if not data.get('queue', None):
AttributeError: 'int' object has no attribute 'get'

[BUG] steamctl not able to download older manifests

Description
A clear and concise description of what the bug is.

trying to download older manifests of games results in HTTP 401 instead of HTTP 200 due to steamctl not request manifest code for older manifests and only requests manifest codes for latest manifest id in appinfo.

Steps to Reproduce the behavior
(Include debug logs if possible and relevant)

  1. run steamctl depot download with the -m flag and try to download an older version of a game.

Expected behavior
A clear and concise description of what you expected to happen.

steamctl downloads the older manifest/version of game with no http 401 and requests the manifest code for older manifests.

What actually happend
Description of what actually happend

same as first description

Logs

steamctl -l debug (Include logs related ot the issue. Use `steamctl -l debug` to get detailed log)
[DEBUG] steamctl: Parsed args: {'versions_report': None, 'log_level': 'debug', 'anonymous': False, 'user': None, 'command': 'depot', '_cmd_func': 'steamctl.commands.depot.gcmds:cmd_depot_download', 'subcommand': 'download', 'cell_id': None, 'os': 'any', 'output': 'F:\\SteamLibrary\\steamapps\\content\\app_1186040\\depot_1186041\\', 'no_directories': False, 'no_progress': False, 'file': None, 'app': 1186040, 'depot': 1186041, 'manifest': 2103112450145035475, 'branch': 'public', 'password': None, 'skip_depot': None, 'skip_login': False, 'skip_licenses': False, 'vpk': False, 'skip_verify': False, 'name': None, 'regex': None}
[DEBUG] SteamClient: Reading CM servers from 'C:\\Users\\conno\\AppData\\Local\\steamctl\\steamctl\\client\\cm_servers.json'
[DEBUG] CMServerList: Added 80 new CM addresses.
[DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\conno\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\conno\AppData\Local\steamctl\steamctl\depot_keys.json
[INFO] steamctl.commands.depot.gcmds: Skipping login
[DEBUG] urllib3.connectionpool: Starting new HTTP connection (1): cache1-syd1.steamcontent.com:80
[DEBUG] urllib3.connectionpool: http://cache1-syd1.steamcontent.com:80 "GET /depot/1186041/manifest/2103112450145035475/5 HTTP/1.1" 401 98
[DEBUG] CachingCDNClient: Got HTTP 401
(EResult.Fail) HTTP Error 401

Versions Report

steamctl --versions-report (Run steamctl --versions-report and paste the output below)
steamctl: 0.9.3

Dependencies:
               steam: 1.3.0
             appdirs: 1.4.4
         argcomplete: 2.0.0
                tqdm: 4.62.3
               arrow: 1.2.2
            pyqrcode: 1.2.1
      beautifulsoup4: 4.10.0
                 vpk: 1.4.0
                 vdf: 3.4
 gevent-eventemitter: 2.1
              gevent: 21.12.0
            greenlet: 1.1.2
              pyyaml: Not Installed
       pycryptodomex: 3.14.1
            protobuf: 3.19.4

Python runtime:
          executable: C:\Python39\python.exe
             version: 3.9.10 (tags/v3.9.10:f2f3f53, Jan 17 2022, 15:14:21) [MSC v.1929 64 bit (AMD64)]
            platform: win32

System info:
              system: Windows
             machine: AMD64
             release: 10
             version: 10.0.19043

Notes:
depotdownloader manages to work fine downloading older manifests

depot commands fail when the app needs an access token

# steamctl depot info -a 1042420
[INFO] Attempting anonymous login
[INFO] Login to Steam successful
[INFO] Checking licenses
[INFO] Checking change list
[INFO] Getting manifests for 'public' branch
Traceback (most recent call last):
  File "/dev/steam-python/e3/bin/steamctl", line 11, in <module>
    load_entry_point('steamctl', 'console_scripts', 'steamctl')()
  File "/dev/steamctl-python/steamctl/__main__.py", line 50, in main
    rcode = cmd_func(args=args)
  File "/dev/steamctl-python/steamctl/commands/depot/gcmds.py", line 113, in cmd_depot_info
    with init_clients(args) as (s, cdn, manifests):
  File "/usr/lib/python3.6/contextlib.py", line 81, in __enter__
    return next(self.gen)
  File "/dev/steamctl-python/steamctl/commands/depot/gcmds.py", line 91, in init_clients
    for manifest in cdn.get_manifests(args.app, filter_func=branch_filter, decrypt=False):
  File "/dev/steamctl-python/steam/client/cdn.py", line 676, in get_manifests
    depots = self.get_app_depot_info(app_id)
  File "/dev/steamctl-python/steamctl/clients.py", line 181, in get_app_depot_info
    self.app_depots[app_id] = appinfo['depots']
KeyError: 'depots'

Some context: ValvePython/steam#216

Error running steamctl authenticator add

I am running Windows 10.

I installed Python 3.8 and Cygwin and steam in python and steamctl in python.

Ultimately I want to create a qrcode to add to my Aegis Autenticator. I have steamguard setup on my phone. I therefore assume that I must add another one using steamctl authenticator add?

Can you please assist? I get the following error when I run the steamctl authenticator add command:

    :\Python38\Scripts>steamctl authenticator add --force voodoo_zn
    To add an authenticator, first we need to login to Steam
    Account name: xxxxxxx
    Enter password for 'xxxxxxx':
    Enter 2FA code: PJPDM
    Login successful. Checking pre-conditions...
    Traceback (most recent call last):
      File "c:\python38\lib\runpy.py", line 193, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "c:\python38\lib\runpy.py", line 86, in _run_code
        exec(code, run_globals)
      File "C:\Python38\Scripts\steamctl.exe\__main__.py", line 7, in <module>
      File "c:\python38\lib\site-packages\steamctl\__main__.py", line 53, in main
        rcode = cmd_func(args=args)
      File "c:\python38\lib\site-packages\steamctl\commands\authenticator\cmds.py", line 121, in cmd_authenticator_add
        sa.add()
      File "c:\python38\lib\site-packages\steam\guard.py", line 180, in add
        raise SteamAuthenticatorError("Failed to add authenticator. Error: %s" % repr(EResult(resp['status'])))
    steam.guard.SteamAuthenticatorError: Failed to add authenticator. Error: <EResult.DuplicateRequest: 29>

`

Get information for specific branch

When using $ steamcmd [..] +app_info_print <appid> the output includes branch information, e.g.

{
  "740": {
    "common": {
      "name": "Counter-Strike Global Offensive - Dedicated Server",
      "type": "Tool",
      "oslist": "windows,linux",
      "gameid": "740"
    },
    [...]
    "depots": {
      [...]
      "branches": {
        "public": {
          "buildid": "6185846",
          "timeupdated": "1612401231"
        },
        "1.37.7.7": {
          "buildid": "6114110",
          "description": "1.37.7.7",
          "timeupdated": "1611875026"
        },
        "1.37.7.8": {
          "buildid": "6148700",
          "description": "1.37.7.8",
          "timeupdated": "1611874917"
        },
        [...]
      }
    }
  }
}

Is it currently possible to retrieve the buildid for a specific branch currently using steamctl?

Do not ask for 2FA code when authenticator is already setup

$ steamctl authenticator code x
works
[INFO] Attempting login with remembered credentials
[INFO] Remembered credentials have expired
[INFO] Enter credentials for: x
Password:
Enter 2FA code: 

Seems like whenever password is prompted, it does not check whether authenticator data exists.

Login fails

Trying to get list of depots for a given appid fails:

 steamctl -l debug --user <username> depot info -a 220

[DEBUG] steamctl: Parsed args: {'log_level': 'debug', 'anonymous': False, 'user': '<username>', 'command': 'depot', '_cmd_func': 'steamctl.commands.depot.gcmds:cmd_depot_info', 'subcommand': 'info', 'cell_id': None, 'os': 'any', 'file': None, 'app': 220, 'depot': None, 'manifest': None}
[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=0&max_servers=20&format=json HTTP/1.1" 200 712
[DEBUG] CachingCDNClient: No steam licenses found on SteamClient instance
[INFO] CMClient: Attempting login as: <username>
Username: <username>
Password: 
[DEBUG] CMClient: Attempting login
[DEBUG] CMClient: Connect initiated.
[DEBUG] CMServerList: Attempting bootstrap via WebAPI
[DEBUG] urllib3.connectionpool: Starting new HTTPS connection (1): api.steampowered.com:443
[DEBUG] urllib3.connectionpool: https://api.steampowered.com:443 "GET /ISteamDirectory/GetCMList/v1/?cellid=0&format=json HTTP/1.1" 200 805
[DEBUG] CMServerList: Recieved 100 servers from WebAPI
[DEBUG] CMServerList: Added 100 new CM addresses.
[DEBUG] Connection: Attempting connection to ('162.254.193.6', 27019)
[DEBUG] Connection: Connected.
[DEBUG] CMClient: Emit event: 'connected'
Traceback (most recent call last):
  File "src/gevent/greenlet.py", line 766, in gevent._greenlet.Greenlet.run
  File "/home/murla/.local/lib/python3.7/site-packages/steam/client/__init__.py", line 99, in _parse_message
    result = CMClient._parse_message(self, message)
  File "/home/murla/.local/lib/python3.7/site-packages/steam/core/cm.py", line 276, in _parse_message
    if self.count_listeners(emsg) or self.verbose_debug:
AttributeError: 'CachingSteamClient' object has no attribute 'count_listeners'
2019-09-03T20:43:02Z <Greenlet at 0x7fd6ecc254d0: <bound method SteamClient._parse_message of <CachingSteamClient(('162.254.193.6', 27019)) online>>(b'\x17\x05\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff)> failed with AttributeError

steamctl was installed with

pip install --user steamctl

Running Arch Linux, Python 3.7.4 here.

[FEATURE REQUEST] Password argument

Is your feature request related to a problem? Please describe.
Hello! I use this program as part of a server script to check for updates to a game - I put in my user password the first time and it loads it fine from then on... but after an uncertain amount of time, it "forgets" the password and requires manually inputting it in again. Is there any way I can enter the password via command line?

Describe the solution you'd like
Being able to enter the password for the account via the command line, like the -user flag.

[FEATURE REQUEST] Delete files on disk that are not in manifest

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Every time i go to use steamctl depot download command, it dosen't seem to delete any files that are not in the manifest that are already on disk unnecessarily taking up disk space.
Describe the solution you'd like
A clear and concise description of what you want to happen.
steamctl actually deleting files on disk that are not in manifest.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
manually deleting all files and redownloading the manifest i want from scratch.

Unify login management under one subcommmand

Currently every subcommand prompts for login information when needed.
With the growing number of subcommand that is annoying, especially when trying to use steamctl as part of script

  • New subcommand steamctl login, which will handle all login prompts.
  • Subcommands that require an account will either success or fail, no prompts
  • A failure will require interaction with steamctl login to get a working set of credentials
  • steamctl login will support environmental variables for ease of use in scripts

[BUG] Password is not saved correctly after some time

Description
After some time, the password is forgotten in the credentials. The password argument created via #56 seems to be ignored when this happens. May be related to the original bug that caused me to ask for the feature.

Steps to Reproduce the behavior
Use the password argument and/or save the credentials and try again after a few weeks.

What actually happend

root@fordy:~# steamctl --user RandomUsername1 --password AwesomePassword2 depot info -a 1056640 -d 1056641
[INFO] Enter credentials for: RandomUsername1

It completely ignored the password flag (but supports it), you can see so when I attempted to use one line instead of two just to be sure.

root@fordy:~# steamctl --user RandomUsername1 -password AwesomePassword2 depot info -a 1056640 -d 1056641
usage: steamctl [-h] [--version] [--versions-report] [-l {quiet,info,debug}] [--anonymous] [--user USER]
                [--password PASSWORD]
                <command> ...
steamctl: error: argument <command>: invalid choice: 'AwesomePassword2' (choose from 'apps', 'assistant', 'authenticator', 'clear', 'cloud', 'depot', 'hlmaster', 'steamid', 'ugc', 'webapi', 'workshop')

Once I entered the correct password then it worked again, using the remembered credentials every time after.

Logs

steamctl -l debug (Include logs related ot the issue. Use `steamctl -l debug` to get detailed log) ``` I was not aware of this command and will get logs next time. ```

Versions Report

steamctl --versions-report (Run steamctl --versions-report and paste the output below)
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.7.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.14.0

Python runtime:
          executable: /usr/bin/python3.8
             version: 3.8.3 (default, May 14 2020, 22:09:32) [GCC 5.4.0 20160609]
            platform: linux

System info:
              system: Linux
             machine: x86_64
             release: 4.19-ovh-xxxx-std-ipv6-64
             version: #1273469 SMP Wed Jun 3 08:31:49 UTC 2020

[BUG] In the event of a Depot not having a valid manifest GID, program errors out

Description
When a App's depot contains an invalid manifest, the program will error out.

Steps to Reproduce the behavior
Using this game for reference. [https://steamdb.info/app/236390/depots/?branch=public]

Normal calling of depot infos, not skipping broken depot

(War Thunder) D:\SteamLibrary\steamapps\common>steamctl --user %username% depot info --app 236390 --depot 236394
[INFO] Attempting login with remembered credentials
[INFO] Login to Steam successful
[INFO] Checking licenses
[INFO] Checking change list
[INFO] Getting manifests for 'public' branch
Traceback (most recent call last):
  File "D:\SteamLibrary\steamapps\common\War Thunder\Scripts\steamctl-script.py", line 33, in <module>
    sys.exit(load_entry_point('steamctl==0.9.2', 'console_scripts', 'steamctl')())
  File "D:\SteamLibrary\steamapps\common\War Thunder\lib\site-packages\steamctl\__main__.py", line 59, in main
    rcode = cmd_func(args=args)
  File "D:\SteamLibrary\steamapps\common\War Thunder\lib\site-packages\steamctl\commands\depot\gcmds.py", line 257, in cmd_depot_info
    with init_clients(args) as (_, cdn, manifests):
  File "C:\Python310\lib\contextlib.py", line 135, in __enter__
    return next(self.gen)
  File "D:\SteamLibrary\steamapps\common\War Thunder\lib\site-packages\steamctl\commands\depot\gcmds.py", line 234, in init_clients
    for manifest in cdn.get_manifests(args.app, branch=branch, password=password, filter_func=depot_filter, decrypt=False):
  File "D:\SteamLibrary\steamapps\common\War Thunder\lib\site-packages\steam\client\cdn.py", line 809, in get_manifests
    if filter_func and not filter_func(depot_id, depot_info):
  File "D:\SteamLibrary\steamapps\common\War Thunder\lib\site-packages\steamctl\commands\depot\gcmds.py", line 202, in depot_filter
    if depot_id in args.skip_depot:
TypeError: argument of type 'NoneType' is not iterable

When excluding the depot with the broken manifest it works again.

(War Thunder) D:\SteamLibrary\steamapps\common>steamctl --user %username% depot info --app 236390 --depot 236394 --skip-depot 228990
[INFO] Attempting login with remembered credentials
[INFO] Login to Steam successful
[INFO] Checking licenses
[INFO] Checking change list
[INFO] Getting manifests for 'public' branch
App ID: 236390
Depot ID: 236394
Depot Name: War Thunder Win
Manifest GID: 5061350601894242284
Created On: 2022-05-18 04:19:01 Eastern Daylight Time
Size: 695 MB
Compressed Size: 376 MB
Unique/Total chunks: 678 / 714 (5.04%)
Encrypted Filenames: False
Number of Files: 78
Config: {'oslist': 'windows'}
Branch: public
Open branches: public, release_candidate
Protected branches: _test_do_not_select

Expected behavior
Show data even with broken manifests or replace the broken manifest reply with nul,nil,0, etc

What actually happend
Program broke

Logs

steamctl -l debug (Include logs related ot the issue. Use `steamctl -l debug` to get detailed log)
(War Thunder) D:\SteamLibrary\steamapps\common>steamctl -l debug --user %username% depot info --app 236390 --depot 236394
[DEBUG] steamctl: Parsed args: {'versions_report': None, 'log_level': 'debug', 'anonymous': False, 'user': '%username%', 'command': 'depot', '_cmd_func': 'steamctl.commands.depot.gcmds:cmd_depot_info', 'subcommand': 'info', 'cell_id': None, 'os': 'any', 'file': None, 'app': 236390, 'depot': 236394, 'manifest': None, 'branch': 'public', 'password': None, 'skip_depot': None, 'skip_login': False, 'skip_licenses': False}
[DEBUG] SteamClient: Reading CM servers from 'C:\\Users\\cyberofficial\\AppData\\Local\\steamctl\\steamctl\\client\\cm_servers.json'
[DEBUG] CMServerList: Added 80 new CM addresses.
[DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\cyberofficial\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\cyberofficial\AppData\Local\steamctl\steamctl\client\lastuser
[INFO] SteamClient: Enter credentials for: %username%
Password:
[DEBUG] SteamClient: Attempting login
[DEBUG] SteamClient: Connect initiated.
[DEBUG] Connection: Attempting connection to ('155.133.230.50', 27018)
[DEBUG] Connection: Connected.
[DEBUG] SteamClient: Emit event: 'connected'
[DEBUG] SteamClient: Incoming: <Msg(<EMsg.ChannelEncryptRequest: 1303> | ChannelEncryptRequest)>
[DEBUG] SteamClient: Emit event: <EMsg.ChannelEncryptRequest: 1303>
[DEBUG] SteamClient: Securing channel
[DEBUG] SteamClient: Outgoing: <Msg(<EMsg.ChannelEncryptResponse: 1304> | ChannelEncryptResponse)>
[DEBUG] SteamClient: Incoming: <Msg(<EMsg.ChannelEncryptResult: 1305> | ChannelEncryptResult)>
[DEBUG] SteamClient: Emit event: <EMsg.ChannelEncryptResult: 1305>
[DEBUG] SteamClient: Channel secured
[DEBUG] SteamClient: Emit event: 'channel_secured'
[DEBUG] SteamClient: Outgoing: <MsgProto(<EMsg.ClientLogon: 5514> | CMsgClientLogon)>
[DEBUG] Connection: Connection error (reader).
[DEBUG] Connection: Disconnected.
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientLogOnResponse: 751> | CMsgClientLogonResponse)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientLogOnResponse: 751>
[DEBUG] SteamClient: Emit event: 'error'
[DEBUG] SteamClient: Emit event: 'disconnected'
[DEBUG] SteamClient: Emit event: 'auth_code_required'
Enter 2FA code: gq44k
[DEBUG] SteamClient: Attempting login
[DEBUG] SteamClient: Connect initiated.
[DEBUG] Connection: Attempting connection to ('155.133.248.38', 27018)
[DEBUG] Connection: Connected.
[DEBUG] SteamClient: Emit event: 'connected'
[DEBUG] SteamClient: Incoming: <Msg(<EMsg.ChannelEncryptRequest: 1303> | ChannelEncryptRequest)>
[DEBUG] SteamClient: Emit event: <EMsg.ChannelEncryptRequest: 1303>
[DEBUG] SteamClient: Securing channel
[DEBUG] SteamClient: Outgoing: <Msg(<EMsg.ChannelEncryptResponse: 1304> | ChannelEncryptResponse)>
[DEBUG] SteamClient: Incoming: <Msg(<EMsg.ChannelEncryptResult: 1305> | ChannelEncryptResult)>
[DEBUG] SteamClient: Emit event: <EMsg.ChannelEncryptResult: 1305>
[DEBUG] SteamClient: Channel secured
[DEBUG] SteamClient: Emit event: 'channel_secured'
[DEBUG] SteamClient: Outgoing: <MsgProto(<EMsg.ClientLogon: 5514> | CMsgClientLogon)>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (2452 -> 4977)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientServersAvailable: 5501> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientServersAvailable: 5501>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientServersAvailable: 5501> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientServersAvailable: 5501>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientLogOnResponse: 751> | CMsgClientLogonResponse)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientLogOnResponse: 751>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientAccountInfo: 768> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientAccountInfo: 768>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientAccountInfo: 768> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientAccountInfo: 768>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientEmailAddrInfo: 5456> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientEmailAddrInfo: 5456>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientFriendsList: 767> | CMsgClientFriendsList)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientFriendsList: 767>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPlayerNicknameList: 5587> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPlayerNicknameList: 5587>
[DEBUG] SteamClient: Logon completed
[DEBUG] SteamClient: Heartbeat started.
[DEBUG] SteamClient: Emit event: 'logged_on'
[DEBUG] SteamClient: Outgoing: <MsgProto(<EMsg.ClientRequestFriendData: 815> | CMsgClientRequestFriendData)>
[DEBUG] CachingSteamClient.friends: Emit event: 'ready'
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (18198 -> 53100)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientLicenseList: 780> | CMsgClientLicenseList)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientLicenseList: 780>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (969 -> 4326)
[DEBUG] SteamClient: Incoming: <Msg(<EMsg.ClientUpdateGuestPassesList: 798> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientUpdateGuestPassesList: 798>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientWalletInfoUpdate: 5528> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientWalletInfoUpdate: 5528>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientGameConnectTokens: 779> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientGameConnectTokens: 779>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientSessionToken: 850> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientSessionToken: 850>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientIsLimitedAccount: 5430> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientIsLimitedAccount: 5430>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientCMList: 783> | CMsgClientCMList)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientCMList: 783>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientRequestedClientStats: 5480> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientRequestedClientStats: 5480>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPlayingSessionState: 9600> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPlayingSessionState: 9600>
[DEBUG] SteamClient: Incoming: <Msg(<EMsg.ClientVACBanStatus: 782> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientVACBanStatus: 782>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (288 -> 394)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientFriendsGroupsList: 5553> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientFriendsGroupsList: 5553>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (11723 -> 22223)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientNewLoginKey: 5463> | CMsgClientNewLoginKey)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientNewLoginKey: 5463>
[DEBUG] SteamClient: Outgoing: <MsgProto(<EMsg.ClientNewLoginKeyAccepted: 5464> | CMsgClientNewLoginKeyAccepted)>
[DEBUG] SteamClient: Emit event: 'new_login_key'
[DEBUG] steamctl.utils.storage: Opening file (w): C:\Users\cyberofficial\AppData\Local\steamctl\steamctl\client\%username%.key
[DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\cyberofficial\AppData\Local\steamctl\steamctl\client\lastuser
[DEBUG] SteamClient: Login result is: <EResult.OK: 1>
[INFO] steamctl.commands.depot.gcmds: Login to Steam successful
[INFO] steamctl.commands.depot.gcmds: Checking licenses
[DEBUG] SteamClient: Fetching product info
[DEBUG] SteamClient: Outgoing: <MsgProto(<EMsg.ClientPICSAccessTokenRequest: 8905> | CMsgClientPICSAccessTokenRequest)>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientServersAvailable: 5501> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientServersAvailable: 5501>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (10757 -> 12870)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSAccessTokenResponse: 8906> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSAccessTokenResponse: 8906>
[DEBUG] SteamClient: Emit event: 'job_1'
[DEBUG] SteamClient: Outgoing: <MsgProto(<EMsg.ClientPICSProductInfoRequest: 8903> | CMsgClientPICSProductInfoRequest)>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (24352 -> 67881)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSProductInfoResponse: 8904> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSProductInfoResponse: 8904>
[DEBUG] SteamClient: Emit event: 'job_2'
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (22749 -> 67900)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSProductInfoResponse: 8904> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSProductInfoResponse: 8904>
[DEBUG] SteamClient: Emit event: 'job_2'
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (22988 -> 68077)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSProductInfoResponse: 8904> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSProductInfoResponse: 8904>
[DEBUG] SteamClient: Emit event: 'job_2'
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (5691 -> 12681)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSProductInfoResponse: 8904> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSProductInfoResponse: 8904>
[DEBUG] SteamClient: Emit event: 'job_2'
[INFO] steamctl.commands.depot.gcmds: Checking change list
[DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\cyberofficial\AppData\Local\steamctl\steamctl\Cache\last_change_number
[DEBUG] SteamClient: Checking PICS for app changes
[DEBUG] SteamClient: Outgoing: <MsgProto(<EMsg.ClientPICSChangesSinceRequest: 8901> | CMsgClientPICSChangesSinceRequest)>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (201 -> 225)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSChangesSinceResponse: 8902> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSChangesSinceResponse: 8902>
[DEBUG] SteamClient: Emit event: 'job_3'
[DEBUG] steamctl.utils.storage: Opening file (w): C:\Users\cyberofficial\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\cyberofficial\AppData\Local\steamctl\steamctl\Cache\appinfo\236390.json
Traceback (most recent call last):
  File "D:\SteamLibrary\steamapps\common\War Thunder\Scripts\steamctl-script.py", line 33, in <module>
    sys.exit(load_entry_point('steamctl==0.9.2', 'console_scripts', 'steamctl')())
  File "D:\SteamLibrary\steamapps\common\War Thunder\lib\site-packages\steamctl\__main__.py", line 59, in main
    rcode = cmd_func(args=args)
  File "D:\SteamLibrary\steamapps\common\War Thunder\lib\site-packages\steamctl\commands\depot\gcmds.py", line 257, in cmd_depot_info
    with init_clients(args) as (_, cdn, manifests):
  File "C:\Python310\lib\contextlib.py", line 135, in __enter__
    return next(self.gen)
  File "D:\SteamLibrary\steamapps\common\War Thunder\lib\site-packages\steamctl\commands\depot\gcmds.py", line 234, in init_clients
    for manifest in cdn.get_manifests(args.app, branch=branch, password=password, filter_func=depot_filter, decrypt=False):
  File "D:\SteamLibrary\steamapps\common\War Thunder\lib\site-packages\steam\client\cdn.py", line 809, in get_manifests
    if filter_func and not filter_func(depot_id, depot_info):
  File "D:\SteamLibrary\steamapps\common\War Thunder\lib\site-packages\steamctl\commands\depot\gcmds.py", line 202, in depot_filter
    if depot_id in args.skip_depot:
TypeError: argument of type 'NoneType' is not iterable

Versions Report

steamctl --versions-report (Run steamctl --versions-report and paste the output below)
steamctl: 0.9.2

Dependencies:
               steam: 1.3.0
             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.14.1
            protobuf: 3.20.1

Python runtime:
          executable: D:\SteamLibrary\steamapps\common\War Thunder\Scripts\python.exe
             version: 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)]
            platform: win32

System info:
              system: Windows
             machine: AMD64
             release: 10
             version: 10.0.22000

[BUG] Steam broke the workshop download functionality

Description
I have a website that takes workshop content for a game and runs stats on it for competitive players. After working for months without issue, downloading workshop content has stopped working. It uses python's subprocess module to call steamctl commands to download workshop content.

Steps to Reproduce the behavior
Call a workshop download command. (Tried on two different machines with two different accounts, both of which own the game.)

Expected behavior
A workshop item is downloaded.

What actually happened
(EResult.Fail) HTTP Error 401. Item failed to download.

Logs

steamctl -l debug workshop download 2807051950
[DEBUG] steamctl: Parsed args: {'versions_report': None, 'log_level': 'debug', 'anonymous': False, 'user': None, 'command': 'workshop', '_cmd_func': 'steamctl.commands.workshop.gcmds:cmd_workshop_download', 'subcommand': 'download', 'apikey': None, 'cell_id': None, 'output': '', 'no_directories': False, 'no_progress': False, 'id': 2807051950}
[DEBUG] steamctl.utils.storage: Opening file (r): /home/ubuntu/.local/share/steamctl/apikey.txt
[DEBUG] urllib3.connectionpool: Starting new HTTPS connection (1): api.steampowered.com:443
[DEBUG] urllib3.connectionpool: https://api.steampowered.com:443 "GET /IPublishedFileService/GetDetails/v1/?key=60455B2C53B5508597D6558159EDFFD1&format=json&publishedfileids%5B0%5D=2807051950 HTTP/1.1" 200 741
[INFO] steamctl.commands.workshop.gcmds: Workshop item: (2807051950) Candy and Chains
[INFO] steamctl.commands.workshop.gcmds: App: (1216230) Project Heartbeat
[DEBUG] SteamClient: Reading CM servers from '/home/ubuntu/.local/share/steamctl/client/cm_servers.json'
[DEBUG] CMServerList: Added 80 new CM addresses.
[DEBUG] steamctl.utils.storage: Opening file (r): /home/ubuntu/.local/share/steamctl/cs_servers.json
[DEBUG] CachingCDNClient: No steam licenses found on SteamClient instance
[DEBUG] steamctl.utils.storage: Opening file (r): /home/ubuntu/.local/share/steamctl/depot_keys.json
[DEBUG] urllib3.connectionpool: Starting new HTTP connection (1): cache1-iad1.steamcontent.com:80
[DEBUG] urllib3.connectionpool: http://cache1-iad1.steamcontent.com:80 "GET /depot/1216230/manifest/4401192380018554646/5 HTTP/1.1" 401 98
[DEBUG] CachingCDNClient: Got HTTP 401
[ERROR] steamctl.commands.workshop.gcmds: (EResult.Fail) HTTP Error 401

Versions Report

steamctl --versions-report
Dependencies:
               steam: 1.2.1
             appdirs: 1.4.4
         argcomplete: 1.12.3
                tqdm: 4.62.3
               arrow: 1.2.1
            pyqrcode: 1.2.1
      beautifulsoup4: 4.10.0
                 vpk: 1.3.3
                 vdf: 3.4
 gevent-eventemitter: 2.1
              gevent: 21.12.0
            greenlet: 1.1.2
              pyyaml: 5.3.1
       pycryptodomex: 3.12.0
            protobuf: 3.19.1

Python runtime:
          executable: /usr/bin/python3
             version: 3.8.10 (default, Mar 15 2022, 12:22:08) [GCC 9.4.0]
            platform: linux

System info:
              system: Linux
             machine: x86_64
             release: 5.4.0-88-generic
             version: #99-Ubuntu SMP Thu Sep 23 17:29:00 UTC 2021

[BUG] Cannot add authenticator to account

Description
When trying to add an authenticator to steamctl, it throws an error instead of being able to progress past logging in. Tried a different install of Python, tried WSL, nothing seems to work.

Steps to Reproduce the behavior
Try to add an authenticator to an account. Assuming its not just me (which is entirely possible), it should give an error saying "KeyError: 'oauth'"

Expected behavior
I expected to be able to log in and add an authenticator to both steamctl and the Steam mobile app. (Like seen here)

What actually happend
I wasn't able to get past logging in, since it just errors out.

Logs

steamctl -l debug (Include logs related ot the issue. Use `steamctl -l debug` to get detailed log)
steamctl -l debug authenticator add xader726
[DEBUG] steamctl: Parsed args: {'versions_report': None, 'log_level': 'debug', 'anonymous': False, 'user': None, 'password': None, 'command': 'authenticator', '_cmd_func': 'steamctl.commands.authenticator.cmds:cmd_authenticator_add', 'subcommand': 'add', 'force': False, 'from_secret': None, 'account': 'xader726'}
To add an authenticator, first we need to login to Steam
Account name: xader726
Enter password for 'xader726':
[DEBUG] urllib3.connectionpool: Starting new HTTPS connection (1): steamcommunity.com:443
[DEBUG] urllib3.connectionpool: https://steamcommunity.com:443 "POST /login/getrsakey/ HTTP/1.1" 200 404
[DEBUG] urllib3.connectionpool: https://steamcommunity.com:443 "POST /login/dologin/ HTTP/1.1" 200 128
Enter email code: #####
[DEBUG] urllib3.connectionpool: https://steamcommunity.com:443 "POST /login/dologin/ HTTP/1.1" 200 289
Traceback (most recent call last):
  File "c:\users\xavier\appdata\local\programs\python\python39\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "c:\users\xavier\appdata\local\programs\python\python39\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\Xavier\AppData\Local\Programs\Python\Python39\Scripts\steamctl.exe\__main__.py", line 7, in <module>
  File "c:\users\xavier\appdata\local\programs\python\python39\lib\site-packages\steamctl\__main__.py", line 59, in main
    rcode = cmd_func(args=args)
  File "c:\users\xavier\appdata\local\programs\python\python39\lib\site-packages\steamctl\commands\authenticator\cmds.py", line 108, in cmd_authenticator_add
    wa.bcli_login(sa_instance=sa, auto_twofactor=bool(args.from_secret))
  File "c:\users\xavier\appdata\local\programs\python\python39\lib\site-packages\steamctl\commands\authenticator\cmds.py", line 31, in bcli_login
    return self.login(password, captcha, email_code, twofactor_code)
  File "c:\users\xavier\appdata\local\programs\python\python39\lib\site-packages\steam\webauth.py", line 209, in login
    self._finalize_login(resp)
  File "c:\users\xavier\appdata\local\programs\python\python39\lib\site-packages\steam\webauth.py", line 322, in _finalize_login
    data = json.loads(login_response['oauth'])
KeyError: 'oauth'

Versions Report

steamctl --versions-report (Run steamctl --versions-report and paste the output below)
G:\>steamctl --versions-report
steamctl: 0.9.5

Dependencies:
               steam: 1.4.4
             appdirs: 1.4.4
         argcomplete: 3.1.1
                tqdm: 4.45.0
               arrow: 1.2.3
            pyqrcode: 1.2.1
      beautifulsoup4: 4.12.2
                 vpk: 1.4.0
                 vdf: 3.4
 gevent-eventemitter: 2.1
              gevent: 22.10.2
            greenlet: 2.0.2
              pyyaml: Not Installed
       pycryptodomex: 3.18.0
            protobuf: 3.20.3

Python runtime:
          executable: c:\users\xavier\appdata\local\programs\python\python39\python.exe
             version: 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)]
            platform: win32

System info:
              system: Windows
             machine: AMD64
             release: 10
             version: 10.0.19041

Download performance

Looks like the single threaded nature of the depot download implementation can limit the download speed. Need to look into multi-thread or multi-process solution in order to saturate fat pipes.

Some product_info need authentication

Hello,
I'm trying to understand if I can completely avoid authentication when I use the command $ steamctl apps product_info xxxxxxxxxxxxx.
My goal is to find out the timeupdated of the public branch, but some AppID works well some other with --anonymous, some others don't with this error:

$ steamctl --anonymous apps product_info 1172620 | jq -r .depots.branches.public.timeupdated

[INFO] Attempting anonymous login
[ERROR] No license available for App ID: 1172620 (EResult.AccessDenied)

Am I doing this right?
Is there any other way to find out if timeupdate has changed without authentication?

Thanks in advance.

Error after logging with: steamctl authenticator status crsov

Traceback (most recent call last):
  File "/home/crsov/.local/bin/steamctl", line 8, in <module>
    sys.exit(main())
  File "/home/crsov/.local/lib/python3.7/site-packages/steamctl/__main__.py", line 49, in main
    rcode = cmd_func(args=args)
  File "/home/crsov/.local/lib/python3.7/site-packages/steamctl/commands/authenticator/cmds.py", line 319, in cmd_authenticator_status
    status = sa.status()
AttributeError: 'NoneType' object has no attribute 'status'

Os - solus linux
shell - zsh
running with sudo - no
tab compention on? - no it is OFF
installeed via - pip
Steam guard activated - yes
when logging 2fa code is right - yes
does had an incorrect 2fa warn - no
using backup 2fa codes - yes

webapi: BrokenPipe raised when reading part of output

steamctl webapi call ..... | head -1

Traceback (most recent call last):
  File "/steamctl-python/e3/bin/steamctl", line 11, in <module>
    load_entry_point('steamctl', 'console_scripts', 'steamctl')()
  File "/steamctl-python/steamctl/__main__.py", line 44, in main
    rcode = cmd_func(args=args)
  File "/steamctl-python/steamctl/commands/webapi/cmds.py", line 144, in cmd_webapi_call
    json.dump(json.loads(resp), sys.stdout, indent=4, sort_keys=True)
  File "/usr/lib/python3.6/json/__init__.py", line 180, in dump
    fp.write(chunk)
BrokenPipeError: [Errno 32] Broken pipe
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
BrokenPipeError: [Errno 32] Broken pipe

Demo for idle-games

image
Not sure whether it is working or not.
I checked the playing time of the particular game in steam launcher didn't increase tho

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

Description
Trying to get info on some depot doesn't work. No access token available error. I already reported it to SteamRE/DepotDownloader#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: <Msg(<EMsg.ChannelEncryptRequest: 1303> | ChannelEncryptRequest)>
[DEBUG] SteamClient: Emit event: <EMsg.ChannelEncryptRequest: 1303>
[DEBUG] SteamClient: Securing channel
[DEBUG] SteamClient: Outgoing: <Msg(<EMsg.ChannelEncryptResponse: 1304> | ChannelEncryptResponse)>
[DEBUG] SteamClient: Incoming: <Msg(<EMsg.ChannelEncryptResult: 1305> | ChannelEncryptResult)>
[DEBUG] SteamClient: Emit event: <EMsg.ChannelEncryptResult: 1305>
[DEBUG] SteamClient: Channel secured
[DEBUG] SteamClient: Emit event: 'channel_secured'
[DEBUG] SteamClient: Outgoing: <MsgProto(<EMsg.ClientLogon: 5514> | CMsgClientLogon)>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (3691 -> 11017)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientServersAvailable: 5501> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientServersAvailable: 5501>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientServersAvailable: 5501> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientServersAvailable: 5501>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientLogOnResponse: 751> | CMsgClientLogonResponse)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientLogOnResponse: 751>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientAccountInfo: 768> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientAccountInfo: 768>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientAccountInfo: 768> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientAccountInfo: 768>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientEmailAddrInfo: 5456> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientEmailAddrInfo: 5456>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientFriendsList: 767> | CMsgClientFriendsList)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientFriendsList: 767>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPlayerNicknameList: 5587> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPlayerNicknameList: 5587>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientLicenseList: 780> | CMsgClientLicenseList)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientLicenseList: 780>
[DEBUG] SteamClient: Incoming: <Msg(<EMsg.ClientUpdateGuestPassesList: 798> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientUpdateGuestPassesList: 798>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientWalletInfoUpdate: 5528> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientWalletInfoUpdate: 5528>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientGameConnectTokens: 779> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientGameConnectTokens: 779>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientIsLimitedAccount: 5430> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientIsLimitedAccount: 5430>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientCMList: 783> | CMsgClientCMList)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientCMList: 783>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientRequestedClientStats: 5480> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientRequestedClientStats: 5480>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPlayingSessionState: 9600> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPlayingSessionState: 9600>
[DEBUG] SteamClient: Incoming: <Msg(<EMsg.ClientVACBanStatus: 782> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientVACBanStatus: 782>
[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: <MsgProto(<EMsg.ClientRequestFriendData: 815> | CMsgClientRequestFriendData)>
[DEBUG] CachingSteamClient.friends: Emit event: 'ready'
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientFriendsGroupsList: 5553> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientFriendsGroupsList: 5553>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (498 -> 686)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPersonaState: 766> | CMsgClientPersonaState)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPersonaState: 766>
[DEBUG] SteamClient: Re-login result is: <EResult.OK: 1>
[INFO] steamctl.commands.depot.gcmds: Login to Steam successful
[INFO] steamctl.commands.depot.gcmds: Checking licenses
[DEBUG] SteamClient: Fetching product info
[DEBUG] SteamClient: Outgoing: <MsgProto(<EMsg.ClientPICSAccessTokenRequest: 8905> | CMsgClientPICSAccessTokenRequest)>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientServersAvailable: 5501> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientServersAvailable: 5501>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (1270 -> 1436)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSAccessTokenResponse: 8906> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSAccessTokenResponse: 8906>
[DEBUG] SteamClient: Emit event: 'job_1'
[DEBUG] SteamClient: Outgoing: <MsgProto(<EMsg.ClientPICSProductInfoRequest: 8903> | CMsgClientPICSProductInfoRequest)>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (15307 -> 35942)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSProductInfoResponse: 8904> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSProductInfoResponse: 8904>
[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: <MsgProto(<EMsg.ClientPICSChangesSinceRequest: 8901> | CMsgClientPICSChangesSinceRequest)>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (540 -> 1229)
[DEBUG] SteamClient: Incoming: <Msg(<EMsg.ClientMarketingMessageUpdate2: 5510> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientMarketingMessageUpdate2: 5510>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (2821 -> 5258)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSChangesSinceResponse: 8902> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSChangesSinceResponse: 8902>
[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: <MsgProto(<EMsg.ClientPICSAccessTokenRequest: 8905> | CMsgClientPICSAccessTokenRequest)>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSAccessTokenResponse: 8906> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSAccessTokenResponse: 8906>
[DEBUG] SteamClient: Emit event: 'job_4'
[DEBUG] SteamClient: Outgoing: <MsgProto(<EMsg.ClientPICSProductInfoRequest: 8903> | CMsgClientPICSProductInfoRequest)>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSProductInfoResponse: 8904> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSProductInfoResponse: 8904>
[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)
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

Steamctl does not like to run in the background/process

I am making a script in python, and it uses subprocess.popen (which would run it in the background)

It works when i run it in the terminal, but once i make the script start on boot, steamctl would not work with subprocess.

I would love to give you debug logs, but i cannot seem to access or get the output of the python script running (as i am running it headlessly)

[BUG] Program stops with `(EResult.AccessDenied) Failed to acquire manifest code` error

Description
When requesting depot info for app with --skip-licenses argument, the program stops with a single line of (EResult.AccessDenied) Failed to acquire manifest code error for depots that specified user doesn't have rights to access, while depots that user has rights to are skipped. Even if you can't request manifest code, you still can get some data about existing depots such as their ID, latest manifest GID, etc, but steamctl won't display them because it couldn't get (unnecessary) request code. For this reason --skip-licenses + --skip-login also fails. In fact, it doesn't look like you need to request manifest codes for depot info command at all, since you're not accessing files themselves here anyway, right?

Steps to Reproduce the behavior
steamctl --anonymous depot info -a 1289310 --skip-licenses

Expected behavior
Available infos (ID, name, GID, etc) about depots are displayed.

What actually happend
Execution ends with a (EResult.AccessDenied) Failed to acquire manifest code error while skipping anything else.

[FEATURE REQUEST] do not use the same exit code for different events

Hello,

Problem: i am using steamctl in a batch program, in case of errors, so far i only/always got exit code value 1, what means i can not handle errors without parsing language/translation-specific-free-text stderr.

Solution: use different exit codes for every single error type: if the error text would change, change the exit code too. Reading the steamctl code, i saw something already implemented, but not used.

Alternative: parsing the stderr. The problem is, i would have to redirect stderr into stdout and mingle programatically-readable text (json) with only-human-readable-text (language-specific/translatable error text). Handling this needs much more from everybody implementing steamctl in their codes, instead of handling this only in 1 place: in steamctl code.

Thank you!

Running steamctl on Windows errors due to SIGPIPE not existing

Using python 3.7.3 64bit on Windows 10.

The full error:

> steamctl
Traceback (most recent call last):
  File "c:\users\mazin\appdata\local\programs\python\python37\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\users\mazin\appdata\local\programs\python\python37\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\mazin\AppData\Local\Programs\Python\Python37\Scripts\steamctl.exe\__main__.py", line 5, in <module>
  File "c:\users\mazin\appdata\local\programs\python\python37\lib\site-packages\steamctl\__main__.py", line 4, in <module>
    from signal import signal, SIGPIPE, SIG_DFL
ImportError: cannot import name 'SIGPIPE' from 'signal' (c:\users\mazin\appdata\local\programs\python\python37\lib\signal.py)

From the docs:

On Windows, signal() can only be called with SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM, or SIGBREAK. A ValueError will be raised in any other case.

so I assume those are the only signals that exist on Windows.

clear command

Add a clean command for removing cache, and config files easily.

[BUG] UnicodeEncodeError: 'charmap' codec can't encode character

Description
I want to export the list of apps to a text file using the Windows console, and there is an UnicodeEncodeError error.

Steps to Reproduce the behavior

Run:
steamctl apps list > apps_list.txt

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\Wok\.local\bin\steamctl.exe\__main__.py", line 7, in <module>
  File "C:\Users\Wok\.local\pipx\venvs\steamctl\Lib\site-packages\steamctl\__main__.py", line 59, in main
    rcode = cmd_func(args=args)
            ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Wok\.local\pipx\venvs\steamctl\Lib\site-packages\steamctl\commands\apps\gcmds.py", line 97, in cmd_apps_list
    print(app_id, app_names.get(app_id, 'Unknown App {}'.format(app_id)))
  File "C:\Users\Wok\AppData\Local\Programs\Python\Python311\Lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'charmap' codec can't encode character '\u221e' in position 11: character maps to <undefined>

Expected behavior
The software should run without any error, and the text file should contain the lists of appIDs along the app names.

What actually happend

$ head apps_list.txt
5 Dedicated Server
7 Steam Client
8 winui2
10 Counter-Strike
20 Team Fortress Classic
30 Day of Defeat
40 Deathmatch Classic
50 Half-Life: Opposing Force
60 Ricochet
70 Half-Life
$ tail apps_list.txt
208090 Unknown App 208090
208140 ENDLESS▒ Space - Definitive Edition
208157 ENDLESS▒ Space - Amplitude Badge + GAMES2GETHER Points
208286 Train Simulator: Sherman Hill Route Add-On
208540 Dungeon Defenders Lucky Community Costume Pack
208546 Dungeon Denders - Jester Hero
208570 Dishonored: Dunwall City Trials DLC
208575 Dishonored: The Knife of Dunwall
208580 STAR WARS▒ Knights of the Old Republic▒ II: The Sith Lords▒
208610

The error happens for appID=208610 which is Skullgirls ∞Endless Beta∞. I believe the culprit is the character.

Logs

steamctl -l debug
[DEBUG] steamctl: Parsed args: {'versions_report': None, 'log_level': 'debug', 'anonymous': False, 'user': None, 'password': None, 'command': 'apps', '_cmd_func': 'steamctl.commands.apps.gcmds:cmd_apps_list', 'subcommand': 'list', 'all': False}
[DEBUG] SteamClient: Reading CM servers from 'C:\\Users\\Wok\\AppData\\Local\\steamctl\\steamctl\\client\\cm_servers.json'
[DEBUG] CMServerList: Added 80 new CM addresses.
[DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\Wok\AppData\Local\steamctl\steamctl\client\lastuser
[INFO] SteamClient: Reusing previous username: XXX
[INFO] SteamClient: Hint: use 'steamctl --user <username> ...' to change
[DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\Wok\AppData\Local\steamctl\steamctl\client\lastuser
[INFO] SteamClient: Attempting login with remembered credentials
[DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\Wok\AppData\Local\steamctl\steamctl\client\XXX.key
[DEBUG] SteamClient: Attempting login
[DEBUG] SteamClient: Connect initiated.
[DEBUG] Connection: Attempting connection to ('162.254.192.75', 27017)
[DEBUG] Connection: Connected.
[DEBUG] SteamClient: Emit event: 'connected'
[DEBUG] SteamClient: Incoming: <Msg(<EMsg.ChannelEncryptRequest: 1303> | ChannelEncryptRequest)>
[DEBUG] SteamClient: Emit event: <EMsg.ChannelEncryptRequest: 1303>
[DEBUG] SteamClient: Securing channel
[DEBUG] SteamClient: Outgoing: <Msg(<EMsg.ChannelEncryptResponse: 1304> | ChannelEncryptResponse)>
[DEBUG] SteamClient: Incoming: <Msg(<EMsg.ChannelEncryptResult: 1305> | ChannelEncryptResult)>
[DEBUG] SteamClient: Emit event: <EMsg.ChannelEncryptResult: 1305>
[DEBUG] SteamClient: Channel secured
[DEBUG] SteamClient: Emit event: 'channel_secured'
[DEBUG] SteamClient: Outgoing: <MsgProto(<EMsg.ClientLogon: 5514> | CMsgClientLogon)>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (655 -> 1207)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientServersAvailable: 5501> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientServersAvailable: 5501>
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientServersAvailable: 5501> | not parsed)>
[...]
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (20905 -> 68577)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSProductInfoResponse: 8904> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSProductInfoResponse: 8904>
[DEBUG] SteamClient: Emit event: 'job_4'
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (24145 -> 72215)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSProductInfoResponse: 8904> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSProductInfoResponse: 8904>
[DEBUG] SteamClient: Emit event: 'job_4'
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.Multi: 1> | CMsgMulti)>
[DEBUG] SteamClient: Emit event: <EMsg.Multi: 1>
[DEBUG] SteamClient: Multi: Unpacking
[DEBUG] SteamClient: Multi: Decompressing payload (3153 -> 9775)
[DEBUG] SteamClient: Incoming: <MsgProto(<EMsg.ClientPICSProductInfoResponse: 8904> | not parsed)>
[DEBUG] SteamClient: Emit event: <EMsg.ClientPICSProductInfoResponse: 8904>
[DEBUG] SteamClient: Emit event: 'job_4'
[DEBUG] Connection: Disconnected.
[DEBUG] SteamClient: Emit event: 'disconnected'
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\Wok\.local\bin\steamctl.exe\__main__.py", line 7, in <module>
  File "C:\Users\Wok\.local\pipx\venvs\steamctl\Lib\site-packages\steamctl\__main__.py", line 59, in main
    rcode = cmd_func(args=args)
            ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Wok\.local\pipx\venvs\steamctl\Lib\site-packages\steamctl\commands\apps\gcmds.py", line 97, in cmd_apps_list
    print(app_id, app_names.get(app_id, 'Unknown App {}'.format(app_id)))
  File "C:\Users\Wok\AppData\Local\Programs\Python\Python311\Lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'charmap' codec can't encode character '\u221e' in position 11: character maps to <undefined>

Versions Report

steamctl --versions-report
steamctl: 0.9.5

Dependencies:
               steam: 1.4.3
             appdirs: 1.4.4
         argcomplete: 2.0.0
                tqdm: 4.64.1
               arrow: 1.2.3
            pyqrcode: 1.2.1
      beautifulsoup4: 4.11.1
                 vpk: 1.4.0
                 vdf: 3.4
 gevent-eventemitter: 2.1
              gevent: 22.10.2
            greenlet: 2.0.1
              pyyaml: Not Installed
       pycryptodomex: 3.15.0
            protobuf: 3.20.3

Python runtime:
          executable: C:\Users\Wok\.local\pipx\venvs\steamctl\Scripts\python.exe
             version: 3.11.0 (main, Oct 24 2022, 18:26:48) [MSC v.1933 64 bit (AMD64)]
            platform: win32

System info:
              system: Windows
             machine: AMD64
             release: 10
             version: 10.0.19044

Can't use the "apps lisenses" command?

Is the "apps licenses" command in the README Command list not available?

$ steamctl apps licenses
usage: steamctl apps [-h] <subcommand> ...
steamctl apps: error: argument <subcommand>: invalid choice: 'licenses' (choose from 'list', 'product_info', 'item_def')

[BUG] (EResult.Fail) Failed to login: <EResult.Fail: 2>

Happens every time i try to use any option when logged in

C:\Users\switchuwu>steamctl -l debug depot info --app 730
[DEBUG] steamctl: Parsed args: {'versions_report': None, 'log_level': 'debug', 'anonymous': False, 'user': None, 'command': 'depot', '_cmd_func': 'steamctl.commands.depot.gcmds:cmd_depot_info', 'subcommand': 'info', 'cell_id': None, 'os': 'any', 'file': None, 'app': 730, 'depot': None, 'manifest': None, 'branch': 'public', 'password': None, 'skip_depot': None, 'skip_login': False, 'skip_licenses': False}
[DEBUG] SteamClient: Reading CM servers from 'C:\Users\switchuwu\AppData\Local\steamctl\steamctl\client\cm_servers.json'
[DEBUG] CMServerList: Added 80 new CM addresses.
[DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\switchuwu\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\switchuwu\AppData\Local\steamctl\steamctl\client\lastuser
[INFO] SteamClient: Reusing previous username:
[INFO] SteamClient: Hint: use 'steamctl --user ...' to change
[DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\switchuwu\AppData\Local\steamctl\steamctl\client\lastuser
[INFO] SteamClient: Attempting login with remembered credentials
[DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\switchuwu\AppData\Local\steamctl\steamctl\client<Username>.key
[DEBUG] SteamClient: Re-login result is: <EResult.Fail: 2>
[ERROR] steamctl.commands.depot.gcmds: (EResult.Fail) Failed to login: <EResult.Fail: 2>

[BUG] Crash caused by cache directory not being created

Description

Executing steamctl --user <myaccount> apps list for the first time after installing results in a crash and stacktrace that ends with AttributeError: 'SqliteDict' object has no attribute '_db'.

The problem is that the cache directory (~/.cache/steamctl/) containing app_names.sqlite3 is not created automatically, the workaround is to create this directory manually so the sqlite connection succeeds.

Steps to Reproduce the behavior
Install steamctl for the first time and execute steamctl --user myaccount apps list.

Expected behavior
I expect to be prompted for my account details and for the traceback to not occur because ~/.cache/steamctl/app_names.sqlite3 was created successfully.

What actually happend
A crash/stacktrace occurs (see 'Logs' below).

Logs

steamctl --user myaccount -l debug apps list
[DEBUG] steamctl: Parsed args: {'versions_report': None, 'log_level': 'debug', 'anonymous': False, 'user': 'myaccount', 'command': 'apps', '_cmd_func': 'steamctl.commands.apps.gcmds:cmd_apps_list', 'subcommand': 'list', 'all': False}
Traceback (most recent call last):
  File "/home/steam/.local/bin/steamctl", line 8, in <module>
    sys.exit(main())
  File "/home/steam/.local/lib/python3.9/site-packages/steamctl/__main__.py", line 59, in main
    rcode = cmd_func(args=args)
  File "/home/steam/.local/lib/python3.9/site-packages/steamctl/commands/apps/gcmds.py", line 108, in cmd_apps_list
    app_names = get_app_names()
  File "/home/steam/.local/lib/python3.9/site-packages/steamctl/commands/apps/gcmds.py", line 41, in get_app_names
    papps = SqliteDict(UserCacheFile("app_names.sqlite3").path)
  File "/home/steam/.local/lib/python3.9/site-packages/steamctl/utils/storage.py", line 167, in __init__
    self._db = sqlite3.connect(path)
sqlite3.OperationalError: unable to open database file
Exception ignored in: <function SqliteDict.__del__ at 0x7f18cc9bf280>
Traceback (most recent call last):
  File "/home/steam/.local/lib/python3.9/site-packages/steamctl/utils/storage.py", line 209, in __del__
    self.commit()
  File "/home/steam/.local/lib/python3.9/site-packages/steamctl/utils/storage.py", line 206, in commit
    self._db.commit()
AttributeError: 'SqliteDict' object has no attribute '_db'

Versions Report

steamctl --versions-report (Run steamctl --versions-report and paste the output below)
steamctl: 0.9.0

Dependencies:
               steam: 1.2.0
             appdirs: 1.4.4
         argcomplete: 1.12.3
                tqdm: 4.62.3
               arrow: 1.2.1
            pyqrcode: 1.2.1
      beautifulsoup4: 4.10.0
                 vpk: 1.3.3
                 vdf: 3.4
 gevent-eventemitter: 2.1
              gevent: 21.12.0
            greenlet: 1.1.2
              pyyaml: 5.3.1
       pycryptodomex: 3.12.0
            protobuf: 3.19.1

Python runtime:
          executable: /usr/bin/python3
             version: 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]
            platform: linux

System info:
              system: Linux
             machine: x86_64
             release: 5.10.0-10-amd64
             version: #1 SMP Debian 5.10.84-1 (2021-12-08)

[BUG] SetAppBuildLive is producing 405 GET errors.

Description
The webapi call SetAppBuildLive is producing 405 GET errors.

Steps to Reproduce the behavior
Run steamctl webapi call ISteamApps.SetAppBuildLive appid=%APPID% buildid=%BUILDID% betakey=public key=%WEBAPIKEY%

Expected behavior
Expected the ability to move around builds.

What actually happend
Series of 405 errors stating that no POST requests were made -- only GET.

Logs

steamctl -l debug (Include logs related ot the issue. Use `steamctl -l debug` to get detailed log)
[DEBUG] steamctl: Parsed args: {'versions_report': None, 'log_level': 'debug', 'anonymous': False, 'user': None, 'command': 'webapi', '_cmd_func': 'steamctl.commands.webapi.cmds:cmd_webapi_call', 'subcommand': 'call', 'apikey': None, 'format': 'json', 'method': None, 'version': None, 'endpoint': 'ISteamApps.SetAppBuildLive', 'params': [['appid', '%APPID%'], ['buildid', '%BUILDID%'], ['betakey', '%BRANCHID%']]}
[DEBUG] steamctl.utils.storage: Opening file (r): C:\Users\<username>\AppData\Local\steamctl\steamctl\apikey.txt
[DEBUG] urllib3.connectionpool: Starting new HTTPS connection (1): api.steampowered.com:443
[DEBUG] urllib3.connectionpool: https://api.steampowered.com:443 "GET /ISteamApps/SetAppBuildLive/v1/?appid=%APPID%&buildid=%BUILDID%&betakey=%BRANCHID%&key=%WEBAPIKEY%&format=json HTTP/1.1" 405 147
[ERROR] steamctl.commands.webapi.cmds: ISteamApps.SetAppBuildLive failed: 405 Client Error: Method Not Allowed for url: https://api.steampowered.com/ISteamApps/SetAppBuildLive/v1/?appid=%APPID%&buildid=%BUILDID%&betakey=&%BRANCHID%&key=%WEBAPIKEY%&format=json

Versions Report

steamctl --versions-report (Run steamctl --versions-report and paste the output below)
steamctl: 0.9.3

Dependencies:
               steam: 1.3.0
             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:\Users\<username>\AppData\Local\Programs\Python\Python310\python.exe
             version: 3.10.6 (tags/v3.10.6:9c7b4bd, Aug  1 2022, 21:53:49) [MSC v.1932 64 bit (AMD64)]
            platform: win32

System info:
              system: Windows
             machine: AMD64
             release: 10
             version: 10.0.19044

[BUG] commands are slow for accounts with many licenses (16k)

Description
steamctl doesn't cache licenses, package info, and product info, so accounts thousands of licenses experience very slow runtime.

Steps to Reproduce the behavior

  1. Account with several thousand licenses
  2. Run any depot command

What happened
depot command takes a long time. Log show many PICS requests

Expected behavior
depot commands are quick

Versions Report

steamctl --versions-report (Run steamctl --versions-report and paste the output below)
N/A

Subscribe to Workshop Item

While I'm aware there's commands to download workshop items, I specifically want to subscribe to them so that my client auto-updates them.

The web interface is extremely clunky for this purpose. The search returns bizarre results and I would like to be able to essentially collect an array of ids (via a script) and then subscribe to them through a for loop using steamctl.

However it seems like steamctl lacks the webapi hooks to do so. I tried looking into other python packages but they had the same problem. Can you please help me?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.