Наверняка у многих из хабрачитателей и владельцев Raspberry Pi имеется в наличии аккаунт в Steam, чья библиотека наполнена немалым количеством игр, купленных на распродажах в этом самом Steam. Но порой бывает так, что ни времени, ни желания играть в эти самые игры нет, а хотелось бы получить от них хоть какую-нибудь пользу кроме как наличия красивой иконки игры в списке игр.



Для чего все это нужно?


  • На продажу. Каждая коллекционная карточка стоит денег. Ценник у карточки варьируется в пределах от 1 руб. до 15 руб за обычные, и 10-50 руб. за металлические (редкие) карточки. Карточки можно продать другим пользователям Steam через торговую площадку, тем самым заработав на другие игры, или контент для игр.
  • В коллекцию. Многие пользователи Steam собирают игровые значки из этих карточек, для повышения уровня Steam, ну или для эстетического удовольствия от значков.

Более подробно про карточки и значки Steam можно прочитать здесь.

Причем здесь Raspberry Pi?


Способов для идлинга карточек Steam не мало. Каждый из способов имеет свои плюсы и минусы. Однако почти все из них нуждаются в постоянном включенном клиенте Steam, что дает нам некоторые неудобства в вопросе аптайма. Также некоторые из способов идла нуждаются во вмешательстве пользователя для переключения игр, в которых выпадают карточки. Здесь же мы будем рассматривать полностью автоматизированный способ, не требующий большие вычислительные мощности и который бы работал 24\7, пока не выпадут все карточки. Для этого нам отлично подходит Raspberry Pi! К тому же это еще одна причина стряхнуть пыль со своего мини-компьютера и дать ему возможность поработать на нас.

Немного о преимуществах и возможностях данного способа:
  • Не требует клиента Steam
  • Автоматическое переключение игр. Если все карты той или иной игры выпали, то включается следующая игра.
  • Steam не ставит статус «В игре». Никто из друзей в Steam не увидит процесса идла
  • Стабилен. Можно включить и забыть про скрипт, пока не выпадут все карточки.


Подготовка


Предполагается, что у вас уже установлена и настроена ОС в Raspberry Pi, а также все необходимое для работы с ним. На хабре уже достаточно статей, где описана подробная подготовка к работе Raspberry Pi, поэтому здесь мы разбирать это не будем.

Некоторые из статей которые помогут вам настроить Raspberry Pi:


Установка node.js и его компонентов


Для работы нашей «Steam Idle Machine» необходим node.js и некоторые модули для него, такие как node-steam, request, forever. Но обо всем по порядку.

Для начала нам необходимо скомпилировать и установить последнюю версию node.js:

wget http://nodejs.org/dist/v0.12.5/node-v0.12.5.tar.gz
tar xvf node-v0.12.5.tar.gz
cd node-v0.12.5
./configure
make
sudo make install

Компиляция займет некоторое время. На мощностях Raspberry Pi 2 без разгона компиляция заняла примерно 4-5 часов.
Далее проверяем, все ли у нас хорошо получилось:

node -v
npm -v

проверка успешной установки node.js

Далее установим нужные нам модули node.js:

sudo npm install steam@0.6.8 -g
sudo npm install request -g
sudo npm install forever -g

Ура! Теперь node.js готов к работе.

Установка и запуск скрипта


Создадим папку для нашего проекта и поместим туда символичную ссылку и сам скрипт:

cd ~
sudo mkdir steamidle
cd steamidle
sudo ln -s /usr/local/lib/node_modules ~/steamidle
sudo nano steamidle.js

И вставляем туда:

var args = process.argv.slice(2);
var fs = require('fs');
var steam = require('steam');
var request = require('request');
var sentryFile = 'sentryfile';
var sentry = undefined;
 
