Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2018
722
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.17 KB | None | 0 0
  1.  
  2. /*
  3.  
  4.  
  5. -
  6.  
  7.  
  8. */
  9.  
  10. var io = require("socket.io").listen(8303);
  11. var Steam = require("steam");
  12. var SteamUser = require('steam-user');
  13. var TradeOfferManager = require('steam-tradeoffer-manager');
  14. var SteamCommunity = require('steamcommunity');
  15. var SteamTotp = require("steam-totp");
  16. var mysql = require('mysql');
  17. var mysqlConnection = mysql.createConnection({
  18. host: "localhost",
  19. user: "root",
  20. password: "root",
  21. database: "test"
  22. });
  23. var bots = {};
  24. var currentOfferID = 0;
  25. var adminID = 123;
  26. var botItems = [];
  27.  
  28. var func = {
  29. time: function() {
  30. var date = new Date();
  31. var format = '[' + (date.getHours()) + ':' + date.getMinutes() + ':' + date.getSeconds() + ':' + date.getMilliseconds() + ']';
  32. return format;
  33. },
  34. miliSeconds: function() {
  35. return Math.floor(Date.now());
  36. },
  37. msg: function(msg) {
  38. var preparedMsg = this.time() + ' Message: "' + msg + '"';
  39. console.log(preparedMsg);
  40. },
  41. connectMysql: function() {
  42. var _this = this;
  43. _this.msg("Łączenie z Mysql");
  44. mysqlConnection.connect(function(err) {
  45. if (err) {
  46. _this.msg(err);
  47. return;
  48. }
  49. _this.msg("Połączono z Mysql");
  50. _this.loadMysql();
  51. });
  52. },
  53. loadMysql: function() {
  54. var _this = this;
  55. bots = {};
  56. mysqlConnection.query("SELECT * FROM bots", function(err, result) {
  57. if (err) {
  58. _this.msg(err);
  59. return;
  60. } else {
  61. if (result && result[0]) {
  62. for (var i = 0; i < result.length; i++) {
  63. bots[result[i].botID] = {};
  64. bots[result[i].botID].botID = result[i].botID;
  65. bots[result[i].botID].name = result[i].name;
  66. bots[result[i].botID].pass = result[i].pass;
  67. bots[result[i].botID].sharedSecret = result[i].sharedSecret;
  68. bots[result[i].botID].identity_secret = result[i].identity_secret;
  69. bots[result[i].botID].client = new SteamUser();
  70. bots[result[i].botID].manager = new TradeOfferManager({
  71. steam: bots[result[i].botID].client,
  72. language: "en",
  73. pollInterval: 5000,
  74. cancelTime: 900000
  75. });
  76. bots[result[i].botID].community = new SteamCommunity();
  77. bots[result[i].botID].logged = false;
  78. }
  79. _this.msg('Wczytano ' + result.length + ' botów.');
  80. botData.setBot();
  81. } else {
  82. _this.msg('Brak rezultatów');
  83. }
  84. }
  85. });
  86. },
  87. verifyUser: function(steamID, token, callback) {
  88. mysqlConnection.query("SELECT * FROM users WHERE steamID = '" + steamID + "' AND token = '" + token + "'", function(err, result) {
  89. if (err) {
  90. return callback({status: false});
  91. }
  92. if (result && result[0]) {
  93. return callback({status: true, user: result[0]});
  94. }
  95. return callback({status: false});
  96. });
  97. }
  98. }
  99.  
  100.  
  101. var botData = {
  102. setBot: function(){
  103. for(var i in bots){
  104. let _this = i;
  105. bots[_this].client.logOn({
  106. accountName: bots[_this].name,
  107. password: bots[_this].pass,
  108. twoFactorCode: SteamTotp.getAuthCode(bots[_this].sharedSecret)
  109. });
  110. bots[_this].client.on('loggedOn', function(details, parental) {
  111. bots[_this].logged = true;
  112. func.msg("Zalogowano ze SteamID: " + bots[_this].client.steamID.getSteamID64());
  113. bots[_this].client.setPersona(SteamUser.Steam.EPersonaState.Online);
  114. });
  115. bots[_this].client.on('webSession', function(sessionID, cookies) {
  116. bots[_this].manager.setCookies(cookies, function(err) {
  117. if (err) {
  118. func.msg(err);
  119. return;
  120. }
  121. func.msg("Got API key: " + bots[_this].manager.apiKey);
  122. });
  123. bots[_this].community.setCookies(cookies);
  124. botData.loadInventory(_this);
  125. });
  126. bots[_this].manager.on('newOffer', function(offer) {
  127. func.msg("Oferta od użytkownika: " + offer.partner.getSteamID64() + " zostanie odrzucona.");
  128. offer.decline(function(err) {
  129. if (err) {
  130. func.msg("Nie można odrzucić oferty!" + err);
  131. } else {
  132. func.msg("Oferta odrzucona!");
  133. }
  134. });
  135. });
  136. bots[_this].manager.on('sentOfferChanged', function(offer, oldState) {
  137. func.msg("Oferta #"+offer.id+" zmieniła status z: "+TradeOfferManager.ETradeOfferState[oldState]+" na: "+TradeOfferManager.ETradeOfferState[offer.state]);
  138. if (offer.state == TradeOfferManager.ETradeOfferState.Accepted) {
  139. mysqlConnection.query("UPDATE trades SET offerstatus = '"+TradeOfferManager.ETradeOfferState[offer.state]+"' WHERE offerID = "+offer.id+"",function (err, result) {});
  140. offer.getExchangeDetails((err, status, receivedItems) => {
  141. if (err) {
  142. func.msg(err);
  143. return;
  144. }
  145. var _thisList = [];
  146. for(var i = 0; i < receivedItems.length; i++){
  147. botItems[receivedItems[i].assetid].status = 0; // Sold musi usuwać
  148. _thisList.push(receivedItems[i].assetid);
  149. }
  150. io.emit("itemsAction", {
  151. type: 0,
  152. list: _thisList
  153. });
  154. })
  155. }
  156. else if(TradeOfferManager.ETradeOfferState[offer.state] != 'Active'){
  157. mysqlConnection.query("UPDATE trades SET offerstatus = '"+TradeOfferManager.ETradeOfferState[offer.state]+"' WHERE offerID = "+offer.id+"",function (err, result) {});
  158. mysqlConnection.query("SELECT userID, fromWallet FROM trades WHERE offerID = '" + offer.id + "'", function(err, result) {
  159. if (result && result[0]) {
  160. mysqlConnection.query("UPDATE users SET balance = balance + "+result[0].fromWallet+" WHERE steamID = "+result[0].userID+"",function (err, result) {});
  161. }
  162. });
  163. }
  164. });
  165. }
  166. },
  167. loadInventory: function(botID){
  168. bots[botID].manager.loadInventory(730, 2, true, function(err, inventory) {
  169. if(err){
  170. func.msg(err);
  171. return;
  172. }
  173. for (var i = 0; i < inventory.length; i++) {
  174. var _this = {
  175. assetid: inventory[i].assetid,
  176. contextid: inventory[i].contextid,
  177. icon_url: inventory[i].icon_url,
  178. name: inventory[i].name,
  179. market_hash_name: inventory[i].market_hash_name,
  180. appid: inventory[i].appid,
  181. name: inventory[i].name,
  182. price: 1,
  183. botID: botID,
  184. status: 1
  185. }
  186. botItems[inventory[i].assetid] = _this;
  187. }
  188. func.msg("Wczytano itemów: "+inventory.length);
  189. });
  190. },
  191. offerNewID: function(){
  192. currentOfferID += 1;
  193. return currentOfferID;
  194. },
  195. loadUserInventory: function(botID, steamID, callback) {
  196. bots[botID].manager.loadUserInventory(steamID, 730, 2, true, function(err, inventory) {
  197. if (err) {
  198. func.msg("[" + botID + "] Error load inv: " + err);
  199. return callback({status: false});
  200. } else {
  201. return callback({status: true, items: inventory});
  202. }
  203. })
  204. },
  205. checkOffer: function(user, items, socket){
  206. try {
  207. var isset = items.bot.length;
  208. isset = items.user.length;
  209. }
  210. catch(err) {
  211. return;
  212. }
  213. func.msg('Oferta od użytkownika: '+user.steamID);
  214. var _this = this;
  215. var _offer = {
  216. user: {
  217. items: [],
  218. price: 0
  219. },
  220. bot: {
  221. items: [],
  222. botID: 0,
  223. price: 0
  224. },
  225. balance: 0,
  226. fromWallet: 0,
  227. uniqueID: _this.offerNewID(),
  228. time: func.miliSeconds()
  229. };
  230. if(user.tradeUrl == ''){
  231. func.msg("Wprowadź prawidłowy trade-url");
  232. socket.emit("offerStatus", {
  233. type: 0,
  234. msg: 'Wprowadź prawidłowy trade-url'
  235. });
  236. return;
  237. }
  238. for(var i = 0; i < items.bot.length; i++){
  239. if(botItems[items.bot[i]]){
  240. if(botItems[items.bot[i]].status == 1 && botItems[items.bot[i]].price > 0){ // dostępny
  241. if(_offer.bot.botID == 0){
  242. _offer.bot.botID = botItems[items.bot[i]].botID;
  243. }
  244. if(_offer.bot.botID != botItems[items.bot[i]].botID){
  245. func.msg("Ity od kilku botów.");
  246. socket.emit("offerStatus", {
  247. type: 0,
  248. msg: 'Ity od kilku botów'
  249. });
  250. return;
  251. }
  252. _offer.bot.items.push(botItems[items.bot[i]]);
  253. _offer.bot.price += botItems[items.bot[i]].price;
  254. }
  255. else
  256. {
  257. func.msg("Nie których przedmiotów nie można wymienić");
  258. console.log(botItems[items.bot[i]]);
  259. socket.emit("offerStatus", {
  260. type: 0,
  261. msg: 'Nie których przedmiotów nie można wymienić.'
  262. });
  263. return;
  264. }
  265. }
  266. else
  267. {
  268. func.msg("Brak: "+items.bot[i]);
  269. socket.emit("offerStatus", {
  270. type: 0,
  271. msg: 'Nie posiadamy takiego przedmiotu.'
  272. });
  273. return;
  274. }
  275. }
  276. var _thisList = [];
  277. for(var i = 0; i < _offer.bot.items.length; i++){
  278. botItems[_offer.bot.items[i].assetid].status = 2; // rezerwuje
  279. _thisList.push(_offer.bot.items[i].assetid);
  280. }
  281. io.emit("itemsAction", {
  282. type: 2,
  283. list: _thisList
  284. });
  285. _this.loadUserInventory(_offer.bot.botID, user.steamID, function(invResult) {
  286. if(invResult.status == false){
  287. for(var i = 0; i < _offer.bot.items.length; i++){
  288. botItems[_offer.bot.items[i].assetid].status = 1; // Odrezerwowuje
  289. }
  290. io.emit("itemsAction", {
  291. type: 1,
  292. list: _thisList
  293. });
  294. func.msg("Błąd przy pobieraniu ekwipunku, spróbuj ponownie później.");
  295. socket.emit("offerStatus", {
  296. type: 0,
  297. msg: 'Błąd przy pobieraniu ekwipunku, spróbuj ponownie później.'
  298. });
  299. return;
  300. }
  301. var userItems = invResult.items;
  302. for(var i = 0; i < items.user.length; i++){
  303. for(var w = 0; w < userItems.length; w++){
  304. if(items.user[i] == userItems[w].id) {
  305. _offer.user.push(userItems[items.user[i]]);
  306. _offer.user.price += func.getItemPrice(userItems[items.user[i]].market_hash_name);
  307. break;
  308. }
  309. }
  310. }
  311. if(items.user.length == _offer.user.items.length && items.bot.length == _offer.bot.items.length){
  312. _offer.balance = _offer.user.price - _offer.bot.price;
  313. if(_offer.balance < 0){
  314. _offer.fromWallet = _offer.balance*(-1);
  315. }
  316. if(_offer.balance < 0 && user.balance <= _offer.fromWallet){
  317. for(var i = 0; i < _offer.bot.items.length; i++){
  318. botItems[_offer.bot.items[i].assetid].status = 1; // Odrezerwowuje
  319. }
  320. io.emit("itemsAction", {
  321. type: 1,
  322. list: _thisList
  323. });
  324. func.msg("Items bot > items user.");
  325. socket.emit("offerStatus", {
  326. type: 0,
  327. msg: 'Items bot > items user.'
  328. });
  329. return;
  330. }
  331. if(_offer.fromWallet >= 0)
  332. {
  333. func.msg('Pobiera z portfela: '+_offer.fromWallet);
  334. mysqlConnection.query("UPDATE users SET balance = balance - "+_offer.fromWallet+" WHERE steamID = "+user.steamID+"",function (err, result) {});
  335. }
  336. 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){
  337. if(err){
  338. mysqlConnection.query("UPDATE users SET balance = balance + "+_offer.fromWallet+" WHERE steamID = "+user.steamID+"",function (err, result) {});
  339. for(var i = 0; i < _offer.bot.items.length; i++){
  340. botItems[_offer.bot.items[i].assetid].status = 1; // Odrezerwowuje
  341. }
  342. io.emit("itemsAction", {
  343. type: 1,
  344. list: _thisList
  345. });
  346. func.msg("Błąd przy wysyłaniu | zapis");
  347. socket.emit("offerStatus", {
  348. type: 0,
  349. msg: 'Błąd przy wysyłaniu.'
  350. });
  351. return;
  352. }
  353. var thisOfferSend = bots[_offer.bot.botID].manager.createOffer(user.tradeUrl);
  354. thisOfferSend.addMyItems(_offer.bot.items);
  355. thisOfferSend.addTheirItems(_offer.user.items);
  356. thisOfferSend.setMessage('Trade #'+_offer.uniqueID);
  357. thisOfferSend.send(function(err, status) {
  358. if (err) {
  359. mysqlConnection.query("UPDATE users SET balance = balance + "+_offer.fromWallet+" WHERE steamID = "+user.steamID+"",function (err, result) {});
  360. mysqlConnection.query("UPDATE trades SET offerstatus = 'error' WHERE uniqueID = "+_offer.uniqueID+"",function (err, result) {});
  361. func.msg('Błąd przy wysyłaniu.');
  362. for(var i = 0; i < _offer.bot.items.length; i++){
  363. botItems[_offer.bot.items[i].assetid].status = 1; // Odrezerwowuje
  364. }
  365. io.emit("itemsAction", {
  366. type: 1,
  367. list: _thisList
  368. });
  369. func.msg("Błąd przy wysyłaniu");
  370. socket.emit("offerStatus", {
  371. type: 0,
  372. msg: 'Błąd przy wysyłaniu.'
  373. });
  374. return;
  375. }
  376. if (status == 'pending') {
  377. func.msg("Offer "+thisOfferSend.id+" sent, but requires confirmation");
  378. bots[_offer.bot.botID].community.acceptConfirmationForObject(bots[_offer.bot.botID].identity_secret, thisOfferSend.id, function(err) {
  379. if (err) {
  380. func.msg('Błąd przy potwierdzaniu mobilnym.');
  381. socket.emit("offerStatus", {
  382. type: 1,
  383. msg: 'Błąd przy potwierdzaniu mobilnym.',
  384. offerID: thisOfferSend.id
  385. });
  386. return;
  387. } else {
  388. mysqlConnection.query("UPDATE trades SET offerstatus = 'send', offerID = '"+thisOfferSend.id+"' WHERE uniqueID = "+_offer.uniqueID+"",function (err, result) {});
  389. func.msg('Oferta wysłana.');
  390. socket.emit("offerStatus", {
  391. type: 1,
  392. msg: 'Oferta wysłana.',
  393. offerID: thisOfferSend.id
  394. });
  395. return;
  396. }
  397. });
  398. }
  399. else {
  400. mysqlConnection.query("UPDATE trades SET offerstatus = 'send', offerID = '"+thisOfferSend.id+"' WHERE uniqueID = "+_offer.uniqueID+"",function (err, result) {});
  401. func.msg('Oferta wysłana.');
  402. socket.emit("offerStatus", {
  403. type: 1,
  404. msg: 'Oferta wysłana.',
  405. offerID: thisOfferSend.id
  406. });
  407. return;
  408. }
  409. });
  410. })
  411. }
  412. else
  413. {
  414. for(var i = 0; i < _offer.bot.items.length; i++){
  415. botItems[_offer.bot.items[i].assetid].status = 1; // Odrezerwowuje
  416. }
  417. io.emit("itemsAction", {
  418. type: 1,
  419. list: _thisList
  420. });
  421. func.msg("Other other");
  422. socket.emit("offerStatus", {
  423. type: 0,
  424. msg: 'other other'
  425. });
  426. return;
  427. }
  428. })
  429. }
  430. }
  431.  
  432. io.sockets.on("connection", function(socket) {
  433. console.log(socket.id);
  434. socket.on("disconnect", function(socket) {
  435.  
  436. });
  437. socket.on('createOffer', function(data) {
  438. if (!data || !data.steamID || !data.token || !data.items || data.steamID.length != 17) {
  439. return;
  440. }
  441. func.verifyUser(data.steamID, data.token, function(verify) {
  442. if (verify.status) {
  443. botData.checkOffer(verify.user, data.items, socket);
  444. }
  445. });
  446. });
  447. socket.on('saveUrl', function(data) {
  448. if (!data || !data.steamID || !data.token || !data.link || data.steamID.length != 17) {
  449. return;
  450. }
  451. if(1 == 2){ // Sprawdza czy link == valid
  452. socket.emit("tradeUrl", {
  453. type: 0,
  454. msg: 'Error'
  455. });
  456. return;
  457. }
  458. func.verifyUser(data.steamID, data.token, function(verify) {
  459. if (verify.status) {
  460. mysqlConnection.query("UPDATE users SET tradeUrl = '"+data.link+"' WHERE steamID = '"+data.steamID+"'",function (err, result) {
  461. if(err){
  462. socket.emit("tradeUrl", {
  463. type: 0,
  464. msg: 'Error'
  465. });
  466. return;
  467. }
  468. socket.emit("tradeUrl", {
  469. type: 0,
  470. msg: 'Success'
  471. });
  472. });
  473. }
  474. });
  475. });
  476. });
  477. func.connectMysql();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement