Manage Steam sessions, Guard, Market, trade offers and more.
Project description
AIOSTEAMPY
Manage Steam sessions, Guard, Market, trade offers and more.
[!IMPORTANT] The project is heading toward
1.0.0and there can be some changes until stable release but library design as a whole with most API will stay.
Documentation
- 📖 Project documentation is available at aiosteampy.somespecial.one.
- 🧠 Generated DeepWiki.
Installation
Project published on PyPI under aiosteampy name so can be installed with:
pip install aiosteampy
poetry add aiosteampy
uv add aiosteampy
Prereleases
To install prerelease versions (alpha, beta, release candidates), consider allowing the package manager to do it:
pip install --pre aiosteampy
poetry add --allow-prereleases aiosteampy
uv add --prerelease aiosteampy
Extras
Extras can be installed with aiosteampy[<extra>] install target.
Project uses aiohttp as default HTTP transport with all its capabilities and limitations.
socks- enable socks type web proxy support for default HTTP transport.wreq- wreq-python HTTP transport implementation. Supports proxies, HTTP/2, and browser impersonification. Will be used automatically once installed.
Quick start
Package separated into main modules which can be imported from aiosteampy namespace:
session-Steam Sessionmanagement and auth tokens negotiation.guard-Steam Guard/Mobile Authenticator(2FA) functionality.client- abstract container forSteamdomains implementations (Market,Trade Offers, etc.).
Session
Simple demonstrative example of using SteamSession to log in into account
with credentials and then print access and refresh tokens:
import asyncio
import json
from aiosteampy.session import SteamSession, GuardConfirmationRequired
async def login_with_credentials():
session = SteamSession()
account_name = input("Input login: ")
password = input("Input password: ")
try:
await session.with_credentials(account_name, password)
except GuardConfirmationRequired as e:
if e.email_code:
code = input("Code from Steam has been sent to your email. Paste it here: ")
await session.submit_auth_code(code, "email")
elif e.device_code:
code = input("Input code from Mobile Device Authenticator: ")
await session.submit_auth_code(code, "device")
else:
input(
("Steam requests device or email confirmation. "
"Click on the link from email or mobile application and press enter.")
)
await session.finalize()
print("Access token: ", session.access_token.raw)
print("Refresh token: ", session.refresh_token.raw)
await session.transport.close()
asyncio.run(login_with_credentials())
Guard
Using SteamGuard to enable Steam Mobile Auhtenticator
(similar to using SDA functionality)
and dump SteamGuardAccount data into a file:
import json
import asyncio
from aiosteampy.session import SteamSession
from aiosteampy.guard import SteamGuard, SmsConfirmationRequired, EmailConfirmationRequired
async def enable_two_fa():
session = SteamSession(...) # authenticated session
guard = SteamGuard(session)
try:
guard.enable()
except SmsConfirmationRequired as e:
code = input(f"Guard activation code has been sent to your phone ({e.phone_hint}). Paste it here: ")
except EmailConfirmationRequired:
code = input("Guard activation code has been sent to your email. Paste it here: ")
await guard.finalize(code)
# Exported guard account contains secrets that cannot be retrieved once more
# therefore, data must be saved ASAP to prevent loss of access to a user's Steam account
guard_account = guard.export_account()
with open(f"./{session.account_name}.guard.json", "w") as f:
json.dump(guard_account.serialize(), f)
await session.transport.close()
asyncio.run(enable_two_fa())
Client
Using SteamClient with authenticated SteamSession to get current user inventory items:
import asyncio
from aiosteampy.session import SteamSession
from aiosteampy.client import SteamClient, AppContext, App
async def get_inventory():
session = SteamSession(...) # authenticated session
client = SteamClient(session)
cs2_default = await client.inventory.get(AppContext.CS2)
print("CS2 items: ", cs2_default.items)
cs2_trade_protected = await client.inventory.get(AppContext.CS2_PROTECTED)
print("CS2 items in hold: ", cs2_trade_protected.items)
# create new App and AppContext
BongoCatApp = App(3419430, "Bongo Cat")
BongoCatDefault = AppContext(BongoCatApp, 2)
bongo_cat = await client.inventory.get(BongoCatDefault)
print("Bongo Cat items: ", bongo_cat.items)
await session.transport.close()
asyncio.run(get_inventory())
Key features ✨
- Stateful: Manages user sessions state throughout the lifecycle.
- Declarative: There are models for
almostevery data. - Typed: High-end support with extensive typing.
- Friendly: Intuitive and straightforward API.
- Flexible: Custom HTTP transport layer can be implemented to fit user needs.
- Asynchronous: Fully async implementation using
asyncio.
What I can do with this
- Login using credentials and QR, obtain auth web cookies.
- Operate
Trade Offers: send, accept, decline, and counter. - Place and cancel buy/sell orders, purchase listings directly on
Steam Market. - Dump & Load tokens and cookies to enable
Sessionpersistence. - De/serialize
Clientstate reducing boilerplate and unnecessary work. - Accept, deny, and retrieve
Steam Mobile Deviceconfirmations. - Enable
Steam Mobile Authenticatorfor user account and save secrets. - Import secrets from famous
SDAformat (maFile). - Setup, edit information of user
Steamprofile. - Get user account wallet balance, redeem
WalletorGiftcodes. - Lost access to a user account by denying guidelines and warnings while being unvigilant.
- And more!
What I can't do
- Buy app and their package on
Steam Store. WebSocketconnection toSteamservers.- Interact with game servers (inspect
CS2items, find game match, etc.). - Social interaction like groups, clans, and chat.
- Get confused with the complexity of usage.
Contribution 💛
Feedback, suggestions, and bug reports are welcome!
Please keep project style and code quality while contributing, thanks.
Use formatter (currently Ruff)
whenever possible respecting configuration in pyproject.toml.
Remove unrelated code changes from PR and generally be concise, thanks again.
Credits
Sources of inspiration and ideas, concepts, and general knowledge:
- DoctorMcKay/node-steam-session
- DoctorMcKay/node-steamcommunity
- dyc3/steamguard-cli
- SteamRE/SteamKit
- DoctorMcKay/node-steamstore
- DoctorMcKay/node-steam-totp
- SteamTracking/Protobufs
- Gobot1234/steam.py
- steamapi.xpaw.me
- bukson/steampy
Helpful links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aiosteampy-1.0.0a3.tar.gz.
File metadata
- Download URL: aiosteampy-1.0.0a3.tar.gz
- Upload date:
- Size: 98.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5030646268d54d075200706fbe3110f29b0112a560b1cac3c7f139f9ebe82ac
|
|
| MD5 |
7e5bbfad5d30f53aec29ea891f219cc8
|
|
| BLAKE2b-256 |
729ef46c0a8d274a514beb3a5ffa80c6c1789bfdd9cd3ef0c7352cc22a360a25
|
Provenance
The following attestation bundles were made for aiosteampy-1.0.0a3.tar.gz:
Publisher:
release.yml on somespecialone/aiosteampy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aiosteampy-1.0.0a3.tar.gz -
Subject digest:
b5030646268d54d075200706fbe3110f29b0112a560b1cac3c7f139f9ebe82ac - Sigstore transparency entry: 1285683171
- Sigstore integration time:
-
Permalink:
somespecialone/aiosteampy@644f6842c97e430f99d47cab2407589f7503f248 -
Branch / Tag:
refs/tags/v1.0.0a3 - Owner: https://github.com/somespecialone
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@644f6842c97e430f99d47cab2407589f7503f248 -
Trigger Event:
push
-
Statement type:
File details
Details for the file aiosteampy-1.0.0a3-py3-none-any.whl.
File metadata
- Download URL: aiosteampy-1.0.0a3-py3-none-any.whl
- Upload date:
- Size: 122.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f334e210e52a39c8f83550f9a30b26a22137b7e76a2bb4f76452cde19bf5b9a
|
|
| MD5 |
e706ab196ae198604678e3c1d95cf1ed
|
|
| BLAKE2b-256 |
8eb06abd36f8ebedb9e4b7f737ddd1bdeb812f3fc29ffd95d5f324f00584fa94
|
Provenance
The following attestation bundles were made for aiosteampy-1.0.0a3-py3-none-any.whl:
Publisher:
release.yml on somespecialone/aiosteampy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aiosteampy-1.0.0a3-py3-none-any.whl -
Subject digest:
5f334e210e52a39c8f83550f9a30b26a22137b7e76a2bb4f76452cde19bf5b9a - Sigstore transparency entry: 1285683234
- Sigstore integration time:
-
Permalink:
somespecialone/aiosteampy@644f6842c97e430f99d47cab2407589f7503f248 -
Branch / Tag:
refs/tags/v1.0.0a3 - Owner: https://github.com/somespecialone
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@644f6842c97e430f99d47cab2407589f7503f248 -
Trigger Event:
push
-
Statement type: