Ошибки в скрипте с использованием steam API

Вот код: main.py

import json
import logging
from steam.client import SteamClient
from steam.enums import EResult
import os
import time
import multiprocessing
import schedule

# Настройка логирования
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# Функция для запроса кода двухфакторной аутентификации
def get_2fa_code():
    return input("Введите код двухфакторной аутентификации: ")

# Функция для сохранения сессии
def save_session(client, username):
    session_file = f"{username}_session.json"
    with open(session_file, 'w') as f:
        json.dump(client.get_web_session(), f)

# Функция для загрузки сессии
def load_session(client, username):
    session_file = f"{username}_session.json"
    if os.path.exists(session_file):
        with open(session_file, 'r') as f:
            session = json.load(f)
            client.set_credential(username, session)

# Функция для запуска игры на 3 минуты и последующего прекращения
def play_game(username, password, app_id):
    client = SteamClient()

    @client.on('logged_on')
    def on_logged_on():
        logger.info(f'Вошел в аккаунт: {client.user.name}')
        save_session(client, username)
        # Запуск игры сразу после входа
        client.games_played(app_id)
        time.sleep(180)  # AFK в игре 3 минуты
        client.games_played([])  # Прекращение игры
        logger.info(f'Завершена игра с app_id: {app_id}')

    @client.on('error')
    def on_error(result):
        if result == EResult.InvalidPassword:
            logger.error(f"Неверный пароль для аккаунта: {username}")
        else:
            logger.error(f"Ошибка для аккаунта {username}: {result}")

    @client.on('auth_code_required')
    def auth_code_required(is_2fa, code_mismatch):
        if is_2fa:
            logger.info(f"Требуется код двухфакторной аутентификации для аккаунта: {username}")
            code = get_2fa_code()
            client.login(username, password, two_factor_code=code)
        else:
            logger.info(f"Требуется код Steam Guard из email для аккаунта: {username}")
            code = input("Введите код Steam Guard из email: ")
            client.login(username, password, auth_code=code)

    logger.info(f'Попытка входа в аккаунт: {username}')
    load_session(client, username)
    result = client.login(username, password)
    if result != EResult.OK:
        logger.error(f"Не удалось войти в аккаунт {username}: {result}")
    else:
        client.run_forever()

def schedule_jobs(accounts):
    processes = []
    for account in accounts:
        username = account['username']
        password = account['password']
        app_id = account.get('app_id', 570)  # По умолчанию используем app_id 570
        process = multiprocessing.Process(target=play_game, args=(username, password, app_id))
        process.start()
        processes.append(process)

    for process in processes:
        process.join()

if __name__ == '__main__':
    with open('accounts.json', 'r') as f:
        config = json.load(f)
        accounts = config['accounts']
        schedule_jobs(accounts)

accounts.json

{
    "app_id": 570,
    "accounts": [
        {
            "username": "",
            "password": "",
            "app_id": 570
        },
        {
            "username": "",
            "password": "",
            "app_id": 570
        }
    ]
}

Вот ошибка:

C:\Users\AntiRemka\Desktop\steam_farm>py main.py
Process Process-1:
Process Process-2:
Traceback (most recent call last):
  File "D:\LangProg\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "D:\LangProg\lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\AntiRemka\Desktop\steam_farm\main.py", line 34, in play_game
    client = SteamClient()
  File "D:\LangProg\lib\site-packages\steam\client\__init__.py", line 63, in __init__
    CMClient.__init__(self)
  File "D:\LangProg\lib\site-packages\steam\core\cm.py", line 91, in __init__
    self.on(EMsg.ChannelEncryptRequest, self.__handle_encrypt_request),
  File "D:\LangProg\lib\site-packages\eventemitter\emitter.py", line 81, in add_listener
    self.emit('new_listener', event, listener)
  File "D:\LangProg\lib\site-packages\steam\core\cm.py", line 99, in emit
    super(CMClient, self).emit(event, *args)
  File "D:\LangProg\lib\site-packages\eventemitter\emitter.py", line 262, in emit
    listeners = self._listeners[event]
Traceback (most recent call last):
AttributeError: 'SteamClient' object has no attribute '_listeners'
  File "D:\LangProg\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "D:\LangProg\lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\AntiRemka\Desktop\steam_farm\main.py", line 34, in play_game
    client = SteamClient()
  File "D:\LangProg\lib\site-packages\steam\client\__init__.py", line 63, in __init__
    CMClient.__init__(self)
  File "D:\LangProg\lib\site-packages\steam\core\cm.py", line 91, in __init__
    self.on(EMsg.ChannelEncryptRequest, self.__handle_encrypt_request),
  File "D:\LangProg\lib\site-packages\eventemitter\emitter.py", line 81, in add_listener
    self.emit('new_listener', event, listener)
  File "D:\LangProg\lib\site-packages\steam\core\cm.py", line 99, in emit
    super(CMClient, self).emit(event, *args)
  File "D:\LangProg\lib\site-packages\eventemitter\emitter.py", line 262, in emit
    listeners = self._listeners[event]
AttributeError: 'SteamClient' object has no attribute '_listeners'

Помогите, пожалуйста!


Ответы (1 шт):

Автор решения: CrazyElf

Вот здесь пишут, что клиента со всеми зависимостями нужно ставить так:

pip install -U "steam[client]"

Установленный вами "вручную" eventemitter несовместим с клиентом steam (то ли не та версия, то ли вообще не тот пакет).

В любом случае в таких вопросах нужно указывать, как именно вы устанавливали библиотеки и в каком окружении (операционная система и т.п.)

→ Ссылка