Гайд SteamBot ГАЙД : Бесплатный фарм часов и карточек

saphire alpha user
Забаненный
Статус
Оффлайн
Регистрация
17 Июн 2021
Сообщения
68
Реакции[?]
57
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
SteamBot, part 2: 24/7 uptime
В предыдущей статье я рассказал про создание бота для Termux.
Но Термукс - херня собачья, мне лень каждый раз что-то запускать и ставить телефон на зарядку. Нужно что-то иное...

Для настройки нам понадобятся:

  • Пожалуйста, авторизуйтесь для просмотра ссылки.
    или любой текстовый редактор (писать в Notepad++ на JS неудобно)
  • Пожалуйста, авторизуйтесь для просмотра ссылки.
    , да-да... да... Вообще, можно и без него, но дебажить легче на ПК.
  • Пожалуйста, авторизуйтесь для просмотра ссылки.
    он же Steam Desktop Authenticator
  • Пожалуйста, авторизуйтесь для просмотра ссылки.
    аккаунт для хостинга бота
  • Пожалуйста, авторизуйтесь для просмотра ссылки.
    аккаунт для пушей, потому что мне так удобней

Подготовка
Первым делом создаём аккаунты и качаем SDA, нам же нужен наш токен.

Если SteamGuard привязан к смартфону на Android OS, вот вам памятка:


Ну либо просто отвяжите Guard и прикрепите его к SDA, 15 дней бана на тп


Должно получиться что-то такое. Собсна, на боте у меня 2 аккаунта, потому оба привязал к Desktop версии
Когда все нужные аккаунты привязаны к SDA, создаём репозиторий на GitHub. Как и куда — найдёте в глобальной.

Клонируете репозиторий на ПК, либо создаете локальный с вашей машины (который потом не забудьте запушить в origin)

Настройка. Ну или вторая подготовка, мне по**й
В этот раз обойдёмся двумя файлами, на ПК запускать нет необходимости, трансферить на смартфон — тоже.

Первый файл, main он же index.js:


JavaScript:
const clientBuilder = require('./config');
const clientBuilder = require('./config');

let clientArray = []

const configsArray = [{

login: "login",
password: "pass",
sharedSecret: "token",
games: [
381210 // Dead by Daylight
]
},
{
login: "login2",
password: "pass2",
sharedSecret: "token2",
games: [
570, // Dota 2
548430, // Deep Rock Galactic
4000, // Gmod
602960 // Barotrauma
]
}]


console.log('Bot number: ' + configsArray.length);

for (let config of configsArray) {

let client = clientBuilder.execute(config);
client.doLogin();
clientArray.push(client);
}
console.log('Running ' + configsArray.length + ' bots.');
Файл выше собран под мои нужды, поэтому в массиве два элемента: первый аккаунт и второй.

Самое интересное для нас - это token, он же sharedSecret. Его мы берём из файлов SDA. Если ставили пароль на SDA, то на время придётся снять.

Открываем папку SDA/maFiles


Внутри находим значение shared_secret и копируем. Это и есть наш token.


Вставляем его в файл, соблюдая синтаксис (кавычки, запятые, скобки). ID нужных игр для значения games берём из раздела "Параметры" желаемой игры.


Офк я не кручу часы в Лоботомии, просто она была запущена последней, хули выбирать-то...
Заполняем файл config.js. Actually, он должен быть нашим main, но сделать export оказалось проще:

JavaScript:
const SteamUser = require('steam-user');
const SteamTotp = require('steam-totp');

let newClient = {};

