Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var config = require('config');
- var fs = require('fs');
- var hash = require('crypto').createHash('sha1');
- hash.update(Math.random().toString());
- hash = hash.digest('hex');
- var Steam = require('steam');
- var SteamWebLogOn = require('steam-weblogon');
- var getSteamAPIKey = require('steam-web-api-key');
- var steamtrade = require('steam-trade');
- var SteamTradeOffers = require('steam-tradeoffers');
- var SteamTotp = require('steam-totp');
- var SteamcommunityMobileConfirmations = require('steamcommunity-mobile-confirmations');
- var F2ATXT = fs.readFileSync('./'+config.get('steam.username')+'.2fa');
- if (!F2ATXT) {
- console.log('You need a "user.2fa"! Set this up by setting a phone number, then running enable.js!');
- process.exit(0);
- }
- var twofa = JSON.parse(F2ATXT);
- var logOnOptions = {
- account_name: config.get('steam.username'),
- password: config.get('steam.password'),
- two_factor_code: SteamTotp.generateAuthCode(twofa.shared_secret)
- };
- if (process.argv[2] == '2fa') {
- console.log('2fa:',logOnOptions.two_factor_code);
- return;
- }
- if (!config.get('steam.id')) {
- console.log('You must put in the config steam.id (should start with 765...)');
- return;
- }
- var SteamMC;
- var steamClient = new Steam.SteamClient();
- var steamUser = new Steam.SteamUser(steamClient);
- var steamFriends = new Steam.SteamFriends(steamClient);
- var steamWebLogOn = new SteamWebLogOn(steamClient, steamUser);
- var OffersManager = new SteamTradeOffers();
- var steamTrading = new Steam.SteamTrading(steamClient);
- var trade = new steamtrade();
- // Log stuff
- function LOG(msg) {
- console.log(msg);
- }
- var appid = {
- TF2: 440,
- Steam: 753
- };
- var contextid = {
- TF2: 2,
- Steam: 6
- }
- // Login
- steamClient.connect();
- steamClient.on('connected', function() {
- steamUser.logOn(logOnOptions);
- });
- // Bot started, set up trade offer with steam api key
- steamClient.on('logOnResponse', function(logonResp) {
- if (logonResp.eresult === Steam.EResult.OK) {
- LOG('Bot Online...');
- steamFriends.setPersonaState(Steam.EPersonaState.Online);
- steamWebLogOn.webLogOn(function(sessionID, newCookie) {
- SteamMC = new SteamcommunityMobileConfirmations({
- steamid: config.get('steam.id'),
- identity_secret: twofa.identity_secret,
- device_id: 'android:'+hash,
- webCookie: newCookie
- });
- checkMC();
- getSteamAPIKey({
- sessionID: sessionID,
- webCookie: newCookie
- }, function(err, APIKey) {
- if (err) {
- LOG('[ERR STEAM API]');
- console.log(err);
- }
- OffersManager.setup({
- sessionID: sessionID,
- webCookie: newCookie,
- APIKey: APIKey
- });
- LOG('Steam Bot Ready');
- handleOffers();
- });
- });
- }
- });
- function webLogOn() {
- steamWebLogOn.webLogOn(function(sessionID, newCookie) {
- SteamMC = new SteamcommunityMobileConfirmations({
- steamid: config.get('steam.id'),
- identity_secret: twofa.identity_secret,
- device_id: 'android:'+hash,
- webCookie: newCookie
- });
- checkMC();
- getSteamAPIKey({
- sessionID: sessionID,
- webCookie: newCookie
- }, function(err, APIKey) {
- sw = SW(APIKey);
- if (err) {
- LOG('[ERR STEAM API]');
- console.log(err);
- }
- OffersManager.setup({
- sessionID: sessionID,
- webCookie: newCookie,
- APIKey: APIKey
- });
- LOG('Steam Bot Ready');
- handleOffers();
- });
- });
- }
- steamFriends.on('friend', (steamID, relationship) => {
- if (relationship == Steam.EFriendRelationship.RequestRecipient) {
- LOG('[' + steamID + '] Accepted friend request');
- steamFriends.addFriend(steamID);
- steamFriends.sendMessage(steamID, 'Hello! I\'m a bot that buys Mann Co. Audition Reels and Mann Co. Director\'s Cut Reels! To see available commands, please type !help.')
- }
- });
- steamFriends.on('friendMsg', (id, msg) => {
- if (msg.indexOf('!help') == 0) {
- steamFriends.sendMessage(id, 'You can use the command !prices to check current buying prices, !tradelink to get my trade offer link, !listings to see my current listings on third-party websites, and !owner to contact my owner');
- }
- else if (msg.indexOf('!tradelink') == 0) {
- steamFriends.sendMessage(id, 'My trade link is https://steamcommunity.com/tradeoffer/new/?partner=193233186');
- }
- else if (msg.indexOf('!listings') == 0) {
- steamFriends.sendMessage(id, 'I currently have TF2Outpost, TF2Bazaar, and backpack.tf listings. You can check my TF2Outpost listing at http://www.tf2outpost.com/trade/27214705#latest , TF2Bazaar listing at http://bazaar.tf/trade/1340977 , and my backpack.tf listings at https://backpack.tf/u/76561198153498914');
- }
- else if (msg.indexOf('!prices') == 0) {
- var priceList = config.get('prices');
- steamFriends.sendMessage(id, 'I am currently buying Mann Co. Audition Reels for ' + priceList[0] + ' refined and Mann Co. Directors Cut Reels for ' + priceList[1] + ' refined.');
- }
- else if (msg.indexOf('!owner') == 0) {
- steamFriends.sendMessage(id, 'My owner is rycao18. You can contact him at http://steamcommunity.com/id/rycao18');
- }
- if (config.get('admins').indexOf(id) == -1) return;
- if (msg.indexOf('!setprice') == 0) {
- var match = msg.match(/!setprice (director|audition) ([\.0-9]+)/);
- if (!match) steamFriends.sendMessage(id, 'Usage: !setprice <director or audtion> <price> (e.g. !setprice director 3.77)');
- else {
- steamFriends.sendMessage(id, 'Successfully set price of '+match[1] + ' reels to '+match[2] + '!');
- PRICES[match[1] == 'audition' ? 0 : 1] = parseFloat(match[2]);
- changePrices();
- }
- }
- });
- // Handle offers
- function handleOffers() {
- OffersManager.getOffers({
- get_received_offers: 1,
- active_only: 1,
- time_historical_cutoff: Math.random(Date.now() / 1000)
- }, (err, body) => {
- if (!body || !body.response || !body.response.trade_offers_received) return;
- var offers = body.response.trade_offers_received;
- offers.filter(o => o.trade_offer_state == 2).forEach((offer) => {
- var sender = offer.steamid_other;
- var theirItems = offer.items_to_receive;
- var myItems = offer.items_to_give;
- if (config.get('admins').indexOf(sender) != -1 && offer.message == 'give') {
- OffersManager.acceptOffer({ tradeOfferId: offer.tradeofferid }, () => checkMC());
- LOG('Accepting Admin Offer from '+sender);
- return;
- }
- var decline = false;
- var theirScrap = 0;
- var myScrap = 0;
- var priceList = config.get('prices');
- if (theirItems) {
- theirItems.forEach(i => {
- LOG(theirScrap);
- LOG(theirItems);
- var ind = config.get('items').indexOf(console.log(i));
- if (ind != -1) theirScrap += refToScrap(priceList[ind]);
- });
- }
- if (myItems) {
- myItems.forEach(i => {
- LOG(myScrap);
- if (i.classid == '2675') myScrap += 1;
- else if (i.classid == '5564') myScrap += 3;
- else if (i.classid == '2674') myScrap += 9;
- else decline = true;
- });
- }
- if (decline || theirScrap < myScrap) {
- OffersManager.declineOffer({ tradeOfferId: offer.tradeofferid });
- LOG('DECLINED offer from '+sender);
- } else {
- OffersManager.acceptOffer({ tradeOfferId: offer.tradeofferid }, () => checkMC());
- var str = '';
- if (!myItems) str = ' No mobile confirmation needed.'
- LOG('ACCEPTED offer from '+sender+' (paid '+myScrap+' scrap for '+theirScrap+' scrap in items)'+str);
- }
- });
- });
- }
- function checkMC() {
- SteamMC.FetchConfirmations((err, conf) => {
- if (err) {
- console.log(err);
- } else if (conf.length == 0) return;
- else {
- conf.forEach(c => SteamMC.AcceptConfirmation(c, (err, res) => {
- if (err) {
- console.log('Err accepting',err);
- } else LOG('Mobile accepted!');
- }));
- }
- });
- }
- // New offers => process
- steamUser.on('tradeOffers', (num) => {
- if (num > 0) handleOffers();
- })
- function refToScrap(price) {
- return Math.round(price*9)
- ;}
- var PRICES = config.get('prices');
- function changePrices() {
- fs.readFile('./config/default.json', 'utf8', (err, data) => {
- var json = JSON.stringify(PRICES).replace(/(,|\[)(\d)(,|\])/gi, '\$1\$2.00\$3').replace(/,/g, ', ');
- fs.writeFile('./config/default.json', data.replace(/"prices": \[.*?\],/, '"prices": '+json+','));
- console.log('Saving');
- });
- }
- //Live Trading
- var inTrade = false
- steamTrading.on('tradeProposed', (tradeID, steamID) => {
- if (inTrade) {
- steamTrading.respondToTrade(tradeID, false);
- steamFriends.sendMessage(steamID, 'Sorry! I\'m currently in a trade with someone else!');
- LOG('Someone requested to trade with me while I was trading with someone else.');
- }
- else {
- steamTrading.respondToTrade(tradeID, true);
- LOG('Now in live trade with ' + steamID);
- }
- });
- trade.on('ready', function() {
- trade.ready(function() {
- trade.confirm();
- })
- });
- steamUser.on('tradeStarted', function(steamID) {
- trade.open(steamID);
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement