Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- -
- */
- var io = require("socket.io").listen(8303);
- var Steam = require("steam");
- var SteamUser = require('steam-user');
- var TradeOfferManager = require('steam-tradeoffer-manager');
- var SteamCommunity = require('steamcommunity');
- var SteamTotp = require("steam-totp");
- var mysql = require('mysql');
- var mysqlConnection = mysql.createConnection({
- host: "localhost",
- user: "root",
- password: "root",
- database: "test"
- });
- var bots = {};
- var currentOfferID = 0;
- var adminID = 123;
- var botItems = [];
- var func = {
- time: function() {
- var date = new Date();
- var format = '[' + (date.getHours()) + ':' + date.getMinutes() + ':' + date.getSeconds() + ':' + date.getMilliseconds() + ']';
- return format;
- },
- miliSeconds: function() {
- return Math.floor(Date.now());
- },
- msg: function(msg) {
- var preparedMsg = this.time() + ' Message: "' + msg + '"';
- console.log(preparedMsg);
- },
- connectMysql: function() {
- var _this = this;
- _this.msg("Łączenie z Mysql");
- mysqlConnection.connect(function(err) {
- if (err) {
- _this.msg(err);
- return;
- }
- _this.msg("Połączono z Mysql");
- _this.loadMysql();
- });
- },
- loadMysql: function() {
- var _this = this;
- bots = {};
- mysqlConnection.query("SELECT * FROM bots", function(err, result) {
- if (err) {
- _this.msg(err);
- return;
- } else {
- if (result && result[0]) {
- for (var i = 0; i < result.length; i++) {
- bots[result[i].botID] = {};
- bots[result[i].botID].botID = result[i].botID;
- bots[result[i].botID].name = result[i].name;
- bots[result[i].botID].pass = result[i].pass;
- bots[result[i].botID].sharedSecret = result[i].sharedSecret;
- bots[result[i].botID].identity_secret = result[i].identity_secret;
- bots[result[i].botID].client = new SteamUser();
- bots[result[i].botID].manager = new TradeOfferManager({
- steam: bots[result[i].botID].client,
- language: "en",
- pollInterval: 5000,
- cancelTime: 900000
- });
- bots[result[i].botID].community = new SteamCommunity();
- bots[result[i].botID].logged = false;
- }
- _this.msg('Wczytano ' + result.length + ' botów.');
- botData.setBot();
- } else {
- _this.msg('Brak rezultatów');
- }
- }
- });
- },
- verifyUser: function(steamID, token, callback) {
- mysqlConnection.query("SELECT * FROM users WHERE steamID = '" + steamID + "' AND token = '" + token + "'", function(err, result) {
- if (err) {
- return callback({status: false});
- }
- if (result && result[0]) {
- return callback({status: true, user: result[0]});
- }
- return callback({status: false});
- });
- }
- }
- var botData = {
- setBot: function(){
- for(var i in bots){
- let _this = i;
- bots[_this].client.logOn({
- accountName: bots[_this].name,
- password: bots[_this].pass,
- twoFactorCode: SteamTotp.getAuthCode(bots[_this].sharedSecret)
- });
- bots[_this].client.on('loggedOn', function(details, parental) {
- bots[_this].logged = true;
- func.msg("Zalogowano ze SteamID: " + bots[_this].client.steamID.getSteamID64());
- bots[_this].client.setPersona(SteamUser.Steam.EPersonaState.Online);
- });
- bots[_this].client.on('webSession', function(sessionID, cookies) {
- bots[_this].manager.setCookies(cookies, function(err) {
- if (err) {
- func.msg(err);
- return;
- }
- func.msg("Got API key: " + bots[_this].manager.apiKey);
- });
- bots[_this].community.setCookies(cookies);
- botData.loadInventory(_this);
- });
- bots[_this].manager.on('newOffer', function(offer) {
- func.msg("Oferta od użytkownika: " + offer.partner.getSteamID64() + " zostanie odrzucona.");
- offer.decline(function(err) {
- if (err) {
- func.msg("Nie można odrzucić oferty!" + err);
- } else {
- func.msg("Oferta odrzucona!");
- }
- });
- });
- bots[_this].manager.on('sentOfferChanged', function(offer, oldState) {
- func.msg("Oferta #"+offer.id+" zmieniła status z: "+TradeOfferManager.ETradeOfferState[oldState]+" na: "+TradeOfferManager.ETradeOfferState[offer.state]);
- if (offer.state == TradeOfferManager.ETradeOfferState.Accepted) {
- mysqlConnection.query("UPDATE trades SET offerstatus = '"+TradeOfferManager.ETradeOfferState[offer.state]+"' WHERE offerID = "+offer.id+"",function (err, result) {});
- offer.getExchangeDetails((err, status, receivedItems) => {
- if (err) {
- func.msg(err);
- return;
- }
- var _thisList = [];
- for(var i = 0; i < receivedItems.length; i++){
- botItems[receivedItems[i].assetid].status = 0; // Sold musi usuwać
- _thisList.push(receivedItems[i].assetid);
- }
- io.emit("itemsAction", {
- type: 0,
- list: _thisList
- });
- })
- }
- else if(TradeOfferManager.ETradeOfferState[offer.state] != 'Active'){
- mysqlConnection.query("UPDATE trades SET offerstatus = '"+TradeOfferManager.ETradeOfferState[offer.state]+"' WHERE offerID = "+offer.id+"",function (err, result) {});
- mysqlConnection.query("SELECT userID, fromWallet FROM trades WHERE offerID = '" + offer.id + "'", function(err, result) {
- if (result && result[0]) {
- mysqlConnection.query("UPDATE users SET balance = balance + "+result[0].fromWallet+" WHERE steamID = "+result[0].userID+"",function (err, result) {});
- }
- });
- }
- });
- }
- },
- loadInventory: function(botID){
- bots[botID].manager.loadInventory(730, 2, true, function(err, inventory) {
- if(err){
- func.msg(err);
- return;
- }
- for (var i = 0; i < inventory.length; i++) {
- var _this = {
- assetid: inventory[i].assetid,
- contextid: inventory[i].contextid,
- icon_url: inventory[i].icon_url,
- name: inventory[i].name,
- market_hash_name: inventory[i].market_hash_name,
- appid: inventory[i].appid,
- name: inventory[i].name,
- price: 1,
- botID: botID,
- status: 1
- }
- botItems[inventory[i].assetid] = _this;
- }
- func.msg("Wczytano itemów: "+inventory.length);
- });
- },
- offerNewID: function(){
- currentOfferID += 1;
- return currentOfferID;
- },
- loadUserInventory: function(botID, steamID, callback) {
- bots[botID].manager.loadUserInventory(steamID, 730, 2, true, function(err, inventory) {
- if (err) {
- func.msg("[" + botID + "] Error load inv: " + err);
- return callback({status: false});
- } else {
- return callback({status: true, items: inventory});
- }
- })
- },
- checkOffer: function(user, items, socket){
- try {
- var isset = items.bot.length;
- isset = items.user.length;
- }
- catch(err) {
- return;
- }
- func.msg('Oferta od użytkownika: '+user.steamID);
- var _this = this;
- var _offer = {
- user: {
- items: [],
- price: 0
- },
- bot: {
- items: [],
- botID: 0,
- price: 0
- },
- balance: 0,
- fromWallet: 0,
- uniqueID: _this.offerNewID(),
- time: func.miliSeconds()
- };
- if(user.tradeUrl == ''){
- func.msg("Wprowadź prawidłowy trade-url");
- socket.emit("offerStatus", {
- type: 0,
- msg: 'Wprowadź prawidłowy trade-url'
- });
- return;
- }
- for(var i = 0; i < items.bot.length; i++){
- if(botItems[items.bot[i]]){
- if(botItems[items.bot[i]].status == 1 && botItems[items.bot[i]].price > 0){ // dostępny
- if(_offer.bot.botID == 0){
- _offer.bot.botID = botItems[items.bot[i]].botID;
- }
- if(_offer.bot.botID != botItems[items.bot[i]].botID){
- func.msg("Ity od kilku botów.");
- socket.emit("offerStatus", {
- type: 0,
- msg: 'Ity od kilku botów'
- });
- return;
- }
- _offer.bot.items.push(botItems[items.bot[i]]);
- _offer.bot.price += botItems[items.bot[i]].price;
- }
- else
- {
- func.msg("Nie których przedmiotów nie można wymienić");
- console.log(botItems[items.bot[i]]);
- socket.emit("offerStatus", {
- type: 0,
- msg: 'Nie których przedmiotów nie można wymienić.'
- });
- return;
- }
- }
- else
- {
- func.msg("Brak: "+items.bot[i]);
- socket.emit("offerStatus", {
- type: 0,
- msg: 'Nie posiadamy takiego przedmiotu.'
- });
- return;
- }
- }
- var _thisList = [];
- for(var i = 0; i < _offer.bot.items.length; i++){
- botItems[_offer.bot.items[i].assetid].status = 2; // rezerwuje
- _thisList.push(_offer.bot.items[i].assetid);
- }
- io.emit("itemsAction", {
- type: 2,
- list: _thisList
- });
- _this.loadUserInventory(_offer.bot.botID, user.steamID, function(invResult) {
- if(invResult.status == false){
- for(var i = 0; i < _offer.bot.items.length; i++){
- botItems[_offer.bot.items[i].assetid].status = 1; // Odrezerwowuje
- }
- io.emit("itemsAction", {
- type: 1,
- list: _thisList
- });
- func.msg("Błąd przy pobieraniu ekwipunku, spróbuj ponownie później.");
- socket.emit("offerStatus", {
- type: 0,
- msg: 'Błąd przy pobieraniu ekwipunku, spróbuj ponownie później.'
- });
- return;
- }
- var userItems = invResult.items;
- for(var i = 0; i < items.user.length; i++){
- for(var w = 0; w < userItems.length; w++){
- if(items.user[i] == userItems[w].id) {
- _offer.user.push(userItems[items.user[i]]);
- _offer.user.price += func.getItemPrice(userItems[items.user[i]].market_hash_name);
- break;
- }
- }
- }
- if(items.user.length == _offer.user.items.length && items.bot.length == _offer.bot.items.length){
- _offer.balance = _offer.user.price - _offer.bot.price;
- if(_offer.balance < 0){
- _offer.fromWallet = _offer.balance*(-1);
- }
- if(_offer.balance < 0 && user.balance <= _offer.fromWallet){
- for(var i = 0; i < _offer.bot.items.length; i++){
- botItems[_offer.bot.items[i].assetid].status = 1; // Odrezerwowuje
- }
- io.emit("itemsAction", {
- type: 1,
- list: _thisList
- });
- func.msg("Items bot > items user.");
- socket.emit("offerStatus", {
- type: 0,
- msg: 'Items bot > items user.'
- });
- return;
- }
- if(_offer.fromWallet >= 0)
- {
- func.msg('Pobiera z portfela: '+_offer.fromWallet);
- mysqlConnection.query("UPDATE users SET balance = balance - "+_offer.fromWallet+" WHERE steamID = "+user.steamID+"",function (err, result) {});
- }
- mysqlConnection.query("INSERT INTO trades (uniqueID, userID, botID, time, userItems, botItems, fromWallet, offerID, offerstatus) VALUES ('"+_offer.uniqueID+"','"+user.steamID+"','"+_offer.bot.botID+"','"+_offer.time+"','"+JSON.stringify(_offer.user.items)+"','"+JSON.stringify(_offer.bot.items)+"','"+_offer.fromWallet+"','', 'awaiting')", function (err, result){
- if(err){
- mysqlConnection.query("UPDATE users SET balance = balance + "+_offer.fromWallet+" WHERE steamID = "+user.steamID+"",function (err, result) {});
- for(var i = 0; i < _offer.bot.items.length; i++){
- botItems[_offer.bot.items[i].assetid].status = 1; // Odrezerwowuje
- }
- io.emit("itemsAction", {
- type: 1,
- list: _thisList
- });
- func.msg("Błąd przy wysyłaniu | zapis");
- socket.emit("offerStatus", {
- type: 0,
- msg: 'Błąd przy wysyłaniu.'
- });
- return;
- }
- var thisOfferSend = bots[_offer.bot.botID].manager.createOffer(user.tradeUrl);
- thisOfferSend.addMyItems(_offer.bot.items);
- thisOfferSend.addTheirItems(_offer.user.items);
- thisOfferSend.setMessage('Trade #'+_offer.uniqueID);
- thisOfferSend.send(function(err, status) {
- if (err) {
- mysqlConnection.query("UPDATE users SET balance = balance + "+_offer.fromWallet+" WHERE steamID = "+user.steamID+"",function (err, result) {});
- mysqlConnection.query("UPDATE trades SET offerstatus = 'error' WHERE uniqueID = "+_offer.uniqueID+"",function (err, result) {});
- func.msg('Błąd przy wysyłaniu.');
- for(var i = 0; i < _offer.bot.items.length; i++){
- botItems[_offer.bot.items[i].assetid].status = 1; // Odrezerwowuje
- }
- io.emit("itemsAction", {
- type: 1,
- list: _thisList
- });
- func.msg("Błąd przy wysyłaniu");
- socket.emit("offerStatus", {
- type: 0,
- msg: 'Błąd przy wysyłaniu.'
- });
- return;
- }
- if (status == 'pending') {
- func.msg("Offer "+thisOfferSend.id+" sent, but requires confirmation");
- bots[_offer.bot.botID].community.acceptConfirmationForObject(bots[_offer.bot.botID].identity_secret, thisOfferSend.id, function(err) {
- if (err) {
- func.msg('Błąd przy potwierdzaniu mobilnym.');
- socket.emit("offerStatus", {
- type: 1,
- msg: 'Błąd przy potwierdzaniu mobilnym.',
- offerID: thisOfferSend.id
- });
- return;
- } else {
- mysqlConnection.query("UPDATE trades SET offerstatus = 'send', offerID = '"+thisOfferSend.id+"' WHERE uniqueID = "+_offer.uniqueID+"",function (err, result) {});
- func.msg('Oferta wysłana.');
- socket.emit("offerStatus", {
- type: 1,
- msg: 'Oferta wysłana.',
- offerID: thisOfferSend.id
- });
- return;
- }
- });
- }
- else {
- mysqlConnection.query("UPDATE trades SET offerstatus = 'send', offerID = '"+thisOfferSend.id+"' WHERE uniqueID = "+_offer.uniqueID+"",function (err, result) {});
- func.msg('Oferta wysłana.');
- socket.emit("offerStatus", {
- type: 1,
- msg: 'Oferta wysłana.',
- offerID: thisOfferSend.id
- });
- return;
- }
- });
- })
- }
- else
- {
- for(var i = 0; i < _offer.bot.items.length; i++){
- botItems[_offer.bot.items[i].assetid].status = 1; // Odrezerwowuje
- }
- io.emit("itemsAction", {
- type: 1,
- list: _thisList
- });
- func.msg("Other other");
- socket.emit("offerStatus", {
- type: 0,
- msg: 'other other'
- });
- return;
- }
- })
- }
- }
- io.sockets.on("connection", function(socket) {
- console.log(socket.id);
- socket.on("disconnect", function(socket) {
- });
- socket.on('createOffer', function(data) {
- if (!data || !data.steamID || !data.token || !data.items || data.steamID.length != 17) {
- return;
- }
- func.verifyUser(data.steamID, data.token, function(verify) {
- if (verify.status) {
- botData.checkOffer(verify.user, data.items, socket);
- }
- });
- });
- socket.on('saveUrl', function(data) {
- if (!data || !data.steamID || !data.token || !data.link || data.steamID.length != 17) {
- return;
- }
- if(1 == 2){ // Sprawdza czy link == valid
- socket.emit("tradeUrl", {
- type: 0,
- msg: 'Error'
- });
- return;
- }
- func.verifyUser(data.steamID, data.token, function(verify) {
- if (verify.status) {
- mysqlConnection.query("UPDATE users SET tradeUrl = '"+data.link+"' WHERE steamID = '"+data.steamID+"'",function (err, result) {
- if(err){
- socket.emit("tradeUrl", {
- type: 0,
- msg: 'Error'
- });
- return;
- }
- socket.emit("tradeUrl", {
- type: 0,
- msg: 'Success'
- });
- });
- }
- });
- });
- });
- func.connectMysql();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement