Открытый код · MPL-2.0Python 3.10+Windows · Linux · Docker

Тратит ваши P на раздачи, пока вы спите

SteamGiftBot сам заходит в раздачи игр на SteamGifts, выбирает те, где шанс выше, копит очки, когда они кончаются, и пишет вам в Telegram в тот момент, когда вы выиграли.

500участников — порог, после которого раздача пропускается
15 минпауза, пока копятся очки
338автотестов
steamgiftbot — пробный проход
$ 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

Сайт, где игры дарят незнакомцам

Чтобы понять бота, нужно понять правила площадки, на которой он работает.

SteamGifts — сообщество, где владельцы аккаунтов Steam разыгрывают игры среди других участников. Кто-то купил бандл и раздаёт лишние ключи, кто-то просто дарит любимую игру. Вход в раздачу бесплатный — но не безлимитный.

Валюта сайта — очки, P. Они понемногу начисляются, пока вы пользуетесь аккаунтом, а каждая раздача стоит столько очков, сколько указано рядом с её названием: 5P, 15P, 50P. Потратили — ждите, пока накопятся снова.

Кто сам дарит игры, получает уровень вкладчика. Часть раздач открыта только с определённого уровня, часть — только для отдельных регионов.

Много раздач, мало очков и постоянное ожидание. Выигрывает тот, кто тратит очки вовремя и туда, где меньше соперников.— вот что автоматизирует бот

Вручную это выглядит так: каждые полчаса открывать сайт, листать страницы, пропускать уже введённые и переполненные раздачи и следить, не выиграли ли вы что-нибудь. Бот делает то же самое, только не устаёт и не забывает.

SteamGiftBot — независимый проект сообщества. Он не связан ни со SteamGifts, ни с Valve.

Как работает

Один цикл — шесть билетов

Бот повторяет этот круг, пока вы его не остановите. С флагом --once делает его один раз и выходит — так удобно для планировщика.

билет 1
312P

Проверяет баланс

Заходит на сайт с вашим cookie, читает очки и защитный токен формы.

сессия умерла → сообщение вам
билет 2
стр. 1

Листает раздачи

Все, из списка желаемого, рекомендованные, DLC, новые — как выберете.

6 типов списка
билет 3
12

Отбирает

Уже введено, закреплено, выше вашего уровня, чужой регион, дороже лимита, больше 500 участников, нет карточек — мимо.

12 причин пропустить
билет 4
−30P

Входит

Отправляет заявку и верит балансу, который вернул сайт. Заявку никогда не повторяет вслепую — очки не спишутся дважды.

пауза 3–7 с между входами
билет 5
900 с

Ждёт очки

Баланс ниже минимума — спит 15 минут. Сайт просит притормозить — ждёт столько, сколько сказано в ответе.

429 → Retry-After или 60 с
билет 6
1×

Сообщает

Проверяет страницу выигрышей и бесплатные игры. Каждую новость — один раз, в Telegram или Discord.

история в steamgiftbot-state.json
Возможности

Что умеет

Всё включается в config.ini, переменными окружения или флагами — без правки кода.

max_entries

Выбирает, где меньше соперников

По замеру 126 живых раздач медиана — 554 участника. Порог 500 оставляет почти половину раздач и вдвое снижает конкуренцию.

contributor_level

Не стучится в закрытые двери

Три раздачи из пяти требуют уровень. Бот знает ваш и не тратит на них запросы.

cards_only

Только игры с карточками

Спрашивает магазин Steam. Если магазин не ответил — пропускает, но не запоминает ошибку и спросит снова.

--dry-run

Пробный проход

Проходит все страницы, считает, сколько бы потратил, и не тратит ни одного очка.

telegram · discord

Пишет, когда вы выиграли

А ещё — когда кончилась сессия, и итог каждого запуска. Проверка: --notify-test.

free_games

Бесплатные игры навсегда

Раздачи Steam, Epic, GOG и других магазинов по данным GamerPower. Одним сообщением, каждая — один раз.

Установка

Выберите свой путь

Это одна программа в четырёх упаковках. Выберите вкладку — ниже только нужные шаги.

Версия 2.2 готовится к релизу. Бесплатные игры, файлы-секреты, контрольная сумма .exe и контейнер без root появятся в готовом .exe, pip и образе :latest после выхода релиза. До этого их можно попробовать из исходников, ветка fix/audit.

  1. Скачайте

    SteamGiftBot.exe и SteamGiftBot.exe.sha256 со страницы Releases. Python не нужен.

  2. Сверьте контрольную сумму

    Число должно совпасть со строкой в файле .sha256.

    cmd
    certutil -hashfile SteamGiftBot.exe SHA256
  3. Дайте ему свою папку

    Например C:\SteamGiftBot. Рядом с собой он создаст config.ini, файл состояния и логи.

  4. Запустите

    Двойной клик — и бот задаст вопросы. Дальше — первый запуск.