newClient.execute = function (config) {

    let client = new SteamUser({

        // Никакого SteamGuard, как я и говорил
        promptSteamGuardCode: false,
        dataDirectory: "./sentry",
        singleSentryfile: false
    });

    client.login = config.login;
    client.password = config.password;
    client.sharedSecret = config.sharedSecret;
    client.games = config.games;
    client.messageReceived = {};

    client.on('loggedOn', function (details) {
        console.log("[" + this.login + "] Logged into Steam as " + client.steamID.getSteam3RenderedID());
        client.setPersona(SteamUser.EPersonaState.Snooze); // Set steam status [25-34 for all possible variants]
        client.gamesPlayed(this.games);
    });
    /* Value-to-name mapping for convenience
    "0": "Offline",
    "1": "Online",
    "2": "Busy",
    "3": "Away",
    "4": "Snooze",
    "5": "LookingToTrade",
    "6": "LookingToPlay",
    "7": "Invisible",
    */


    client.on('error', function (err) {
        console.log("[" + this.login + "] " + err);
        setTimeout(function () { client.doLogin(); }, 30 * 60 * 1000);
        // Время в ms, в течение которого бот будет афк. 1000 ms. * 60 sec. * 30 min. = 18000000 ms. = 30 min. Меняем первое значение, если хотим изменить минуты.
    });

    client.doLogin = function () {
        this.logOn({
            "accountName": this.login,
            "password": this.password
        });
    }

    client.on('steamGuard', function (domain, callback) {
        if (!this.sharedSecret) {

            // Никаких запросов SteamGuard, нам это не подходит. Полная автоматика.
            console.log("Seems like you forgot about SharedSecret. Terminating the process...");
            return;
        }
        else {
            var authCode = SteamTotp.generateAuthCode(this.sharedSecret);
            console.log("[" + this.login + "] Generated Auth Code: " + authCode);
            callback(authCode);
        }

    });

    client.on("friendMessage", function (steamID, message) {
        console.log("[" + this.login + "] Message from " + steamID + ": " + message);
        if (!this.messageReceived[steamID]) {

            // Мягко посылаем нашего другана, у нас тут часы крутятся в конце-то концов. Пусть напишет в другой чат.
            client.chatMessage(steamID, "[Automated Response] I am idling. DM me in Discord or VK.");
            this.messageReceived[steamID] = true;
        }
    });


    client.on('vacBans', function (numBans, appids) {
        if (numBans > 0) {

            // Показывает баны аккаунта, если есть. Спасибо тернарному "?" за сокращение строк.
            console.log("[" + this.login + "] " + numBans + " VAC ban" + (numBans == 1 ? '' : 's') + "." +
                (appids.length == 0 ? '' : " In apps: " + appids.join(', ')));
        }
    });

    client.on('accountLimitations', function (limited, communityBanned, locked, canInviteFriends) {
        var limitations = [];

        if (limited) {
            limitations.push('LIMITED');
        }

        if (communityBanned) {
            limitations.push('COMMUNITY BANNED');
        }

        if (locked) {
            limitations.push('LOCKED');
        }

        if (limitations.length !== 0) {
            console.log("[" + this.login + "] Limitations: " + limitations.join(', ') + ".");
        }
    });

    return client;
}

module.exports = newClient;
Все нужные функции прокомментированы, изучайте и настраивайте.

3... 2... 1... Push!
Создаём в файловой системе бота файл Procfile

Внутри пишем

Worker: node .
либо
Worker: node index.js
Пушим всё это дело в наш репозиторий. Либо через VSCode, либо через Github Dekstop, как вам угодно.

Если кто вдруг не работал с VSCode, то запушить можно через меню в левом углу редактора.


Переходим к Heroku. Надо же бота запустить...

Создаём новое приложение, даём ему название и выбираем сервак, рекомендую Европу, легче пинговать.


Далее коннектим Heroku и GitHub между собой, дабы была возможность автоматически развёртывать новые билды в облако (вдруг список игр решите поменять, в таком случае будет достаточно запушить коммит, Heroku сам соберёт билд)



1624813918823.png
Добавляем Buildpack во вкладке settings. Нам нужен именно heroku/nodejs



Жмём Enable Automatic Deploys, если хотите автоматизации, о которой я упомянул выше.

Далее Deploy Branch, если не началось развёртывание ветки


Можем запускать бота и следить за его работой через логи


Либо можете подключиться к боту через Heroku CLI, залогинившись командой

heroku login
Если по какой-то причине бот крашнул, заходим во вкладку Resources и переключаем

web => Worker

Готово.

Бот будет работать 24/7.

Если захотите сыграть, но вам высвечивается уведомление "Ваш аккаунт занят" => жмите продолжить, бота кикнет, а каждые 30 минут он будет пробовать повторное подключение.

