├── StartAccount1.bat ├── StartAccount2.bat ├── README.md ├── account2.js └── account1.js /StartAccount1.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | :main 3 | title Account #1 - Trade Boost 4 | node account1.js 5 | echo Script Crashed 6 | timeout /t 20 7 | goto main 8 | -------------------------------------------------------------------------------- /StartAccount2.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | :main 3 | title Account #2 - Trade Boost 4 | node account2.js 5 | echo Script Crashed 6 | timeout /t 20 7 | goto main 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # steam-trade-farm 2 | 3 | This is a basic script, that use 2 of your accounts and makes trades to boost 'Trades Done' on your Steam Profile. 4 | ![head](https://user-images.githubusercontent.com/64363113/107683028-5fef8800-6ca1-11eb-9008-1e0f00f7e143.png) 5 | 6 | ## Getting Started 7 | 8 | For you to get started you need the following 9 | 10 | ``` 11 | NODEJS 12 | NPM Package Installer 13 | Two Steam Accounts 14 | The Two Identity Secret 15 | The Two Shared Secret 16 | ``` 17 | 18 | ### Installing 19 | 20 | First off get your Identity Secrets and Shared Secrets. 21 | You can watch this video: https://www.youtube.com/watch?v=JjdOJVSZ9Mo [SDA/WinAuth works the same] 22 | 23 | ``` 24 | 1) Download and extract the folder to your desktop 25 | 2) Open a prompt and type: 26 | npm install steam-user steam-totp steamcommunity steam-tradeoffer-manager chalk chalk-animation gradient-string 27 | 3) Open account1.js and edit with your infos [Lines: 25,26,27,49,60,109] 28 | 4) Open account2.js and edit with your infos [Lines: 25,26,27,52,63,112] 29 | ``` 30 | 31 | ### Start the bots 32 | 33 | ``` 34 | Just start "StartAccount1.bat" and "StartAccount2.bat" at the same time 35 | ``` 36 | 37 | ### How it work ? 38 | 39 | ``` 40 | -Account 1 send items to Account 2, After X minutes Account 2 send the whole inventory back to Account 1 41 | -Accounts use steam items [backgrounds, emoticons, cards] can easily change it 42 | ``` 43 | 44 | ### Notes 45 | ``` 46 | ⚠️ Never share your steam logs/shared secret/identity secret with anyone ⚠️ 47 | 🙏 Support me by following me and leave a star 🙏 48 | ``` 49 | 50 | ## Author 51 | 52 | * **qpeckin** - [YouTube](https://www.youtube.com/watch?v=kaH6mvyDXcU) 53 | 54 | ## Support 55 | 56 | For support, join my DC server at [discord.gg/forgers](https://discord.gg/forgers) 57 | 58 | 59 | ## Shoutout 60 | 61 | * Highly Inspired by [Koncealed](https://github.com/RobertSkonieczny/node-steam-trade-farm) 62 | * Thanks to [Zyffu](https://github.com/Zyffu) for helping me with maths 63 | 64 | 65 | -------------------------------------------------------------------------------- /account2.js: -------------------------------------------------------------------------------- 1 | const SteamUser = require('steam-user'); 2 | const SteamTotp = require('steam-totp'); 3 | const SteamCommunity = require('steamcommunity'); 4 | const TradeOfferManager = require('steam-tradeoffer-manager'); 5 | const chalk = require('chalk'); 6 | const chalkAnimation = require('chalk-animation'); 7 | const gradient = require('gradient-string'); 8 | 9 | const client = new SteamUser(); 10 | const community = new SteamCommunity(); 11 | const manager = new TradeOfferManager({ 12 | steam: client, 13 | community: community, 14 | language: 'en' 15 | }); 16 | 17 | //SexyPrompt 18 | console.log(gradient.pastel('Script Started')) 19 | console.log(''); 20 | console.log(gradient.pastel('Made with ♥ by qpeckin')); 21 | console.log(gradient.pastel('https://github.com/qpeckin/steam-trade-farm/')); 22 | 23 | //SteamLogin 24 | const logOnOptions = { 25 | accountName: 'LOGIN', 26 | password: 'PASSWORD', 27 | twoFactorCode: SteamTotp.generateAuthCode('SHARED_SECRET_FROM_WINAUTH') 28 | }; 29 | 30 | client.logOn(logOnOptions); 31 | 32 | client.on('loggedOn', () => { 33 | const rainbow = chalkAnimation.neon('Logged Into Steam'); // Animation starts 34 | setTimeout(() => { 35 | rainbow.stop(); // Animation stops 36 | }, 1000); 37 | setTimeout(() => { 38 | rainbow.start(); // Animation resumes 39 | }, 2000); 40 | 41 | console.log(''); 42 | }); 43 | 44 | //TokenAutoAccept 45 | client.on('webSession', (sessionid, cookies) => { 46 | manager.setCookies(cookies); 47 | 48 | community.setCookies(cookies); 49 | 50 | //Identity Secret is being used to "sign" the trade confirmation requests. 51 | //Used to approve trades, if you want to accept the trades on WinAuth add "//" in front of the line 52 52 | community.startConfirmationChecker(10000, 'IDENTITYSECRET_FROM_WINAUTH'); 53 | 54 | setInterval(function() { 55 | 56 | console.log(''); 57 | console.log(chalk.yellow('[-]Returning items...')); 58 | sendRandomItem(); 59 | }, 150 * 1000); // 150 * 1000 ms = 2.5 min [reduce '150' by a lower number, really depend on how many items you're using] 60 | }); 61 | 62 | manager.on('newOffer', (offer) => { 63 | if (offer.partner.getSteamID64() === 'Account1_STEAMID64') { //ID64 Of Account1 64 | offer.accept((err, status) => { 65 | if (err) { 66 | console.log(err); 67 | process.exit(); 68 | } else { 69 | console.log(chalk.green(`[+]Accepted trade from farm partner - Status: ${status}.`)); 70 | } 71 | }); 72 | } /*else { 73 | offer.decline((err) => { 74 | if (err) { 75 | console.log(err); 76 | process.exit(); 77 | } else { 78 | console.log('[*]Canceled offer from scammer.'); 79 | } 80 | }); 81 | }*/ 82 | }); 83 | 84 | /*manager.on('newOffer', (offer) => { 85 | if (offer.itemsToGive.length === 0) { 86 | offer.accept((err, status) => { 87 | if (err) { 88 | console.log(err); 89 | process.exit(); 90 | } else { 91 | console.log(`Donation accepted - Status: ${status}.`); 92 | } 93 | }); 94 | } else { 95 | offer.decline((err) => { 96 | if (err) { 97 | console.log(err); 98 | } else { 99 | console.log('Trade declined (wanted our items).'); 100 | } 101 | }); 102 | } 103 | });*/ 104 | 105 | //SendingTrades 106 | function sendRandomItem() { 107 | manager.loadInventory(753, 6, true, (err, inventory) => { 108 | if (err) { 109 | console.log(err); 110 | process.exit(); 111 | } else { 112 | const offer = manager.createOffer('https://steamcommunity.com/tradeoffer/new/?partner=XXXXXXXXX&token=XXXXXXXX'); //TradeLink Of Account1 113 | //const item = inventory[Math.floor(Math.random() * inventory.length - 1)]; 114 | 115 | 116 | let accessAllowed; 117 | //const quantity = [Math.floor(inventory.length)]; 118 | //console.log(iloscitemowweq); 119 | 120 | /*if (quantity > 4) { 121 | //const item1 = inventory[Math.floor(inventory.length - 1)]; 122 | //offer.addMyItem(item1); 123 | offer.addMyItem({"appid": 753,"contextid": 6,"assetid": "6229351376","amount": "69"}); 124 | } else {*/ 125 | 126 | //PassivBot = Transfer whole inventory every x min back to Account1 127 | 128 | inventory.forEach(function(element) { 129 | offer.addMyItem(element); 130 | //console.log(element); 131 | //console.log("NEXT:"); 132 | }); 133 | /* 134 | const item1 = inventory[Math.floor(Math.random() * inventory.length - 1)]; 135 | offer.addMyItem(item1);*/ 136 | 137 | //} 138 | 139 | 140 | //console.log(item); 141 | //const item2 = inventory[Math.floor(inventory.length - 2)]; 142 | 143 | //offer.addMyItem(item); 144 | //offer.addMyItem(item2); 145 | //offer.addMyItem({"appid": 753,"contextid": 6,"assetid": "6229351376","amount": "69"}); //Default Items: Steam 146 | //offer.setMessage(`Wow! You get a ${item1.name}!`); //Donation Variant 147 | offer.setMessage(`qpeckin's technologies`); 148 | offer.send((err, status) => { 149 | if (err) { 150 | console.log(err); 151 | process.exit(); 152 | } else { 153 | console.log(chalk.yellow(`[-]Sent offer - Status: ${status}.`)); 154 | console.log(chalk.magentaBright('[!]Remember to leave a star in github')); 155 | console.log(''); 156 | //console.log(item1); 157 | } 158 | }); 159 | } 160 | }); 161 | } 162 | -------------------------------------------------------------------------------- /account1.js: -------------------------------------------------------------------------------- 1 | const SteamUser = require('steam-user'); 2 | const SteamTotp = require('steam-totp'); 3 | const SteamCommunity = require('steamcommunity'); 4 | const TradeOfferManager = require('steam-tradeoffer-manager'); 5 | const chalk = require('chalk'); 6 | const chalkAnimation = require('chalk-animation'); 7 | const gradient = require('gradient-string'); 8 | 9 | const client = new SteamUser(); 10 | const community = new SteamCommunity(); 11 | const manager = new TradeOfferManager({ 12 | steam: client, 13 | community: community, 14 | language: 'en' 15 | }); 16 | 17 | //SexyPrompt 18 | console.log(gradient.pastel('Script Started')) 19 | console.log(''); 20 | console.log(gradient.pastel('Made with ♥ by qpeckin')); 21 | console.log(gradient.pastel('https://github.com/qpeckin/steam-trade-farm/')); 22 | 23 | //SteamLogin 24 | const logOnOptions = { 25 | accountName: 'LOGIN', 26 | password: 'PASSWORD', 27 | twoFactorCode: SteamTotp.generateAuthCode('SHARED_SECRET_FROM_WINAUTH') 28 | }; 29 | 30 | client.logOn(logOnOptions); 31 | 32 | client.on('loggedOn', () => { 33 | const rainbow = chalkAnimation.neon('Logged Into Steam'); // Animation starts 34 | setTimeout(() => { 35 | rainbow.stop(); // Animation stops 36 | }, 1000); 37 | setTimeout(() => { 38 | rainbow.start(); // Animation resumes 39 | }, 2000); 40 | 41 | console.log(''); 42 | }); 43 | 44 | //TokenAutoAccept 45 | client.on('webSession', (sessionid, cookies) => { 46 | manager.setCookies(cookies); 47 | 48 | community.setCookies(cookies); 49 | community.startConfirmationChecker(4000, 'IDENTITYSECRET_FROM_WINAUTH'); // 50 | 51 | //var randomtimer = (Math.floor(Math.random() * (17 - 11)) + 11); 52 | setInterval(function() { 53 | 54 | console.log(chalk.yellow('[-]Trying to send trade...')); 55 | sendRandomItem(); 56 | }, 7500); // random * 1000 milsec //}, randomtimer * 1000); 57 | }); 58 | 59 | manager.on('newOffer', (offer) => { 60 | if (offer.partner.getSteamID64() === 'Account2_STEAMID64') { //ID64 Of Account2 61 | offer.accept((err, status) => { 62 | if (err) { 63 | qpeckin_catch_steam_errors(err); 64 | } else { 65 | console.log(''); 66 | console.log(chalk.green(`[+]Accepted trade from farm partner - Status: ${status}.`)); 67 | console.log(''); 68 | } 69 | }); 70 | } /*else { 71 | offer.decline((err) => { 72 | if (err) { 73 | console.log(err); 74 | process.exit(); 75 | } else { 76 | console.log(chalk.orange('[*]Canceled offer from scammer.')); 77 | } 78 | }); 79 | }*/ 80 | }); 81 | 82 | /*manager.on('newOffer', (offer) => { 83 | if (offer.itemsToGive.length === 0) { 84 | offer.accept((err, status) => { 85 | if (err) { 86 | console.log(err); 87 | process.exit(); 88 | } else { 89 | console.log(`Trade accepted - Status: ${status}.`); 90 | } 91 | }); 92 | } else { 93 | offer.decline((err) => { 94 | if (err) { 95 | console.log(err); 96 | } else { 97 | console.log('Trade declined (wanted our items).'); 98 | } 99 | }); 100 | } 101 | });*/ 102 | 103 | //SendingTrades 104 | function sendRandomItem() { 105 | manager.loadInventory(753, 6, true, (err, inventory) => { 106 | if (err) { 107 | qpeckin_catch_steam_errors(err); 108 | } else { 109 | const offer = manager.createOffer('https://steamcommunity.com/tradeoffer/new/?partner=XXXXXXXXX&token=XXXXXXXX'); //TradeLink Of Account2 110 | //const item = inventory[Math.floor(Math.random() * inventory.length - 1)]; 111 | 112 | 113 | let accessAllowed; 114 | //const quantity = [Math.floor(inventory.length)]; 115 | //console.log(quantity); 116 | 117 | /*if (quantity > 4) { 118 | //const item1 = inventory[Math.floor(inventory.length - 1)]; 119 | //offer.addMyItem(item1); 120 | offer.addMyItem({"appid": 753,"contextid": 6,"assetid": "6229351376","amount": "69"}); 121 | } else {*/ 122 | const item1 = inventory[Math.floor(Math.random() * inventory.length - 1)]; 123 | offer.addMyItem(item1); 124 | //} 125 | 126 | 127 | //console.log(item); 128 | //const item2 = inventory[Math.floor(inventory.length - 2)]; 129 | 130 | //offer.addMyItem(item); 131 | //offer.addMyItem(item2); 132 | //offer.addMyItem({"appid": 753,"contextid": 6,"assetid": "6229351376","amount": "69"}); //Default Items: Steam 133 | //offer.setMessage(`Wow! You get a ${item1.name}!`); //Donation Variant 134 | offer.setMessage(`qpeckin's technologies`); 135 | offer.send((err, status) => { 136 | if (err) { 137 | qpeckin_catch_steam_errors(err); 138 | } else { 139 | console.log(chalk.yellow(`[-]Sent offer - Status: ${status}.`)); 140 | //console.log(item1); 141 | } 142 | }); 143 | } 144 | }); 145 | } 146 | 147 | 148 | function qpeckin_catch_steam_errors(log) { 149 | 150 | console.log(log); 151 | console.log(''); 152 | console.log("Testing if we know this error..."); 153 | 154 | var x = log.toString(); 155 | 156 | 157 | //Check if we know the errors 158 | if (x.includes('There was an error ') || x.includes('d during')) { 159 | console.log("Yes - ignoring..."); //Catch incoming and sent offers 160 | console.log(''); 161 | } 162 | else if (x.includes("Cannot read property 'appid' of undefined")) { 163 | console.log("Yes - ignoring..."); 164 | console.log(''); 165 | } 166 | else if (x.includes("too many") || x.includes("too much")) { 167 | console.log("Yes - ignoring..."); 168 | console.log(''); 169 | } 170 | else { 171 | console.log("Unknown error - restarting..."); 172 | process.exit(); 173 | } 174 | 175 | } 176 | 177 | --------------------------------------------------------------------------------