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 аккаунта
- Перейти на store.steampowered.com/join
- Зарегистрировать новый аккаунт
- Использовать отдельную email (не привязанную к основному аккаунту)
- Рекомендация по имени: нейтральное, без привязки к бренду
- Подтвердить email
Снятие ограничений Limited Account
Новый аккаунт Steam — limited. Ограничения: нельзя отправлять trade offers, нельзя использовать маркет.
Решение: пополнить баланс аккаунта минимум на $5 USD (любым способом).
После пополнения ограничения снимаются автоматически.
Для работы trade бота покупать игру Rust на аккаунт бота не требуется. Инвентарь и trade offers работают без владения игрой.
Шаг 2. Установка SDA и привязка 2FA
2.1. Скачать Steam Desktop Authenticator
Репозиторий: Jessecar96/SteamDesktopAuthenticator
- Перейти в Releases
- Скачать последний релиз (
.zip) - Распаковать в удобную директорию
2.2. Привязать аккаунт
- Запустить
Steam Desktop Authenticator.exe - Нажать "Setup new account"
- Ввести логин и пароль нового бот-аккаунта
- SDA попросит привязать номер телефона к аккаунту (если ещё не привязан)
- Ввести SMS-код подтверждения
- SDA сгенерирует revocation code (начинается с
R) — записать и сохранить - Дождаться завершения привязки
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 переменные
| Поле .maFile | ENV переменная | Обязательное | Описание |
|---|---|---|---|
| — (логин аккаунта) | STEAM_USERNAME | Да | Логин, который ввели при регистрации |
| — (пароль аккаунта) | STEAM_PASSWORD | Да | Пароль аккаунта |
shared_secret | STEAM_SHARED_SECRET | Да | Генерация 2FA кодов (TOTP) |
identity_secret | STEAM_IDENTITY_SECRET | Да | Подтверждение trade offers |
device_id | STEAM_DEVICE_ID | Нет | Авто-генерируется если не задан |
account_name | STEAM_ACCOUNT_NAME | Нет | Fallback к STEAM_USERNAME |
revocation_code | STEAM_REVOCATION_CODE | Нет | Для отключения 2FA |
shared_secret— без него невозможен логин (2FA)identity_secret— без него невозможно подтверждение трейдовrevocation_code— для аварийного сброса 2FA- Сам файл
.maFile— полный бэкап всех секретов
Что делать
- Открыть
.maFileв текстовом редакторе - Скопировать значения
shared_secret,identity_secret,revocation_code,device_id - Сохранить весь
.maFileв защищённом хранилище (менеджер паролей, encrypted vault)
Шаг 4. Получение Steam API Key
Steam API Key используется для проверки публичности инвентаря пользователя (isInventoryPublic check в WithdrawReadinessService).
Получение через браузер
- Войти в бот-аккаунт Steam через браузер
- Для 2FA кода использовать SDA или сгенерировать вручную (см. Генерация 2FA кода)
- Перейти на steamcommunity.com/dev/apikey
- Ввести Domain name (любое значение, например
localhost) - Согласиться с условиями
- Скопировать сгенерированный API Key
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
- Открыть Dokploy dashboard
- Перейти в настройки Backend сервиса
- Обновить все
STEAM_*переменные на значения нового бота - Redeploy backend сервис
STEAM_ADMIN_IDS — гибкость
Поддерживается несколько admin-аккаунтов через запятую:
STEAM_ADMIN_IDS=76561198175539447,76561198000000000
Все указанные SteamID64 смогут отправлять gift-трейды боту (авто-принятие).
Шаг 6. Верификация нового бота
Чеклист после деплоя
| # | Проверка | Как |
|---|---|---|
| 1 | Бот залогинился | В логах: ✅ Steam bot logged in successfully |
| 2 | Trade routes зарегистрированы | В логах: ✅ Steam Trade routes registered |
| 3 | Инвентарь доступен | Admin API: GET /admin/manual-trades отвечает 200 |
| 4 | 2FA работает | Генерация кода не выдаёт ошибку |
| 5 | Входящий трейд | Отправить тестовый gift от admin-аккаунта → бот должен принять |
| 6 | Исходящий трейд | Тестовый вывод скина → пользователь получает trade offer |
Скопировать Trade URL нового бота
- Войти в бот-аккаунт через браузер (используя 2FA код)
- Перейти в
Инвентарь→Предложения обмена→Кто может отправлять мне предложения? - Скопировать Trade URL
- Сохранить в менеджере паролей / заметках admin'а
Trade URL бота не нужна приложению. Она нужна только admin'у для ручного пополнения инвентаря бота.
Компрометация Trade URL не опасна — бот принимает трейды только от STEAM_ADMIN_IDS и никогда не отдаёт предметы через авто-принятие.
Шаг 7. Миграция скинов (опционально)
Если на старом боте остались скины и аккаунт ещё доступен:
Старый бот → Admin аккаунт → Новый бот
- Старый бот → Admin: отправить ручной трейд из старого бота на admin-аккаунт
- Admin → Новый бот: отправить gift-трейд через Steam с admin-аккаунта на Trade URL нового бота
- Новый бот авто-примет (если admin SteamID64 в
STEAM_ADMIN_IDS)
Новые предметы на боте могут быть в trade hold 7 дней (зависит от настроек Steam Guard). В это время вывод этих предметов невозможен.
Тайминги и ограничения
| Ограничение | Срок | Описание |
|---|---|---|
| Steam Guard cooldown | 7 дней | После активации 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 declined | SteamID64 не в whitelist | Добавить в STEAM_ADMIN_IDS |
| Gift trade declined | Бот должен отдать предметы | Убрать предметы бота из trade offer (только gift) |
Quick Reference — минимальный набор действий
Для опытного admin'а — сокращённый чеклист:
- ☐ Создать Steam аккаунт + пополнить $5
- ☐ SDA → привязать 2FA → сохранить
.maFile+revocation_code - ☐ Из
.maFileскопировать:shared_secret,identity_secret - ☐ Браузер → войти в бот → steamcommunity.com/dev/apikey → скопировать API Key
- ☐ Скопировать Trade URL нового бота → сохранить
- ☐ Обновить
STEAM_*ENV переменные в Dokploy - ☐ Redeploy backend
- ☐ Проверить логи:
Steam bot logged in successfully - ☐ Тестовый gift-трейд от admin → бот принял
- ☐ Ждать 7 дней → тестовый вывод скина