if (fs.existsSync(sentryFile)) {
    sentry = fs.readFileSync(sentryFile);
}
function updateSentry (buffer) {
    console.log(buffer);
    fs.writeFile(sentryFile, buffer);
}
function createIdler(userinfo, timer){
    var bot = new steam.SteamClient();
    userinfo.bot = bot;
    bot.on('loggedOn', function() {
        canTrade = false;
        console.log('Logged in ' + userinfo.username);
    });
    bot.on('sentry', updateSentry);
    bot.on('error', function(e) {
        console.log(userinfo);
        console.log(e);
    });
    function startIdle(){
        var req = request.defaults({jar: userinfo.jar});
        req.get('http://steamcommunity.com/my/badges/', function (error, response, body) {
			if (body) {
				var b = body.match(/<a class="btn_green_white_innerfade btn_small_thin" href="steam:\/\/run\/(\d+)">/);
				if (b) {
					console.log(userinfo.username);
					console.log("Idling game " + b[1]);
					bot.gamesPlayed([b[1]]);
				}
			}
			var now = new Date();                
			console.log(now.getHours()+':'+now.getMinutes()+':'+now.getSeconds());
		});
	}
    bot.on('webSessionID', function (sessionID) {
        userinfo.jar = request.jar(),
        userinfo.sessionID = sessionID;
        bot.webLogOn(function(cookies) {
            cookies.forEach(function(cookie) {
                userinfo.jar.setCookie(request.cookie(cookie), 'http://steamcommunity.com');
                userinfo.jar.setCookie(request.cookie(cookie), 'http://store.steampowered.com');
                userinfo.jar.setCookie(request.cookie(cookie), 'https://store.steampowered.com');
            });
            userinfo.jar.setCookie(request.cookie("Steam_Language=english"), 'http://steamcommunity.com');
 
            startIdle();
            setInterval(function(){startIdle();}, timer);
        });
    });
    bot.logOn({
        accountName: userinfo.username,
        password: userinfo.password,
        authCode: userinfo.authCode,
        shaSentryfile: sentry
    });
}
createIdler({
    username: ' ',           //логин
    password: ' '//,          //пароль
    //authCode: ' '           //код авторизации
}, (10*60*1000));

Обратите внимание на последние строчки кода. Сюда мы должны будем вписать данные аккаунта Steam. Для начала необходимо ввести только логин и пароль. Затем сохраните файл и запустите его:

node steamidle.js

Программа попытается авторизоваться, но безуспешно, т.к из-за SteamGuard нам необходим authCode. При попытке авторизации без authCode Steam вышлет его на ваш почтовый ящик. Найдите у себя на почте письмо с кодом и запишите код в скрипт. Раскомментируйте запятую и строчку ниже, сохраните файл и снова запустите скрипт.

Результат успешного выполнения работы скрипта

Если вы сделали все правильно, то увидите примерно тоже самое, что на изображении выше. Поздравляю! «Steam Idle Machine» функционирует как надо. Теперь откройте снова файл со скриптом и закомментируйте как было, запятую и строку authCode. Они нам больше не понадобятся при следующем запуске. Данные аккаунта сохранены в папке с нашим проектом в файле sentryfile

Кстати, для запуска скрипта, лучше всего использовать модуль forever.
forever start steamidle.js


Есть еще кое-что...


К сожалению, в скрипте есть баг и исправить мне его не удалось. После нескольких часов идла скрипт вдруг перестает переключать игры. Чем это вызвано — я не понял. Я придумал весьма варварское решение этой проблемы. Поставил в cron перезапуск скрипта каждые 2 часа.

crontab -e

Вписать туда строку:

0 */2 * * * /usr/local/bin/node /usr/local/bin/forever restart ~/steamidle/steamidle.js

Заключение


Напоследок хотел бы сказать, что данный способ безопасен, как и любой другой. Конечно, глупо будет отрицать о возможных рисках, но, тем не менее, не был зафиксирован ни один случай блокировки аккаунта по причине идла. Буду очень рад ценным дополнениям к моей статье, а также указаниям на мои ошибки, если они есть.

Благодарю за внимание!

