Наверняка у многих из хабрачитателей и владельцев 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:
- Выжать все соки или используем Raspberry pi на всю катушку
- Raspberry Pi: подробная настройка с нуля до TorrentBox
Установка 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:
sudo npm install steam -g sudo npm install request -g sudo npm install forever -g
Ура! Теперь node.js готов к работе.
Установка и запуск скрипта
Создадим папку для нашего проекта и поместим туда скрипт:
sudo mkdir steamidle cd 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
Есть еще кое-что…
К сожалению, в скрипте есть баг и исправить мне его не удалось. После нескольких часов идла скрипт вдруг перестает переключать игры. Чем это вызвано — я не понял. Я придумал весьма варварское решение этой проблемы. Поставил в cron перезапуск скрипта каждый 2 часа.
crontab -e
Вписать туда строку:
0 */2 * * * /usr/local/bin/node /usr/local/bin/forever restart /home/<your_profile_name>/steamidle/steamidle.js
Заключение
Напоследок хотел бы сказать, что данный способ безопасен, как и любой другой. Конечно, глупо будет отрицать о возможных рисках, но, тем не менее, не был зафиксирован ни один случай блокировки аккаунта по причине идла. Буду очень рад ценным дополнениям к моей статье, а также указаниям на мои ошибки, если они есть.
Благодарю за внимание!
ссылка на оригинал статьи http://habrahabr.ru/post/262241/
Добавить комментарий