Первый запуск

  1. Возьмите cookie

    Войдите на steamgifts.com → F12 → Application (или Storage) → Cookies → скопируйте значение PHPSESSID. Никому его не показывайте: это вход в ваш аккаунт.

  2. Ответьте на вопросы

    Cookie, тип раздач, брать ли закреплённые, сколько очков оставлять. Ответы сохранятся в config.ini, закрытый от других пользователей компьютера.

    терминал
    steamgiftbot --setup
  1. Сделайте пробный проход

    Ни одного очка не потратится. В конце — сводка: куда бы вошёл и почему пропустил остальное.

    терминал
    steamgiftbot --once --dry-run
  2. Запустите по-настоящему

    Постоянно — просто steamgiftbot. По расписанию — через Планировщик задач:

    cmd
    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--typeWishListAll, WishList, Recommended, Copies, DLC, New.
min_points--min-points50Не опускать баланс ниже этого.
pinned--pinnednoБрать ли закреплённые раздачи.
max_entries--max-entries500Пропускать переполненные.
contributor_level--level2Ваш уровень вкладчика.
max_cost--max-cost60Потолок цены в очках.
cards_only--cards-onlyyesТолько игры с карточками Steam.
blacklist / whitelist--blacklistsimulatorСлова в названии: исключить / оставить только их.
skip_region_locked--skip-region-lockedyesПропускать раздачи для чужих регионов.
telegram_token, telegram_chat--telegram-chat-id—Куда писать. Флаг покажет ваш chat id.
discord_webhook--discord-webhook—Только адрес discord.com/api/webhooks.
free_games--free-gamessteam, epicСообщать о бесплатных играх.
points_wait--points-wait900Секунд ждать, когда кончились очки.
Бесплатные игры

Не только SteamGifts

Магазины регулярно отдают игры навсегда. Бот узнаёт о них из открытого списка GamerPower и присылает одним сообщением.

config.ini
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.

Telegram — сообщение от бота
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, живёт в одном провайдере, и второй сайт подключается рядом.

Каркас провайдера

providers/example.py
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 / None

Что дальше

Opium Pulses — ближе всего к SteamGifts по устройству, сначала нужно проверить вход и капчу. Бесплатные игры Epic — вторая лента уведомлений. IndieGala технически прост, но его правила прямо запрещают автоматизацию. Gleam и KeyJoker требуют соцсетей и браузера — не для этого бота.

проверка
pip install -r requirements-dev.txt
pytest
ruff check .
bash scripts/check-docker.sh
История

Как проект рос

От одного скрипта до пакета с тестами, Docker и архитектурой под несколько сайтов.

  1. Первые версии

    Проект PalmaLuv под лицензией MPL-2.0: cookie, список раздач, вход — и так по кругу. Готовый .exe для Windows в релизах.

  2. Docker и работа без присмотра

    Образ в GitHub Container Registry, настройки из переменных окружения, режим --once для планировщика.

  3. Пакет и тесты

    Код разложен по модулям пакета steamgiftbot, тесты гоняют сохранённые страницы сайта без сети. Поддержка Python 3.9 снята: зависимости требуют 3.10.

  4. Аудит и версия 2.2

    Бот больше не молчит об ошибках, закрыты найденные проблемы безопасности, ядро разделено на провайдеров, появились бесплатные игры от GamerPower. Тестов стало 338 вместо 251.

Вопросы

Частые вопросы

Бот пишет «Your SteamGifts session has expired». Что делать?

Cookie истёк, это нормально. Войдите на сайт заново, скопируйте новый PHPSESSID и выполните --setup. Чтобы это случалось реже, не нажимайте «выйти» в браузере: выход завершает сессию и для бота.

Почему бот почти никуда не входит?

Запустите --dry-run и прочитайте сводку: каждая причина пропуска посчитана. Чаще всего виноваты завышенный contributor_level, whitelist, под который ничего не подходит, или max_entries меньше 250.

Что значит «Cloudflare check instead of the site»?

Сайт решил, что запрос пришёл не из браузера. Откройте steamgifts.com в браузере, дождитесь, пока он вас пустит, и попробуйте позже. Бот намеренно не пытается обойти эту проверку.

В сводке «could not read the listing row» — это ошибка?

Скорее всего, SteamGifts поменял вёрстку. Один пример непрочитанной строки есть в логе — приложите его к issue на GitHub, и парсер поправят.

Можно ли запустить на Raspberry Pi или дешёвом сервере?

Да. Образ Docker собирается для amd64 и arm64 и весит около 47 МБ.

Бот сам забирает бесплатные игры?

Нет, он только сообщает о них. Забрать игру — один клик по ссылке, и этот клик остаётся за вами.