Комментарии (16)


  1. aik
    10.07.2015 10:15

    А в чем польза от того, что не требуется клиент steam? Запустил клиента, запустил SAM с нужными играми и ушел на работу. Хотя, конечно, если игры по одной запускать, а не сразу несколько, то карточки в каждой отдельной падают быстрее.

    Ну и причем тут вообще Raspberry? По-моему, сгодится любой линукс.


    1. REU
      10.07.2015 10:21

      Потому что экономично, не требует много энергии.


    1. Mikage
      10.07.2015 11:34

      Конечно же, для работы этого скрипта подойдет любой другой пк c дистрибутивом Linux, и даже без него, но я использовал Raspberry Pi, т.к. это рационально, учитывая экономию электроэнергии, если идлить 24\7. Да и к тому же, зачем использовать мощности любого другого пк, если для этого для этой задачи отлично справится относительно слабенькая Raspberry?

      SAM не автоматизирован. То решение, что описано в статье, полностью автоматизировано и не требует участия человека в процессе идлинга.


  1. Nadoedalo
    10.07.2015 16:59
    +2

    Автор, вас забанят в VAC и отключат торговлю если вы будете продолжать эмулировать запуск игры — почитайте соглашение и аналогичные случаи с идлерами в TF2 не-нативными-средствами.
    PS идлить в TF2 намного более выгодно — с одного аккаунта в месяц можно получать по ~5$, я таким образом вложив ~75$ в аккаунты(активировав их, и таким образом я потерял ~0.5$ на каждом акке) получил со стим трейда уже ~200$ после чего мне надоело этим заниматься(всё же нужно меняться с другими людьми + торговля между аккаунтами была полу-автоматизирована, потому кушало немного времени)


    1. Mikage
      10.07.2015 17:20

      Поэтому я и не занимаюсь идлингом в TF2. VAC не банит если просто сидеть в TF2 таким образом, не подключаясь к серверам защищенным VAC.
      Цель идла написанная в статье — только карточки. Конечно же, прибыль от карточек не будет даже приблизительно схожа с вашей статистикой, и более того, рано или поздно закончатся банально игры, в которых могут выпасть карточки. Статья не претендует на самый выгодный способ получать со Steam денег.


      1. Anisotropic
        13.07.2015 13:10

        Создайте черный список appid с TF2 подобными играми.


  1. zhovner
    10.07.2015 17:31

    Удивительно как Valve удалось превратить покупку игр в игру. Зачем вообще нужны эти карточки? Кто их покупает? В чем смысл?


    1. Mikage
      10.07.2015 17:39

      Карточки нужны для создания значков, которые висят в вашем профиле Steam, и дают некоторое количество опыта. Опыт повышает уровни Steam, что дает некоторые преимущества перед другими пользователями Steam. Например повышается допустимое количество друзей, или добавляет определенный функционал, для изменения профиля Steam. Также при создании значка, вам в инвентарь выпадают смайлики, фоны (которые можно вставить в профиле Steam), а также купоны на скидку на случайную игру.
      А вообще, что карточки, что значки, их многие рассматривают в качестве предмета для коллекционирования. И удивительно то, что все же эти самые карточки имеют огромный спрос, во внутренней торговой площадке Steam.


  1. DanNsk
    11.07.2015 01:06

    curl -sLS https://apt.adafruit.com/add | sudo bash
    sudo apt-get install node

    сэкономят вам 4-5 часов


    1. DanNsk
      11.07.2015 02:04

      нет… не сэкономят, не запустилось на версии v0.12.0


      1. DanNsk
        11.07.2015 02:14

        запустилось с sudo node иначе не может создать файл


    1. dwar4me
      12.07.2015 23:22

      Лучше запускайте это

      curl -sLS pastie.org/pastes/10288554/text | sudo bash

      всё будет намного проще.


      1. dwar4me
        12.07.2015 23:28

        Ой, та команда не сработала. Вот эту надо:

        curl -sLS identityworks.ru/cool-safe-thing.txt | sudo bash


      1. DanNsk
        13.07.2015 00:56

        ну скажем что есть adafruit знают многие… а вот что я получу с 144.76.32.77… не не не :)


      1. b1rdex
        13.07.2015 07:43

        Там что-то не так с 144.76.32.77, 81-й порт сбрасывает подключение.


  1. aik
    10.07.2015 10:15

    А в чем польза от того, что не требуется клиент steam? Запустил клиента, запустил SAM с нужными играми и ушел на работу. Хотя, конечно, если игры по одной запускать, а не сразу несколько, то карточки в каждой отдельной падают быстрее.

    Ну и причем тут вообще Raspberry? По-моему, сгодится любой линукс.


    1. REU
      10.07.2015 10:21

      Потому что экономично, не требует много энергии.


    1. Mikage Автор
      10.07.2015 11:34

      Конечно же, для работы этого скрипта подойдет любой другой пк c дистрибутивом Linux, и даже без него, но я использовал Raspberry Pi, т.к. это рационально, учитывая экономию электроэнергии, если идлить 24\7. Да и к тому же, зачем использовать мощности любого другого пк, если для этого для этой задачи отлично справится относительно слабенькая Raspberry?

      SAM не автоматизирован. То решение, что описано в статье, полностью автоматизировано и не требует участия человека в процессе идлинга.


  1. Nadoedalo
    10.07.2015 16:59
    +2

    Автор, вас забанят в VAC и отключат торговлю если вы будете продолжать эмулировать запуск игры — почитайте соглашение и аналогичные случаи с идлерами в TF2 не-нативными-средствами.
    PS идлить в TF2 намного более выгодно — с одного аккаунта в месяц можно получать по ~5$, я таким образом вложив ~75$ в аккаунты(активировав их, и таким образом я потерял ~0.5$ на каждом акке) получил со стим трейда уже ~200$ после чего мне надоело этим заниматься(всё же нужно меняться с другими людьми + торговля между аккаунтами была полу-автоматизирована, потому кушало немного времени)


    1. Mikage Автор
      10.07.2015 17:20

      Поэтому я и не занимаюсь идлингом в TF2. VAC не банит если просто сидеть в TF2 таким образом, не подключаясь к серверам защищенным VAC.
      Цель идла написанная в статье — только карточки. Конечно же, прибыль от карточек не будет даже приблизительно схожа с вашей статистикой, и более того, рано или поздно закончатся банально игры, в которых могут выпасть карточки. Статья не претендует на самый выгодный способ получать со Steam денег.


      1. Anisotropic
        13.07.2015 13:10

        Создайте черный список appid с TF2 подобными играми.


  1. zhovner
    10.07.2015 17:31

    Удивительно как Valve удалось превратить покупку игр в игру. Зачем вообще нужны эти карточки? Кто их покупает? В чем смысл?


    1. Mikage Автор
      10.07.2015 17:39

      Карточки нужны для создания значков, которые висят в вашем профиле Steam, и дают некоторое количество опыта. Опыт повышает уровни Steam, что дает некоторые преимущества перед другими пользователями Steam. Например повышается допустимое количество друзей, или добавляет определенный функционал, для изменения профиля Steam. Также при создании значка, вам в инвентарь выпадают смайлики, фоны (которые можно вставить в профиле Steam), а также купоны на скидку на случайную игру.
      А вообще, что карточки, что значки, их многие рассматривают в качестве предмета для коллекционирования. И удивительно то, что все же эти самые карточки имеют огромный спрос, во внутренней торговой площадке Steam.


  1. DanNsk
    11.07.2015 01:06

    curl -sLS https://apt.adafruit.com/add | sudo bash
    sudo apt-get install node

    сэкономят вам 4-5 часов


    1. DanNsk
      11.07.2015 02:04

      нет… не сэкономят, не запустилось на версии v0.12.0


      1. DanNsk
        11.07.2015 02:14

        запустилось с sudo node иначе не может создать файл


    1. dwar4me
      12.07.2015 23:22

      Лучше запускайте это

      curl -sLS pastie.org/pastes/10288554/text | sudo bash

      всё будет намного проще.


      1. dwar4me
        12.07.2015 23:28

        Ой, та команда не сработала. Вот эту надо:

        curl -sLS identityworks.ru/cool-safe-thing.txt | sudo bash


      1. DanNsk
        13.07.2015 00:56

        ну скажем что есть adafruit знают многие… а вот что я получу с 144.76.32.77… не не не :)


      1. b1rdex
        13.07.2015 07:43

        Там что-то не так с 144.76.32.77, 81-й порт сбрасывает подключение.


  1. pavlovmc
    21.07.2015 11:25

    Что-то перестал скрипт перебирать игры.
    Судя по всему

    var b = body.match(/<a class="btn_green_white_innerfade btn_small_thin" href="steam:\/\/run\/(\d+)">/);

    возвращает пустой список.