Т.е. как только вы закончите играть, он вернётся к фарму.
UPD
Тут возник казус: у Heroku на бесплатном аккаунте ограничены часы работы dyno в месяц. Где-то около 550 часов (22 дней).
  • Вариант 1: зарегать два аккаунта и когда закончится первый, перейти на второй и далее по кругу
  • Вариант 2: прикрепить карту для подтверждения личности, за это дадут 1000 часов суммарно. Хватит с лихвой на месяц + попутно можно крутить ещё какой-то Dyno (т.е. 1.3 бота, т.к. в месяце около 730 часов).
  • Вариант 3: подписаться на студенческий пакет от GitHub, в него входит 2 года платного Dyno (Hobby версия $7 в месяц, т.е. вам на аккаунт начислят $168 на любые нужды).

    Оптимальным вариантом чисто для бота будет подтверждение личности через привязку карты. Снимет $1 и отменит снятие.
 
Последнее редактирование:
saphire alpha user
Забаненный
Статус
Оффлайн
Регистрация
17 Июн 2021
Сообщения
68
Реакции[?]
57
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
No thoughts head empty
Начинающий
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
17
Реакции[?]
5
Поинты[?]
0
Автор гений кстати, да :kappa:
А ещё можете можете поставить пару звёзд ему на гитхабе
 
No thoughts head empty
Начинающий
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
17
Реакции[?]
5
Поинты[?]
0
Кстати, стоит указать, что в массив можно добавлять ещё аккаунты, просто расширяя сам массив
Касательно Procfile: dynos обычно появляются после деплоя
 
Актер Gay-porn
Начинающий
Статус
Оффлайн
Регистрация
18 Фев 2018
Сообщения
143
Реакции[?]
9
Поинты[?]
0
Объясните тупому, что значить "пушить" в этой статье?
 
No thoughts head empty
Начинающий
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
17
Реакции[?]
5
Поинты[?]
0
Эксперт
Статус
Оффлайн
Регистрация
10 Фев 2021
Сообщения
1,739
Реакции[?]
559
Поинты[?]
2K
Лежу на даче на диванчике и читаю это, когда у меня погреб затоплен нахуй, информативненько, пойду погреб осушать.
 
saphire alpha user
Забаненный
Статус
Оффлайн
Регистрация
17 Июн 2021
Сообщения
68
Реакции[?]
57
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обновлено!
 
No thoughts head empty
Начинающий
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
17
Реакции[?]
5
Поинты[?]
0
No thoughts head empty
Начинающий
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
17
Реакции[?]
5
Поинты[?]
0
Тут возник казус: у Heroku на бесплатном аккаунте ограничены часы работы dyno в месяц. Где-то около 550 часов (22 дней).
  • Вариант 1: зарегать два аккаунта и когда закончится первый, перейти на второй и далее по кругу
  • Вариант 2: прикрепить карту для подтверждения личности, за это дадут 1000 часов суммарно. Хватит с лихвой на месяц + попутно можно крутить ещё какой-то Dyno (т.е. 1.3 бота, т.к. в месяце около 730 часов).
  • Вариант 3: подписаться на студенческий пакет от GitHub, в него входит 2 года платного Dyno (Hobby версия $7 в месяц, т.е. вам на аккаунт начислят $168 на любые нужды).

    Оптимальным вариантом чисто для бота будет подтверждение личности через привязку карты. Снимет $1 и отменит снятие. gangorbang, прими инфу к сведению

    2021-07-04 15_03_50-Account · Billing _ Heroku - Opera.png
 
Забаненный
Статус
Оффлайн
Регистрация
6 Ноя 2019
Сообщения
6
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
легче на теелефон скачать iddle steam с плей маркета он автомаотм запускает все игры .

[+] Атофарм карточек во всех играх которые есть
[+] Набиваем часы
[-] Не работает без wi-fi
 
No thoughts head empty
Начинающий
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
17
Реакции[?]
5
Поинты[?]
0
легче на теелефон скачать iddle steam с плей маркета он автомаотм запускает все игры .

[+] Атофарм карточек во всех играх которые есть
[+] Набиваем часы
[-] Не работает без wi-fi
>> Контейнер, работающий 24/7 без потребления денег и электричества
АРРРЯЯЯЯ, ТЕЛЕФОН

1630083731430.png
 
Сверху Снизу