|
var vapor = require('vapor'); |
|
var winston = require('vapor-winston-logger'); |
|
var TradeOfferManager = require('steam-tradeoffer-manager'); |
|
|
|
var bot = vapor(); |
|
|
|
bot.init({ |
|
username: process.env.VAPOR_USER, |
|
password: process.env.VAPOR_PASS, |
|
admins: [ process.env.VAPOR_ADMIN ], |
|
displayName: 'Vapor Tester' |
|
}); |
|
|
|
bot.use(winston, {fileLevel: 'debug'}); |
|
bot.use(vapor.plugins.fs, 'data3'); |
|
bot.use(vapor.plugins.essentials); |
|
bot.use(vapor.plugins.stdinSteamGuard); |
|
|
|
bot.use({ |
|
name: 'tradeoffer-manager', |
|
plugin: function(API) { |
|
var log = API.getLogger(); |
|
var utils = API.getUtils(); |
|
var Steam = API.getSteam(); |
|
var steamUser = API.getHandler('steamUser'); |
|
|
|
var manager = new TradeOfferManager({ |
|
steam: steamUser, |
|
language: 'en' |
|
}); |
|
|
|
// Setup |
|
API.registerHandler({ |
|
emitter: 'vapor', |
|
event: 'cookies' |
|
}, function(cookies) { |
|
manager.setCookies(cookies, function(err) { |
|
if(err) { |
|
log.warn('Failed to retrieve API key.'); |
|
} else { |
|
log.info('API key has been retrieved.'); |
|
} |
|
}); |
|
}); |
|
|
|
// Intercept chat messages |
|
API.registerHandler({ |
|
emitter: 'steamFriends', |
|
event: 'friendMsg' |
|
}, function(user, message, type) { |
|
if(utils.isAdmin(user) && type === Steam.EChatEntryType.ChatMsg) { |
|
if(message === 'send') { |
|
// This kills the cookies |
|
API.disconnect(); |
|
log.info('Brb in 5 seconds...'); |
|
|
|
setTimeout(function() { |
|
log.info('Sending a trade offer now...'); |
|
|
|
var offer = manager.createOffer(user); |
|
|
|
manager.loadInventory(440, 2, true, function(err, myItems) { |
|
if(err) { |
|
log.error(err); |
|
return; |
|
} |
|
|
|
offer.addMyItem(myItems[0]); |
|
offer.send('This will fail', function(error, status) { |
|
if(error) { |
|
log.error(error); |
|
} else { |
|
log.info(status); |
|
} |
|
}); |
|
}); |
|
}, 5000); |
|
} else if(message === 'dc') { |
|
// This kills the cookies |
|
API.disconnect(); |
|
} |
|
} |
|
}); |
|
|
|
// Manager events |
|
manager.on('newOffer', function(offer) { |
|
var sid = offer.partner.getSteamID64(); |
|
var user = utils.getUserDescription(sid); |
|
|
|
log.info('New offer #%s from %s.', offer.id, user); |
|
|
|
if(utils.isAdmin(sid)) { |
|
offer.accept(function(error) { |
|
if(error) { |
|
if(error.cause) { |
|
log.warn('Trade offer cannot be accepted. Reason: %s', error.cause); |
|
} else { |
|
// If we are disconnected, this WILL happen... |
|
log.warn(error); |
|
log.warn('Trade offer has not been accepted. I\'ll keep retrying...'); |
|
} |
|
} else { |
|
log.info('Trade offer has been accepted successfully.'); |
|
} |
|
}); |
|
} |
|
}); |
|
|
|
} |
|
}); |
|
|
|
bot.connect(); |
|
|
|
process.on('SIGINT', function() { |
|
bot.disconnect(); |
|
setTimeout(process.exit, 1000, 0); |
|
}); |