Ошибки в скрипте с использованием 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
(то ли не та версия, то ли вообще не тот пакет).
В любом случае в таких вопросах нужно указывать, как именно вы устанавливали библиотеки и в каком окружении (операционная система и т.п.)