diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..1663516 --- /dev/null +++ b/Procfile @@ -0,0 +1,2 @@ + +worker: node starter.js diff --git a/bot.js b/bot.js new file mode 100644 index 0000000..a37b8c9 --- /dev/null +++ b/bot.js @@ -0,0 +1,304 @@ +const DEF_DELAY = 1200; +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms || DEF_DELAY)); +} + +const got = require('got'); +const { whitelist, user_agent, origin } = require('./config'); + +module.exports = function (users) { + for (const user of users){ + var a = new SlaveMaster(user); + a.start() + } +}; + +class SlaveMaster{ + + my_id = -1; + balance = 0; + + friends = []; + slaves_already = []; + + constructor(user) { + this.name = user.name; + this.token = user.token; + this.job = user.job; + this.buy_slaves = user.buy_slaves; + this.buy_fetters = user.buy_fetters; + this.upgrade_slaves = user.upgrade_slaves; + this.min_fetter_profit = user.min_fetter_profit; + this.min_balance = user.min_balance; + this.min_price = user.min_price; + this.max_price = user.max_price; + this.min_upgrade_price = user.min_upgrade_price; + this.getFriendsIds = user.getFriendsIds; + } + + async start(){ + try { + await this.init(); + console.log(this.name,' ||| ','Авторизация прошла успешно'); + var response = await this.getMyInfo(); + this.my_id = response.me.id; + this.balance = response.me.balance; + console.log(this.name,' ||| ','Мой владелец ',response.me.master_id); + console.log(this.name,' ||| ','Бот был запущен'); + await sleep(); + this.checkFetter(); + this.getFriends(); + this.buySlaves(); + } catch(err) { + console.error(err); + console.error(err.response.body); + } + } + + async init(){ + try { + var bearer_response = await got.get(`https://api.vk.com/method/apps.get?app_id=7794757&platform=ios&access_token=${this.token}&v=5.23`, { + headers: { + 'user-agent': user_agent + }, + throwhttperrors: true, + responseType: 'json', + resolveBodyOnly: true + }).json(); + var url = bearer_response.response.mobile_iframe_url; + var bearer = 'Bearer ' + url.substring(url.indexOf('index.html?')).substring(11); + this.authorization = bearer; + } catch(error) { + console.error(error); + console.error(this.name,' --- ','Ошибка Авторизации: ',error.response.body); + } + setTimeout(() => {this.init()},600000); + } + + async getFriends(){ + try { + var friends_response = await got.get(`https://vk-api-proxy.xtrafrancyz.net/method/friends.get?user_id=${this.my_id}&count=10000&access_token=${this.token}&v=5.150`).json(); + this.friends = friends_response.response.items; + + await sleep(); + //users.getFollowers + + for await (const id of this.getFriendsIds){ + var friends_response1 = await got.get(`https://vk-api-proxy.xtrafrancyz.net/method/friends.get?user_id=${id}&count=20000&access_token=${this.token}&v=5.150`).json(); + var friends_array1 = friends_response1.response.items; + + for await (const friend of friends_array1){ + await this.friends.push(friend); + } + + var friends_response2 = await got.get(`https://vk-api-proxy.xtrafrancyz.net/method/users.getFollowers?user_id=${id}&count=1000&access_token=${this.token}&v=5.150`).json(); + var friends_array2 = friends_response2.response.items; + + for await (const friend of friends_array2){ + await this.friends.push(friend); + } + + await sleep(); + } + console.log(this.name,' --- ','Друзей: ',this.friends.length); + + } catch(error) { + console.error(this.name,' --- ','Ошибка получения списка друзей: ',error); + } + + await sleep(300000); + this.getFriends(); + } + + async getMyInfo(){ + var response = await got.get(`https://pixel.w84.vkforms.ru/HappySanta/slaves/1.0.0/start`, { + headers: { + 'user-agent': user_agent, + 'authorization' : this.authorization, + 'Origin': origin + } + }).json(); + await sleep(100); + return response; + } + + async getInfo(id){ + var response = await got.get(`https://pixel.w84.vkforms.ru/HappySanta/slaves/1.0.0/user?id=${id}`, { + headers: { + 'user-agent': user_agent, + 'authorization' : this.authorization, + 'Origin': origin + } + }).json(); + await sleep(100); + return response; + } + + async buySlave(slave){ + await got.post(`https://pixel.w84.vkforms.ru/HappySanta/slaves/1.0.0/buySlave`, { + headers: { + 'user-agent': user_agent, + 'authorization' : this.authorization, + 'Origin': origin + }, + throwhttperrors: true, + responseType: 'json', + resolveBodyOnly: true, + json: { + slave_id: slave.id + } + }).then((response)=>{ + this.balance = response.balance; + this.slaves_already.push(slave.id); + console.log(this.name,' ||| ','Новый раб \tid:',slave.id,' \tЦена:',slave.price); + }).catch(async (error) => { + await sleep(); + console.error(this.name,' --- ','Ошибка покупки раба: ',error.response.body/*.replace(/(\<.*?\>)/g, '')*/); + }); + await sleep(); + } + + async sellSlave(slave){ + await got.post(`https://pixel.w84.vkforms.ru/HappySanta/slaves/1.0.0/saleSlave`, { + headers: { + 'user-agent': user_agent, + 'authorization' : this.authorization, + 'Origin': origin + }, + throwhttperrors: true, + responseType: 'json', + resolveBodyOnly: true, + json: { + slave_id: slave.id + } + }).then((response)=>{ + this.balance = response.balance; + this.slaves_already.push(slave.id); + console.log(this.name,' ||| ','Продан раб \tid:',slave.id); + }).catch(async (error) => { + console.error(this.name,' --- ','Ошибка продажи раба: ',error.response.body/*.replace(/(\<.*?\>)/g, '')*/); + }); + await sleep(); + } + + async jobSlave(slave){ + await got.post(`https://pixel.w84.vkforms.ru/HappySanta/slaves/1.0.0/jobSlave`, { + headers: { + 'user-agent': user_agent, + 'authorization' : this.authorization, + 'Origin': origin + }, + throwhttperrors: true, + responseType: 'json', + resolveBodyOnly: true, + json: { + slave_id: slave.id, + name: this.job + } + }).then((response)=>{ + console.log(this.name,' ||| ','Новая работа \tid:',slave.id,' \tПрибыль в минуту:',response.slave.profit_per_min); + }).catch(async (error) => { + await sleep(); + console.error(this.name,' --- ','Ошибка при устройстве на работу: ',error.response.body/*.replace(/(\<.*?\>)/g, '')*/); + }); + await sleep(); + } + + async buyFetter(slave,nums){ + await got.post(`https://pixel.w84.vkforms.ru/HappySanta/slaves/1.0.0/buyFetter`, { + headers: { + 'user-agent': user_agent, + 'authorization' : this.authorization, + 'Origin': origin + }, + throwhttperrors: true, + responseType: 'json', + resolveBodyOnly: true, + json: { + slave_id: slave.id + } + }).then((response)=>{ + // balance = response.balance; + this.balance -= slave.fetter_price; + console.log(this.name,' ||| ','Купил цепь \tid:',slave.id,'\tЦена:',slave.fetter_price,'\tПрибыль принесет:',(slave.profit_per_min*60*2-slave.fetter_price)); + }).catch(async (error) => { + await sleep(); + var err=""+error.response.body; + console.error(this.name,' --- ','Ошибка покупки кандалов: ',error.response.body/*.replace(/(\<.*?\>)/g, '')*/); + }); + await sleep(); + } + + async checkFetter(){ + try { + var response = await this.getMyInfo(); +// console.log(response.me); + this.balance = response.me.balance; + console.log(this.name,' =|= ',"Текущий баланс: ",response.me.balance,' \tРабов: ',response.me.slaves_count,'\tДоход в минуту: ',response.me.slaves_profit_per_min,' \tМесто в рейтинге: ',response.me.rating_position); + + var slaves_array = []; + var slaves = response.slaves; + + for await (const slave of slaves){ + if(((slave.profit_per_min>this.min_fetter_profit&&slave.fetter_price<=120000)||whitelist.includes(slave.id))&&slave.fetter_to==0&&slave.fetter_price<=this.balance&&this.buy_fetters){ + await this.buyFetter(slave); + } + } + + for await (const slave of slaves){ + slaves_array.push(slave.id); + if(((slave.profit_per_min>1&&slave.fetter_price<=120000)||whitelist.includes(slave.id))&&slave.fetter_to==0&&slave.fetter_price<=this.balance&&this.buy_fetters){ + await this.buyFetter(slave); + } + if(slave.profit_per_min==0){ + await this.jobSlave(slave); + } + } + this.slaves_already = slaves_array; + } catch(error) { + console.error(this.name,' --- ','Ошибка проверки кандалов: ',error); + } + await sleep(5000); + this.checkFetter(); + } + + async buySlaves(){ + if(this.buy_slaves) try { + + var friends_ids = this.friends.filter( ( friend ) => !this.slaves_already.includes( friend ) ); + + for await (const friend of friends_ids){ + var slave = await this.getInfo(friend); + if(slave.master_id!=this.my_id&&this.balance>=this.min_balance&&this.balance>=slave.price&&slave.price<=this.max_price&&slave.price>=this.min_price&&slave.fetter_to==0){ + await this.buySlave(slave); + } + } + + await this.upgradeSlaves(); + + await sleep(5000); + this.buySlaves(); + } catch(error) { + console.error(this.name,' --- ','Ошибка покупки рабов: ',error); + await sleep(5000); + this.buySlaves(); + } + } + + async upgradeSlaves(){ + if(this.upgrade_slaves) try { + var response = await this.getMyInfo(); + for await (const slave of response.slaves){ + if(this.balance>=1000000&&slave.price<=27000&&slave.price>=this.min_upgrade_price){ + await this.sellSlave(slave); + await sleep(100); + await this.buySlave(slave); + await sleep(100); + } + } + return; + } catch(error) { + console.error(this.name,' --- ','Ошибка улучшения рабов: ',error); + } + } +} diff --git a/config-example.js b/config-example.js new file mode 100644 index 0000000..d9cefcc --- /dev/null +++ b/config-example.js @@ -0,0 +1,23 @@ +var config = {} + +config.whitelist = []; +config.user_agent = "Mozilla/5.0 (Linux; Android 10; Redmi Note 8 Build/QQ3A.200705.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.186 Mobile Safari/537.36"; +config.origin = "https://prod-app7794757-c1ffb3285f12.pages-ac.vk-apps.com"; +config.users = [ + { + 'name' : 'Я', + 'job' : 'Рядовой раб', + 'token' : '', + 'getFriendsIds' : [], + "buy_slaves": 1, + "buy_fetters": 1, + "min_fetter_profit": 70, + "upgrade_slaves": 0, + "min_balance" : 50000000, + "min_price": 0, + "max_price": 2000000, + "min_upgrade_price":1000 + } +] + +module.exports = config; \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..407b416 --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "SlavesBot", + "version": "0.0.25032021", + "description": "A slaves bot", + "engines": { + "node": "12.x" + }, + "main": "starter.js", + "scripts": { + "start": "node starter.js", + "test": "node test.js" + }, + "dependencies": { + "got": "^11.8.1", + "https": "^1.0.0", + "request": "^2.88.2", + "superagent": "^6.1.0" + }, + "devDependencies": { + "tape": "^4.7.0" + }, + "license": "MIT" +} diff --git a/starter.js b/starter.js new file mode 100644 index 0000000..34253fa --- /dev/null +++ b/starter.js @@ -0,0 +1,2 @@ +const { users } = require('./config'); +require('./bot')(users)