Проверяет баланс
Заходит на сайт с вашим cookie, читает очки и защитный токен формы.
сессия умерла → сообщение вамSteamGiftBot сам заходит в раздачи игр на SteamGifts, выбирает те, где шанс выше, копит очки, когда они кончаются, и пишет вам в Telegram в тот момент, когда вы выиграли.
$ steamgiftbot --once --dry-run --free-games "steam, epic" You currently have balance 312 points Script running Free to keep: Shogun Showdown (Epic Games) Getting games from page 1 Would enter Portal 2 for 30P Would enter Hollow Knight for 15P Skipping Elden Ring: not enough points Would enter Celeste for 20P Getting games from page 2 Would enter Stardew Valley for 15P Dry run: nothing was actually entered. Entered 7 giveaways for 244 points. Skipped 12: already entered Skipped 5: asks for a higher contributor level Skipped 3: too many entries already $
Чтобы понять бота, нужно понять правила площадки, на которой он работает.
SteamGifts — сообщество, где владельцы аккаунтов Steam разыгрывают игры среди других участников. Кто-то купил бандл и раздаёт лишние ключи, кто-то просто дарит любимую игру. Вход в раздачу бесплатный — но не безлимитный.
Валюта сайта — очки, P. Они понемногу начисляются, пока вы пользуетесь аккаунтом, а каждая раздача стоит столько очков, сколько указано рядом с её названием: 5P, 15P, 50P. Потратили — ждите, пока накопятся снова.
Кто сам дарит игры, получает уровень вкладчика. Часть раздач открыта только с определённого уровня, часть — только для отдельных регионов.
Вручную это выглядит так: каждые полчаса открывать сайт, листать страницы, пропускать уже введённые и переполненные раздачи и следить, не выиграли ли вы что-нибудь. Бот делает то же самое, только не устаёт и не забывает.
SteamGiftBot — независимый проект сообщества. Он не связан ни со SteamGifts, ни с Valve.
Бот повторяет этот круг, пока вы его не остановите. С флагом --once делает его один раз и выходит — так удобно для планировщика.
Заходит на сайт с вашим cookie, читает очки и защитный токен формы.
сессия умерла → сообщение вамВсе, из списка желаемого, рекомендованные, DLC, новые — как выберете.
6 типов спискаУже введено, закреплено, выше вашего уровня, чужой регион, дороже лимита, больше 500 участников, нет карточек — мимо.
12 причин пропуститьОтправляет заявку и верит балансу, который вернул сайт. Заявку никогда не повторяет вслепую — очки не спишутся дважды.
пауза 3–7 с между входамиБаланс ниже минимума — спит 15 минут. Сайт просит притормозить — ждёт столько, сколько сказано в ответе.
429 → Retry-After или 60 сПроверяет страницу выигрышей и бесплатные игры. Каждую новость — один раз, в Telegram или Discord.
история в steamgiftbot-state.jsonВсё включается в config.ini, переменными окружения или флагами — без правки кода.
По замеру 126 живых раздач медиана — 554 участника. Порог 500 оставляет почти половину раздач и вдвое снижает конкуренцию.
Три раздачи из пяти требуют уровень. Бот знает ваш и не тратит на них запросы.
Спрашивает магазин Steam. Если магазин не ответил — пропускает, но не запоминает ошибку и спросит снова.
Проходит все страницы, считает, сколько бы потратил, и не тратит ни одного очка.
А ещё — когда кончилась сессия, и итог каждого запуска. Проверка: --notify-test.
Раздачи Steam, Epic, GOG и других магазинов по данным GamerPower. Одним сообщением, каждая — один раз.
Это одна программа в четырёх упаковках. Выберите вкладку — ниже только нужные шаги.
Версия 2.2 готовится к релизу. Бесплатные игры, файлы-секреты, контрольная сумма .exe и контейнер без root появятся в готовом .exe, pip и образе :latest после выхода релиза. До этого их можно попробовать из исходников, ветка fix/audit.
SteamGiftBot.exe и SteamGiftBot.exe.sha256 со страницы Releases. Python не нужен.
Число должно совпасть со строкой в файле .sha256.
certutil -hashfile SteamGiftBot.exe SHA256
Например C:\SteamGiftBot. Рядом с собой он создаст config.ini, файл состояния и логи.
Двойной клик — и бот задаст вопросы. Дальше — первый запуск.
git clone https://github.com/PalmaLuv/SteamGiftBot.git cd SteamGiftBot python -m venv .venv .venv\Scripts\python -m pip install -r requirements.txt
На Linux и macOS вместо .venv\Scripts\python — .venv/bin/python.
.venv\Scripts\python main.py
То же самое делает python -m steamgiftbot.
pip install git+https://github.com/PalmaLuv/SteamGiftBot.git
Настройки, состояние и логи живут там, откуда вы запускаете.
mkdir steamgiftbot-data cd steamgiftbot-data steamgiftbot --setup
Бот в контейнере работает не от root, а от пользователя с uid 1000.
sudo mkdir -p /srv/steamgiftbot sudo chown -R 1000:1000 /srv/steamgiftbot
Так он не виден в docker inspect, в отличие от -e.
printf '%s' 'ВАШ_PHPSESSID' | sudo tee /srv/steamgiftbot/cookie >/dev/null sudo chmod 600 /srv/steamgiftbot/cookie sudo chown 1000:1000 /srv/steamgiftbot/cookie
docker run -d --name steamgiftbot --restart unless-stopped \ -v /srv/steamgiftbot:/app/data \ -e STEAMGIFTBOT_COOKIE_FILE=/app/data/cookie \ -e STEAMGIFTBOT_GIFT_TYPE=All \ -e STEAMGIFTBOT_MIN_POINTS=0 \ -e STEAMGIFTBOT_PINNED=no \ ghcr.io/palmaluv/steamgiftbot:latest --config /app/data/config.ini
docker stop steamgiftbot останавливает бота аккуратно: он допишет итог и отправит его вам.
Войдите на steamgifts.com → F12 → Application (или Storage) → Cookies → скопируйте значение PHPSESSID. Никому его не показывайте: это вход в ваш аккаунт.
Cookie, тип раздач, брать ли закреплённые, сколько очков оставлять. Ответы сохранятся в config.ini, закрытый от других пользователей компьютера.
steamgiftbot --setup
Ни одного очка не потратится. В конце — сводка: куда бы вошёл и почему пропустил остальное.
steamgiftbot --once --dry-run
Постоянно — просто steamgiftbot. По расписанию — через Планировщик задач:
schtasks /create /tn SteamGiftBot /sc hourly /mo 12 /tr "C:\SteamGiftBot\SteamGiftBot.exe --once --no-input"
Команда зависит от способа установки: SteamGiftBot.exe, steamgiftbot или python main.py. Подсказки самого бота всегда называют ту, которой вы его запустили.
Каждую строку config.ini можно задать и переменной STEAMGIFTBOT_ИМЯ, и флагом. Секрет — файлом через STEAMGIFTBOT_ИМЯ_FILE. Позднее перекрывает раннее: файл → окружение → флаг.
| config.ini | Флаг | Пример | Что делает |
|---|---|---|---|
cookie | --cookie | — | Сессия SteamGifts. Обязательна. |
gift_type | --type | WishList | All, WishList, Recommended, Copies, DLC, New. |
min_points | --min-points | 50 | Не опускать баланс ниже этого. |
pinned | --pinned | no | Брать ли закреплённые раздачи. |
max_entries | --max-entries | 500 | Пропускать переполненные. |
contributor_level | --level | 2 | Ваш уровень вкладчика. |
max_cost | --max-cost | 60 | Потолок цены в очках. |
cards_only | --cards-only | yes | Только игры с карточками Steam. |
blacklist / whitelist | --blacklist | simulator | Слова в названии: исключить / оставить только их. |
skip_region_locked | --skip-region-locked | yes | Пропускать раздачи для чужих регионов. |
telegram_token, telegram_chat | --telegram-chat-id | — | Куда писать. Флаг покажет ваш chat id. |
discord_webhook | --discord-webhook | — | Только адрес discord.com/api/webhooks. |
free_games | --free-games | steam, epic | Сообщать о бесплатных играх. |
points_wait | --points-wait | 900 | Секунд ждать, когда кончились очки. |
Магазины регулярно отдают игры навсегда. Бот узнаёт о них из открытого списка GamerPower и присылает одним сообщением.
free_games = steam, epic, gog
Платформы: pc, steam, epic, gog, ubisoft, itchio, origin, battlenet, drm-free, ps4, ps5, xbox-one, xbox-series-xs, xbox-360, switch, android, ios, vr.
Free to keep right now (via GamerPower): Shogun Showdown (Epic Games) ($14.99, PC, Epic Games Store), until 2026-09-24 23:59:00 https://www.gamerpower.com/open/shogun-showdown-epic-games-giveaway
Забираете игру вы сами, одним кликом по ссылке. Автоматически забрать её не выйдет: магазины вроде Epic ставят капчу, и обходить её проект не будет.
Бот работает от вашего имени. Вот что стоит знать.
Аккаунт могут заблокироватьПравила SteamGifts давно запрещают скрипты автовхода, раньше за это банили массово. Бот держит паузы и не обходит защиту Cloudflare, но решение и риск — ваши.
Cookie — это ключ от аккаунтаКто его знает, тот входит как вы. Если он утёк — выйдите из аккаунта на сайте, сессия умрёт у всех.
Токен TelegramПозволяет писать от имени вашего бота. Если утёк — /revoke у @BotFather.
Файл настроек закрытБот сохраняет config.ini только для вашей учётной записи (ACL на Windows, chmod 600 на Linux) и предупреждает, если не получилось.
Контейнер без rootОбраз Docker работает от обычного пользователя и подписан cosign. Cookie можно передать файлом-секретом.
Проверяемый .exeК каждому релизу прилагается SHA256. Все GitHub Actions закреплены по хэшу коммита.
Цикл бота ничего не знает о конкретном сайте. Всё, что относится к SteamGifts, живёт в одном провайдере, и второй сайт подключается рядом.
class ExampleProvider:
name = 'Example'
def refresh(self): ... # баланс или SessionExpired
def listGiveaways(self, page): ... # [Giveaway | Unreadable]
def enter(self, giveaway): ... # EntryResult, без sleep
def fetchWins(self): ... # (wins, recognised)
def hasCards(self, appid): ... # True / False / NoneOpium Pulses — ближе всего к SteamGifts по устройству, сначала нужно проверить вход и капчу. Бесплатные игры Epic — вторая лента уведомлений. IndieGala технически прост, но его правила прямо запрещают автоматизацию. Gleam и KeyJoker требуют соцсетей и браузера — не для этого бота.
pip install -r requirements-dev.txt pytest ruff check . bash scripts/check-docker.sh
От одного скрипта до пакета с тестами, Docker и архитектурой под несколько сайтов.
Проект PalmaLuv под лицензией MPL-2.0: cookie, список раздач, вход — и так по кругу. Готовый .exe для Windows в релизах.
Образ в GitHub Container Registry, настройки из переменных окружения, режим --once для планировщика.
Код разложен по модулям пакета steamgiftbot, тесты гоняют сохранённые страницы сайта без сети. Поддержка Python 3.9 снята: зависимости требуют 3.10.
Бот больше не молчит об ошибках, закрыты найденные проблемы безопасности, ядро разделено на провайдеров, появились бесплатные игры от GamerPower. Тестов стало 338 вместо 251.
Cookie истёк, это нормально. Войдите на сайт заново, скопируйте новый PHPSESSID и выполните --setup. Чтобы это случалось реже, не нажимайте «выйти» в браузере: выход завершает сессию и для бота.
Запустите --dry-run и прочитайте сводку: каждая причина пропуска посчитана. Чаще всего виноваты завышенный contributor_level, whitelist, под который ничего не подходит, или max_entries меньше 250.
Сайт решил, что запрос пришёл не из браузера. Откройте steamgifts.com в браузере, дождитесь, пока он вас пустит, и попробуйте позже. Бот намеренно не пытается обойти эту проверку.
Скорее всего, SteamGifts поменял вёрстку. Один пример непрочитанной строки есть в логе — приложите его к issue на GitHub, и парсер поправят.
Да. Образ Docker собирается для amd64 и arm64 и весит около 47 МБ.
Нет, он только сообщает о них. Забрать игру — один клик по ссылке, и этот клик остаётся за вами.