Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- username = 'username';
- password = 'password';
- var steam = require('steam');
- var steamtrade = require('steam-trade');
- var fs = require('fs');
- var winston = require('winston');
- var readline = require('readline');
- // CSGO AppID = 730
- // TF2 AppID = 440
- var appid = {
- CSGO: 730,
- Steam: 753
- };
- var contextid = {
- CSGO: 2,
- Steam: 6
- }
- var inTrade = false;
- var myBackpack;
- var rl = readline.createInterface({
- input: process.stdin,
- output: process.stdout
- });
- var logger = new (winston.Logger)({
- transports: [
- new (winston.transports.Console)({
- colorize: true,
- level: 'debug'
- }),
- new (winston.transports.File)({
- level: 'info',
- timestamp: true,
- filename: 'crimsonbot.log',
- json: false
- })
- ]
- });
- var client = new steam.SteamClient();
- var trade = new steamtrade();
- if(fs.existsSync('servers.json')) {
- steam.servers = JSON.parse(fs.readFileSync('servers.json'));
- }
- var sentryfile;
- if(fs.existsSync('sentryfile.' + username + '.hash')) {
- sentryfile = fs.readFileSync('sentryfile.' + username + '.hash');
- }
- client.logOn({
- accountName: username,
- password: password,
- shaSentryfile: sentryfile
- });
- client.on('error', function(e) {
- if (e.eresult == steam.EResult.AccountLogonDenied) {
- rl.question('Steam Guard Code: ', function(code) {
- client.logOn({
- accountName: username,
- password: password,
- authCode: code
- });
- });
- } else {
- logger.error('Steam Error: ' + e.eresult);
- }
- });
- client.on('sentry', function(sentry) {
- logger.info('Got new sentry file hash from Steam. Saving.');
- fs.writeFile('sentryfile.' + username + '.hash', sentry);
- });
- client.on('loggedOn', function() {
- logger.info('Logged on to Steam');
- client.setPersonaName("[TradeBot] Mouse");
- client.setPersonaState(steam.EPersonaState.Offline);
- });
- client.on('webSessionID', function(sessionid) {
- trade.sessionID = sessionid;
- client.webLogOn(function(cookie) {
- cookie.forEach(function(part) {
- trade.setCookie(part.trim());
- });
- logger.info('Logged into web');
- // Online or LookingToTrade
- client.setPersonaState(steam.EPersonaState.LookingToTrade);
- });
- });
- client.on('friend', function(steamID, relationship) {
- if (relationship == steam.EFriendRelationship.PendingInvitee) {
- logger.info('[' + steamID + '] Accepted friend request');
- client.addFriend(steamID);
- }
- else if (relationship == steam.EFriendRelationship.None) {
- logger.info('[' + steamID + '] Un-friended');
- }
- });
- client.on('friendMsg', function(steamID, message, type) {
- if (type == steam.EChatEntryType.ChatMsg) {
- logger.info('[' + steamID + '] MSG: ' + message);
- client.sendMessage(steamID, 'Test');
- }
- });
- client.on('tradeProposed', function(tradeID, steamID) {
- if (inTrade) {
- client.respondToTrade(tradeID, false);
- client.sendMessage(steamID, 'Trading with someone else');
- } else {
- client.respondToTrade(tradeID, true);
- logger.info('[' + steamID + '] Accepted trade');
- }
- });
- client.on('sessionStart', function(steamID) {
- inTrade = true;
- client.setPersonaState(steam.EPersonaState.Busy);
- trade.open(steamID, function() {
- trade.loadInventory(appid.CSGO, contextid.CSGO, function(inv) {
- if (!inv) {
- logger.error('Error getting own inventory. Cancelling trade.');
- client.sendMessage(steamID, 'Could not load inventory. Please try again later.');
- trade.cancel(steamID);
- } else {
- logger.debug('Found '+inv.length+' items in inventory.');
- myBackpack = inv;
- onTradeStart(steamID);
- }
- });
- });
- });
- trade.on('chatMsg', function(msg) {
- logger.debug('TradeMsg: '+msg);
- if (req = msg.match(/^!add (\d+) (\d+)/i)) {
- var series = req[1];
- addCrates(series, amount); // Add Items
- } else {
- trade.chatMsg('Use !add <type> <amount>');
- }
- });
- trade.on('ready',function() {
- logger.debug('User clicked ready');
- trade.ready(function() {
- setTimeout(function () {
- trade.confirm(function() {
- logger.debug('Confirming Trade');
- });
- }, 1500);
- });
- });
- trade.on('offerChanged', function(itemAdded, item) {
- if (itemAdded)
- logger.info('User added: '+item.name);
- else
- logger.info('User removed: '+item.name);
- });
- trade.on('unready',function() {
- logger.debug('User clicked unready');
- });
- trade.on('end', function(result, getItems) {
- inTrade = false;
- myBackpack = null;
- client.setPersonaState(steam.EPersonaState.LookingToTrade);
- if (result == 'timeout') {
- logger.warn('Trade timed out');
- client.sendMessage(trade.tradePartnerSteamID, 'The trade timed out');
- } else if (result == 'complete') {
- logger.info('Trade complete');
- } else {
- logger.debug('Trade ended: '+result);
- }
- });
- // Message in Steam Trade Window
- function onTradeStart(steamID) {
- trade.chatMsg('Testing Trade Chat', function() {
- trade.chatMsg('!add <series> <amount>', function() {
- });
- });
- }
- // TF2 Working Item Trade (For Supply Crates requested via Trade Chat window)
- function addCrates(series, amount) {
- // Filter out all the crates
- var pool = myBackpack.filter(function (item) {
- return item.tags.some(function(element, index, array) {
- return element.internal_name == 'Supply Crate';
- });
- });
- // Filter out the series
- var re = new RegExp('#' + series, 'i'); // ex: #82
- pool = pool.filter(function (item) {
- return item.name.match(re);
- });
- // Let the user know we don't have enough
- if (amount > pool.length) {
- logger.debug('User requested '+amount+' of series '+series+'. I only have '+pool.length+' available.');
- trade.chatMsg('I have '+pool.length+' crates of series '+series+' available.');
- }
- // Add what we should to the current trade
- for (var i = 0; i < amount && i < pool.length; i++) {
- logger.debug('Adding '+pool[i].name);
- trade.addItem(pool[i]);
- }
- }
- // Attempt to make TF2 supply crate code work for CSGO Weapon Cases
- /*
- function addCrates(series, amount) {
- // Filter out all the crates
- var pool = myBackpack.filter(function (item) {
- return item.tags.some(function(element, index, array) {
- return element.internal_name == 'Weapon Case';
- });
- });
- // Filter out the series
- var re = new RegExp('Operation' + series, 'i');
- pool = pool.filter(function (item) {
- return item.name.match(re);
- });
- // Let the user know we don't have enough
- if (amount > pool.length) {
- logger.debug('User requested '+amount+' of series '+series+'. I only have '+pool.length+' available.');
- trade.chatMsg('I have '+pool.length+' crates of series '+series+' available.');
- }
- // Add what we should to the current trade
- for (var i = 0; i < amount && i < pool.length; i++) {
- logger.debug('Adding '+pool[i].name);
- trade.addItem(pool[i]);
- }
- }
- /*
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement