Steam login with python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
stattark
User
Beiträge: 1
Registriert: Freitag 19. Juni 2020, 08:20

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten