Seite 1 von 1

Steam login with python

Verfasst: Freitag 19. Juni 2020, 08:22
von stattark
hi friends i am trying to make a steam hour bot. I'm running this bot on my ubuntu system like this on "screen -S idle python3 xxx.py" . What I want to do is to close the screen when I enter a game on my computer, I want the bot to close itself.. The code I use is below.

Code: Alles auswählen

import logging
from steam.client import SteamClient
from steam.enums import EResult
from steam.enums import EFriendRelationship, EPersonaState, EChatEntryType
from steam.client import user
# setup logging
logging.basicConfig(format="%(asctime)s | %(message)s", level=logging.INFO)
LOG = logging.getLogger()

client = SteamClient()
client.set_credential_location(".")  # where to store sentry files and other stuff
server_ip=client.current_server_addr
@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()

@client.on("connected")
def handle_connected():
    LOG.info("Connected to %s", client.current_server_addr)
@client.on("reconnect")
def handle_reconnect(delay):
    LOG.info("Out...")
    LOG.info("Reconnect in %ds...", delay)
    client.logout()
    raise SystemExit

@client.on("disconnected")
def handle_disconnect():
    LOG.info("Disconnected.")
    client.disconnect()


    if client.relogin_available:
        LOG.info("Reconnecting...")
        client.reconnect(maxdelay=30)


@client.on("logged_on")
def handle_after_logon():
    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")


# main bit
LOG.info("Persistent logon recipe")
LOG.info("-"*30)

try:
    result = client.cli_login("username","password")
    if result != EResult.OK:
        LOG.info("Failed to login: %s" % repr(result))
        raise SystemExit

    else:
        client.get_web_session("English")
        client.games_played([730])
        client.change_status(persona_state=EPersonaState.Online, player_name='xxx')
        client.run_forever()

except KeyboardInterrupt:
    if client.connected:
        LOG.info("Logout")
        client.logout()
library documentation i use; https://steam.readthedocs.io/en/latest/ ... l_location
When I enter the game from steam on my own computer, it catches my connection and continues to scirpt I want it to close.

Re: Steam login with python

Verfasst: Freitag 19. Juni 2020, 13:38
von __blackjack__
@stattark: Some remarks:

`EChatEntryType`, `EFriendRelationship`, and `user` are imported but never used anywhere.

`server_ip` is defined but never used anywhere.

The code after the comment ``# main bit`` should be in a function. Which conventionnaly is called `main()` so the comment becomes obsolete.

Then you don't need ``raise SystemExit`` anymore, because a simple ``return`` would end and leave the main function.

Raising that exception is a little bit weird anyway because the standard way to end the program from anywhere without letting the program flow come to a ”natural” end, is to call the `sys.exit()` function.

There is one `LOG.info()` call where the ``%`` operator is used to format a value into the log string template instead of leaving that to the logging function like you did in all other cases.

Both instances of calling `repr()` are unneccesary, that's what the "%r" place holder is for.

I'm pretty sure the code in the ``except KeyboardInterrupt:`` block should run not only when ^C is pressed but unconditionally at the end, regardless of the reason the ``try`` block was left. So it belongs into a ``finally`` block.