Skip to main content

Steam Bot — Disaster Recovery

Когда использовать

Этот гайд нужен когда основной бот-аккаунт заблокирован или скомпрометирован и нужно срочно поднять замену.

Обзор процесса

Создать Steam аккаунт (5 мин)
→ Пополнить $5 (снятие limited, ~10 мин)
→ Установить SDA + привязать 2FA (15 мин)
→ Извлечь секреты из .maFile (5 мин)
→ Получить Steam API Key (5 мин)
→ Обновить ENV + деплой (10 мин)
→ Верификация (5 мин)
⏳ Ожидание 7 дней (Steam Guard cooldown)
→ Миграция скинов (опционально)

Итого активной работы: ~55 минут Ожидание до полной работоспособности: 7 дней (ограничение Steam)


Шаг 1. Создание Steam аккаунта

  1. Перейти на store.steampowered.com/join
  2. Зарегистрировать новый аккаунт
    • Использовать отдельную email (не привязанную к основному аккаунту)
    • Рекомендация по имени: нейтральное, без привязки к бренду
  3. Подтвердить email

Снятие ограничений Limited Account

Новый аккаунт Steam — limited. Ограничения: нельзя отправлять trade offers, нельзя использовать маркет.

Решение: пополнить баланс аккаунта минимум на $5 USD (любым способом).

После пополнения ограничения снимаются автоматически.

Покупка Rust НЕ нужна

Для работы trade бота покупать игру Rust на аккаунт бота не требуется. Инвентарь и trade offers работают без владения игрой.


Шаг 2. Установка SDA и привязка 2FA

2.1. Скачать Steam Desktop Authenticator

Репозиторий: Jessecar96/SteamDesktopAuthenticator

  1. Перейти в Releases
  2. Скачать последний релиз (.zip)
  3. Распаковать в удобную директорию

2.2. Привязать аккаунт

  1. Запустить Steam Desktop Authenticator.exe
  2. Нажать "Setup new account"
  3. Ввести логин и пароль нового бот-аккаунта
  4. SDA попросит привязать номер телефона к аккаунту (если ещё не привязан)
  5. Ввести SMS-код подтверждения
  6. SDA сгенерирует revocation code (начинается с R) — записать и сохранить
  7. Дождаться завершения привязки
Revocation Code — критично

revocation_code — единственный способ снять 2FA аутентификатор без доступа к SDA. Если потерять и .maFile, и revocation_code — аккаунт может стать недоступен. Сохранить в менеджере паролей.

2.3. Найти файл .maFile

После успешной привязки SDA создаёт файл в:

SteamDesktopAuthenticator/maFiles/{steamid64}.maFile

Это JSON-файл со всеми секретами аккаунта.


Шаг 3. Извлечение секретов из .maFile

Структура .maFile

{
"shared_secret": "base64string==",
"serial_number": "1234567890",
"revocation_code": "R12345",
"uri": "otpauth://totp/Steam:accountname?secret=...&issuer=Steam",
"server_time": 1234567890,
"account_name": "myaccount",
"token_gid": "abcdef1234567890",
"identity_secret": "base64string==",
"secret_1": "base64string==",
"status": 1,
"device_id": "android:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"phone_number_hint": "1234",
"confirm_type": 0,
"fully_enrolled": true,
"Session": {
"SteamID": 76561198000000000,
"AccessToken": "...",
"RefreshToken": "...",
"SessionID": "..."
}
}

Маппинг .maFile → ENV переменные

Поле .maFileENV переменнаяОбязательноеОписание
— (логин аккаунта)STEAM_USERNAMEДаЛогин, который ввели при регистрации
— (пароль аккаунта)STEAM_PASSWORDДаПароль аккаунта
shared_secretSTEAM_SHARED_SECRETДаГенерация 2FA кодов (TOTP)
identity_secretSTEAM_IDENTITY_SECRETДаПодтверждение trade offers
device_idSTEAM_DEVICE_IDНетАвто-генерируется если не задан
account_nameSTEAM_ACCOUNT_NAMEНетFallback к STEAM_USERNAME
revocation_codeSTEAM_REVOCATION_CODEНетДля отключения 2FA
Что обязательно сохранить из .maFile
  1. shared_secret — без него невозможен логин (2FA)
  2. identity_secret — без него невозможно подтверждение трейдов
  3. revocation_code — для аварийного сброса 2FA
  4. Сам файл .maFile — полный бэкап всех секретов

Что делать

  1. Открыть .maFile в текстовом редакторе
  2. Скопировать значения shared_secret, identity_secret, revocation_code, device_id
  3. Сохранить весь .maFile в защищённом хранилище (менеджер паролей, encrypted vault)

Шаг 4. Получение Steam API Key

Steam API Key используется для проверки публичности инвентаря пользователя (isInventoryPublic check в WithdrawReadinessService).

Получение через браузер

  1. Войти в бот-аккаунт Steam через браузер
  2. Перейти на steamcommunity.com/dev/apikey
  3. Ввести Domain name (любое значение, например localhost)
  4. Согласиться с условиями
  5. Скопировать сгенерированный API Key
Через SDA не получить

Steam API Key генерируется только через веб-интерфейс Steam. SDA не предоставляет эту функциональность.

Генерация 2FA кода вручную

Если SDA не под рукой, но STEAM_SHARED_SECRET уже настроен в .env:

cd ~/goloot/backend && node -e "require('dotenv').config(); console.log(require('steam-totp').generateAuthCode(process.env.STEAM_SHARED_SECRET))"

Код действует ~30 секунд — вводить сразу после генерации.


Шаг 5. Настройка ENV и деплой

Полный блок переменных

