You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

85 lines
2.1 KiB

import logging
import gevent
from getpass import getpass
from steam import SteamClient
logging.basicConfig(format="%(asctime)s | %(message)s", level=logging.INFO)
LOG = logging.getLogger()
LOG.info("Persistent logon recipe")
LOG.info("-"*30)
logon_details = {
"username": raw_input("Steam user: "),
"password": getpass("Password: "),
}
logged_on_once = False
client = SteamClient()
client.set_credential_location(".")
@client.on("error")
def handle_error(result):
LOG.info("Logon result: %s", repr(result))
@client.on("channel_secured")
def send_login():
if client.relogin_available:
client.relogin()
else:
client.login(**logon_details)
logon_details.pop('auth_code', None)
logon_details.pop('two_factor_code', None)
@client.on("connected")
def handle_connected():
LOG.info("Connected to %s", client.current_server_addr)
@client.on("reconnect")
def handle_reconnect(delay):
LOG.info("Reconnect in %ds...", delay)
@client.on("disconnected")
def handle_disconnect():
LOG.info("Disconnected.")
if logged_on_once:
LOG.info("Reconnecting...")
client.reconnect(maxdelay=30)
@client.on("auth_code_required")
def auth_code_prompt(is_2fa, mismatch):
if mismatch:
LOG.info("Previous code was incorrect")
if is_2fa:
code = raw_input("Enter 2FA Code: ")
logon_details['two_factor_code'] = code
else:
code = raw_input("Enter Email Code: ")
logon_details['auth_code'] = code
client.connect()
@client.on("logged_on")
def handle_after_logon():
global logged_on_once
logged_on_once = True
LOG.info("-"*30)
LOG.info("Logged on as: %s", client.user.name)
LOG.info("Community profile: %s", client.steam_id.community_url)
LOG.info("Last logon: %s", client.user.last_logon)
LOG.info("Last logoff: %s", client.user.last_logoff)
LOG.info("-"*30)
LOG.info("Press ^C to exit")
try:
client.connect()
client.run_forever()
except KeyboardInterrupt:
if client.connected:
logged_on_once = False
LOG.info("Logout")
client.logout()