# === Обязательные ===
STEAM_USERNAME=новый_логин
STEAM_PASSWORD=новый_пароль
STEAM_SHARED_SECRET=значение_из_maFile
STEAM_IDENTITY_SECRET=значение_из_maFile

# === Рекомендуемые ===
STEAM_API_KEY=ключ_из_шага_4
STEAM_ADMIN_IDS=76561198XXXXXXXXX # SteamID64 admin-аккаунтов через запятую
STEAM_AUTO_LOGIN=true

# === Опциональные ===
STEAM_DEVICE_ID=значение_из_maFile # Авто-генерируется если не задан
STEAM_ACCOUNT_NAME=значение_из_maFile # Fallback к STEAM_USERNAME
STEAM_REVOCATION_CODE=значение_из_maFile # Для аварийного сброса 2FA

Деплой в Dokploy

  1. Открыть Dokploy dashboard
  2. Перейти в настройки Backend сервиса
  3. Обновить все STEAM_* переменные на значения нового бота
  4. Redeploy backend сервис

STEAM_ADMIN_IDS — гибкость

Поддерживается несколько admin-аккаунтов через запятую:

STEAM_ADMIN_IDS=76561198175539447,76561198000000000

Все указанные SteamID64 смогут отправлять gift-трейды боту (авто-принятие).


Шаг 6. Верификация нового бота

Чеклист после деплоя

#ПроверкаКак
1Бот залогинилсяВ логах: ✅ Steam bot logged in successfully
2Trade routes зарегистрированыВ логах: ✅ Steam Trade routes registered
3Инвентарь доступенAdmin API: GET /admin/manual-trades отвечает 200
42FA работаетГенерация кода не выдаёт ошибку
5Входящий трейдОтправить тестовый gift от admin-аккаунта → бот должен принять
6Исходящий трейдТестовый вывод скина → пользователь получает trade offer

Скопировать Trade URL нового бота

  1. Войти в бот-аккаунт через браузер (используя 2FA код)
  2. Перейти в ИнвентарьПредложения обменаКто может отправлять мне предложения?
  3. Скопировать Trade URL
  4. Сохранить в менеджере паролей / заметках admin'а
Trade URL не хранится в коде

Trade URL бота не нужна приложению. Она нужна только admin'у для ручного пополнения инвентаря бота. Компрометация Trade URL не опасна — бот принимает трейды только от STEAM_ADMIN_IDS и никогда не отдаёт предметы через авто-принятие.


Шаг 7. Миграция скинов (опционально)

Если на старом боте остались скины и аккаунт ещё доступен:

Старый бот → Admin аккаунт → Новый бот
  1. Старый бот → Admin: отправить ручной трейд из старого бота на admin-аккаунт
  2. Admin → Новый бот: отправить gift-трейд через Steam с admin-аккаунта на Trade URL нового бота
  3. Новый бот авто-примет (если admin SteamID64 в STEAM_ADMIN_IDS)
Trade Hold

Новые предметы на боте могут быть в trade hold 7 дней (зависит от настроек Steam Guard). В это время вывод этих предметов невозможен.


Тайминги и ограничения

ОграничениеСрокОписание
Steam Guard cooldown7 днейПосле активации 2FA нужно ждать 7 дней для подтверждения трейдов без hold
Trade hold (новый аккаунт)15 днейЕсли Steam Guard активен менее 7 дней — все трейды с hold 15 дней
Trade hold (полученные предметы)7 днейПредметы, полученные ботом, заблокированы на 7 дней для re-trade
Limited accountдо пополненияБез $5 — нельзя отправлять trade offers
Steam API rate limitsпостоянноНе больше 1 запроса инвентаря / 3 сек (реализовано в коде)
Критичный тайминг

Минимальное время от создания аккаунта до первого успешного вывода: ~7 дней.

Это ограничение Steam, обойти его невозможно. Планировать замену бота заранее, если есть подозрения на блокировку.


Troubleshooting

Бот не логинится

СимптомПричинаРешение
InvalidPasswordНеверный логин/парольПроверить STEAM_USERNAME и STEAM_PASSWORD
SteamGuard / 2FA errorНеверный shared_secretПроверить копирование из .maFile (без лишних пробелов)
Бот логинится и сразу разлогиниваетсяСессия невалиднаПроверить device_id, попробовать без STEAM_DEVICE_ID (авто-генерация)

Трейды не подтверждаются автоматически

СимптомПричинаРешение
Trade sent но не confirmedНеверный identity_secretПроверить копирование из .maFile
NotAllowed при подтвержденииSteam Guard < 7 днейЖдать окончания cooldown

Входящие трейды отклоняются

СимптомПричинаРешение
Admin trade declinedSteamID64 не в whitelistДобавить в STEAM_ADMIN_IDS
Gift trade declinedБот должен отдать предметыУбрать предметы бота из trade offer (только gift)

Quick Reference — минимальный набор действий

Для опытного admin'а — сокращённый чеклист:

  1. ☐ Создать Steam аккаунт + пополнить $5
  2. ☐ SDA → привязать 2FA → сохранить .maFile + revocation_code
  3. ☐ Из .maFile скопировать: shared_secret, identity_secret
  4. ☐ Браузер → войти в бот → steamcommunity.com/dev/apikey → скопировать API Key
  5. ☐ Скопировать Trade URL нового бота → сохранить
  6. ☐ Обновить STEAM_* ENV переменные в Dokploy
  7. ☐ Redeploy backend
  8. ☐ Проверить логи: Steam bot logged in successfully
  9. ☐ Тестовый gift-трейд от admin → бот принял
  10. ☐ Ждать 7 дней → тестовый вывод скина