Advertisement
Guest User

Untitled

a guest
Oct 16th, 2016
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.22 KB | None | 0 0
  1. /*
  2. __ _________ ________ ____ _____ _
  3. \ \ / / ____\ \ / / ____| _ \ | __ \| |
  4. \ \_/ / | __ \ \ /\ / /| |__ | |_) || |__) | |
  5. \ /| | |_ | \ \/ \/ / | __| | _ < | ___/| |
  6. | | | |__| | \ /\ / | |____| |_) || | | |____
  7. |_| \_____| \/ \/ |______|____(_)_| |______|
  8.  
  9. */
  10. var SteamTotp = require('steam-totp');
  11. var Steam = require('steam');
  12. var SteamTradeOffers = require('steam-tradeoffers');
  13. var request = require("request");
  14. var SteamConfirm = require('steamcommunity-mobile-confirmations');
  15. var mysql = require('mysql');
  16. var io = require('socket.io')(9182);
  17. require('events').EventEmitter.defaultMaxListeners = Infinity;
  18. /*
  19. Konfiguracja skryptu
  20. */
  21. var admin = '76561198084673749'; // SteamID64 administratora
  22. var botsteamid = '76561198096932160'; // SteamID64 bota
  23. var shared_secret ='x='; // Shared secret konta bota
  24. var identity_secret='x='; // Identity secret konta bota
  25. var pooling_interval = 100000; // Częstotliwość akceptowania wymian w ms (10000ms to 10s)
  26. var apik = 'x'; // APIKey Steam konta bota -> http://steamcommunity.com/dev/apikey
  27. var sitename = 'ygpot.com'; // Adres strony WWW bez protokołu (np. ygpot.com)
  28. var GameTime = 90; // Czas trwania rundy
  29. //var souvenir = 1; // Przedmioty pamiątki (0 - nie, 1 - tak)
  30. var logOnOptions = {
  31. accountName: 'x', // Login steam do konta bota
  32. password: 'x', // Hasło steam do konta bota
  33. twoFactorCode: SteamTotp.generateAuthCode(shared_secret) // Generowanie mobilnego tokenu
  34. }
  35. var mysqlInfo = {
  36. host : 'localhost', // Host bazy danych
  37. user : 'x', // Nazwa użytkownika bazy danych
  38. password : 'x', // Hasło do bazy danych
  39. database : 'x', // Nazwa bazy danych
  40. charset : 'utf8_general_ci' // Kodowanie bazy danych
  41. };
  42. /*
  43. Koniec konfiguracji skryptu
  44.  
  45. Edycja poniższego kodu wiąże się z utratą pomocy technicznej na skrypt
  46. */
  47. function getDateTime() {
  48. var date = new Date();
  49. var hour = date.getHours();
  50. hour = (hour < 10 ? "0" : "") + hour;
  51. var min = date.getMinutes();
  52. min = (min < 10 ? "0" : "") + min;
  53. var sec = date.getSeconds();
  54. sec = (sec < 10 ? "0" : "") + sec;
  55. var year = date.getFullYear();
  56. var month = date.getMonth() + 1;
  57. month = (month < 10 ? "0" : "") + month;
  58. var day = date.getDate();
  59. day = (day < 10 ? "0" : "") + day;
  60. return year + ":" + month + ":" + day + ":" + hour + ":" + min + ":" + sec;
  61. }
  62. var mysqlConnection = mysql.createConnection(mysqlInfo, {multipleStatements: true});
  63. var Entities = require('html-entities').AllHtmlEntities;
  64. entities = new Entities();
  65. var steam = new Steam.SteamClient();
  66. var offers = new SteamTradeOffers();
  67. var hash = require('crypto').createHash('sha1');
  68. var express = require("express");
  69. hash.update(Math.random().toString());
  70. hash = hash.digest('hex');
  71. var device_id = 'android:' + hash;
  72. var globalSessionID;
  73. var locked = false, proceeded;
  74. var itemscopy;
  75. var detected = false;
  76. var detected2 = false;
  77. var endtimer = -1;
  78. var authCode = '';
  79. var userCount = 0;
  80. var actual_time = null;
  81. var lasted = getDateTime();
  82. io.on('connection', function(socket) {
  83. //var login = '<span style="color: red;">System</span>';
  84. //var system = 'http://blodhren.pl/img/system.png';
  85. //io.emit('message', { avatar: system, login: login, message: '<b>Welcome to YGPot!</b>' });
  86. mysqlConnection.query("SELECT `value` FROM `info` WHERE `name`=\'current_game\'", function(err, row) {
  87. var round = row[0].value;
  88. var lastgame = row[0].value - 1;
  89. mysqlConnection.query("SELECT SUM(value) AS value FROM `game"+lastgame+"`", function(err, row) {
  90. var lastpot = row[0].value;
  91. mysqlConnection.query("SELECT `cost` FROM `games` ORDER BY `cost` DESC", function(err, row) {
  92. if(lastpot == null) {
  93. lastpot = "0.00";
  94. } else {
  95. lastpot = parseFloat(lastpot).toFixed(2);
  96. }
  97. var biggestwin = parseFloat(row[0].cost).toFixed(2);
  98. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields) {
  99. var current_game = (row[0].value);
  100. mysqlConnection.query('SELECT `cost`,`itemsnum` FROM `games` WHERE `id`=\''+current_game+'\'', function(err, row, fields) {
  101. var current_bank2 = row[0].cost;
  102. var current_bank = parseFloat(current_bank2).toFixed(2);
  103. var itemsnum = row[0].itemsnum;
  104. socket.emit('gameinfo', { current_money: current_bank, itemsnum: itemsnum });
  105. // io.emit('gameinfo', { current_money: current_bank, itemsnum: itemsnum });
  106. });
  107. });
  108. socket.emit('info', { round: round, biggestwin: biggestwin, lastpot: lastpot });
  109.  
  110. });
  111. });
  112. });
  113. socket.on('message', function(data){
  114. var last_chat = lasted;
  115. var date = getDateTime();
  116. if(date != last_chat){
  117. var steamid = data.steamid;
  118. if(steamid != undefined && data.hash != undefined){
  119. mysqlConnection.query('SELECT `admin` FROM `users` WHERE `steamid`=\''+steamid+'\'', function(errss, rowsss, fieldsss) {
  120. mysqlConnection.query('SELECT `hash` FROM `users` WHERE `steamid`=\''+steamid+'\'', function(errs, rowss, fieldss) {
  121. if(data.admin == rowsss[0].admin){
  122. if(errs) console.log(errs);
  123. if(rowss[0].hash != undefined) var hash = rowss[0].hash;
  124. if(hash == data.hash){
  125. if(data.admin == 1) {
  126. var login = '<span style="color: red;">'+data.login+'</span>';
  127. } else if(data.admin == 2) {
  128. var login = '<span style="color: green;">'+data.login+'</span>';
  129. } else if(data.admin == 3) {
  130. var login = '<span style="color: orange;">[STREAMER] '+data.login+'</span>';
  131. } else {
  132. var login = data.login;
  133. }
  134. if(data.admen != 4).e
  135. davar message = entities.encode(data.message);
  136. lasted = getDateTime();
  137. io.emit('message', { avatar: data.avatar, login: login, message: message });
  138. }
  139. } else {
  140. console.log("[YGWEB] ERROR HASH CHAT");
  141. }
  142. }
  143. });
  144. });
  145. }
  146. } else {
  147. console.log("[YGWEB] TOO LATE CHAT");
  148. }
  149. });
  150. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields){
  151. var current_game = (row[0].value);
  152. mysqlConnection.query('SELECT * FROM `game'+current_game+'` ORDER BY `value` DESC', function(err, row) {
  153. if(err) {
  154. console.log('[YGWEB] ERROR: '+err);
  155. // throw err;
  156. } else {
  157. for(var i in row) {
  158. io.to(socket.id).emit('item', { userid: row[i].userid, username: row[i].username, item: row[i].item, color: row[i].color, value: row[i].value, avatar: row[i].avatar, image: row[i].image });
  159. }
  160. }
  161. });
  162. });
  163. userCount++;
  164. io.sockets.emit('userCount', { userCount: userCount });
  165. socket.on('disconnect', function() {
  166. userCount--;
  167. io.sockets.emit('userCount', { userCount: userCount });
  168. });
  169. setInterval(function() {
  170. request({
  171. uri: "http://"+sitename+"/game_info.php?info=timeleft",
  172. }, function(error, response, body) {
  173. var timeleft = body;
  174. if(timeleft < 0 || timeleft == 0 || timeleft == 1) {
  175. timeleft = 0;
  176. var url = 'http://'+sitename+'/inc/winner.php';
  177. request(url, function(error, response, body){});
  178. EndGame();
  179. io.emit('time', { timeleft: timeleft });
  180. io.emit('end', { end: 66 });
  181. } else {
  182. io.emit('time', { timeleft: timeleft });
  183. }
  184. });
  185. }, 1000);
  186. });
  187. if (require('fs').existsSync('sentry_'+logOnOptions['accountName']+'.hash')) {
  188. logOnOptions['shaSentryfile'] = require('fs').readFileSync('sentry_'+logOnOptions['accountName']+'.hash');
  189. } else if(require('fs').existsSync('ssfn_'+logOnOptions['accountName'])) {
  190. var sha = require('crypto').createHash('sha1');
  191. sha.update(require('fs').readFileSync('ssfn_'+logOnOptions['accountName']));
  192. var sentry = new Buffer(sha.digest(), 'binary');
  193. logOnOptions['shaSentryfile'] = sentry;
  194. require('fs').writeFileSync('sentry_'+logOnOptions['accountName']+'.hash', sentry);
  195. } else if (authCode != '') {
  196. logOnOptions['authCode'] = authCode;
  197. }
  198.  
  199. var recheck = true;
  200. steam.logOn(logOnOptions);
  201.  
  202. function getUserName(steamid) {
  203. getUserInfo(steamid, function(error, data) {
  204. // if(error) throw error;
  205. if(error) console.log('[YGWEB] ERROR: '+error);
  206. var datadec = JSON.parse(JSON.stringify(data.response));
  207. return (datadec.players[0].personaname);
  208. });
  209. }
  210. function is_float(mixed_var) {
  211. return +mixed_var === mixed_var && (!isFinite(mixed_var) || !! (mixed_var % 1));
  212. }
  213. function proceedWinners() {
  214. var url = 'http://'+sitename+'/inc/winner.php';
  215. request(url, function(error, response, body){});
  216. }
  217. function getUserInfo(steamids,callback) {
  218. var url = 'http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key='+apik+'&steamids='+ steamids + '&format=json';
  219. request({
  220. url: url,
  221. json: true
  222. }, function(error, response, body) {
  223. if(!error && response.statusCode === 200) {
  224. callback(null, body);
  225. } else if (error) {
  226. getUserInfo(steamids,callback);
  227. }
  228. });
  229. }
  230. function addslashes(str) {
  231. str=str.replace(/\\/g,'\\\\');
  232. str=str.replace(/\'/g,'\\\'');
  233. str=str.replace(/\"/g,'\\"');
  234. str=str.replace(/\0/g,'\\0');
  235. return str;
  236. }
  237. function weblogon() {
  238. steam.webLogOn(function(newCookie) {
  239. COOKIE = newCookie;
  240. offers.setup({
  241. sessionID: globalSessionID,
  242. webCookie: newCookie,
  243. APIKey: apik
  244. }, function(err){
  245. if(err){
  246. console.log(err);
  247. }
  248. var steamapi=apik;
  249. var SteamcommunityMobileConfirmations = require('steamcommunity-mobile-confirmations');
  250. var steamcommunityMobileConfirmations = new SteamcommunityMobileConfirmations(
  251. {
  252. steamid: botsteamid,
  253. identity_secret: identity_secret,
  254. device_id: "android:" + require('crypto').randomBytes(16).toString('hex'),
  255. webCookie: newCookie
  256. });
  257. setInterval(function(){
  258. steamcommunityMobileConfirmations.FetchConfirmations((function (err, confirmations)
  259. {
  260. if (err)
  261. {
  262. console.log(err);
  263. return;
  264. }
  265. if(confirmations.length>0)
  266. {
  267. console.log('[YGWEB] Potwierdzono ' + confirmations.length + ' wymian!');
  268. }
  269. if ( ! confirmations.length)
  270. {
  271. return;
  272. }
  273. steamcommunityMobileConfirmations.AcceptConfirmation(confirmations[0], (function (err, result)
  274. {
  275. if (err) {
  276. console.log(err);
  277. return;
  278. }
  279. }).bind(this));
  280. }).bind(this));
  281. }, pooling_interval);
  282. if (err)
  283. {
  284.  
  285. }
  286. });
  287. });
  288. }
  289. weblogon();
  290. function sendoffers(){
  291. detected2 = false;
  292. offers.loadMyInventory({
  293. appId: 730,
  294. contextId: 2,
  295. APIKey: apik
  296. }, function(err, itemx) {
  297. if(err) {
  298. weblogon();
  299. setTimeout(sendoffers,1000);
  300. return;
  301. }
  302. if(detected2 == true) {
  303. return;
  304. }
  305. detected2 = true;
  306. itemscopy = itemx;
  307. detected = false;
  308. mysqlConnection.query('SELECT * FROM `queue` WHERE `status`=\'active\'', function(err, row, fields) {
  309. if(err) {
  310. return;
  311. }
  312. if(detected == true) {
  313. return;
  314. }
  315. detected = true;
  316. for(var i=0; i < row.length; i++) {
  317. var gameid = row[i].id;
  318. var sendItems = (row[i].items).split('/');
  319. var item=[],num=0;
  320. for (var x = 0; x < itemscopy.length; x++) {
  321. for(var j=0; j < sendItems.length; j++) {
  322. if (itemscopy[x].tradable && (itemscopy[x].market_name).indexOf(sendItems[j]) == 0) {
  323. sendItems[j] = "hgjhgnhgjgnjghjjghjghjghjhgjghjghjghngnty";
  324. itemscopy[x].market_name = "fgdfgdfgdfgdfgfswfewefewrfewrewrewr";
  325. item[num] = {
  326. appid: 730,
  327. contextid: 2,
  328. amount: itemscopy[x].amount,
  329. assetid: itemscopy[x].id
  330. }
  331. num++;
  332. }
  333. }
  334. }
  335.  
  336. if (num > 0) {
  337. var gamenum = row[i].id;
  338. offers.makeOffer ({
  339. partnerSteamId: row[i].userid,
  340. itemsFromMe: item,
  341. accessToken: row[i].token,
  342. itemsFromThem: [],
  343. message: 'Congratulation! This is your winning from '+sitename+''
  344. }, function(err, response){
  345. if (err) {
  346. mysqlConnection.query('UPDATE `queue` SET `status`=\'sent '+err+'\' WHERE `id`=\''+gameid+'\'', function(err, row, fields) {});
  347. return;
  348. } else {
  349. // mysqlConnection.query('UPDATE `queue` SET `status`=\'sent '+response+'\' WHERE `id`=\''+gameid+'\'', function(err, row, fields) {});
  350. mysqlConnection.query('UPDATE `queue` SET `status`=\'sent '+response+'\'', function(err, row, fields) {});
  351. console.log('[YGWEB] Nagroda z rundy '+gamenum+' wyslana do zwycięzcy!');
  352. confirmS();
  353. }
  354. });
  355. }
  356. }
  357. });
  358. })}
  359. (function() {
  360. /**
  361. * Decimal adjustment of a number.
  362. *
  363. * @param {String} type The type of adjustment.
  364. * @param {Number} value The number.
  365. * @param {Integer} exp The exponent (the 10 logarithm of the adjustment base).
  366. * @returns {Number} The adjusted value.
  367. */
  368. function decimalAdjust(type, value, exp) {
  369. if (typeof exp === 'undefined' || +exp === 0) {
  370. return Math[type](value);
  371. }
  372. value = +value;
  373. exp = +exp;
  374. if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
  375. return NaN;
  376. }
  377. value = value.toString().split('e');
  378. value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
  379. value = value.toString().split('e');
  380. return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
  381. }
  382. if (!Math.round10) {
  383. Math.round10 = function(value, exp) {
  384. return decimalAdjust('round', value, exp);
  385. };
  386. }
  387. if (!Math.floor10) {
  388. Math.floor10 = function(value, exp) {
  389. return decimalAdjust('floor', value, exp);
  390. };
  391. }
  392. if (!Math.ceil10) {
  393. Math.ceil10 = function(value, exp) {
  394. return decimalAdjust('ceil', value, exp);
  395. };
  396. }
  397. })();
  398. function EndGame() {
  399. endtimer = -1;
  400. proceedWinners();
  401. setTimeout(sendoffers,1000);
  402. }
  403. steam.on('loggedOn', function(result) {
  404. console.log('[YGWEB] Steam bot - Zalogowano');
  405. steam.setPersonaState(Steam.EPersonaState.LookingToTrade);
  406. });
  407. steam.on('webSessionID', function(sessionID) {
  408. globalSessionID = sessionID;
  409. weblogon();
  410. setTimeout(function(){
  411. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, rows, fields) {
  412. if(err) return;
  413. mysqlConnection.query('SELECT `starttime` FROM `games` WHERE `id`=\''+rows[0].value+'\'', function(errs, rowss, fieldss) {
  414. if(errs) return;
  415. var timeleft;
  416. if(rowss[0].starttime == 2147483647) timeleft = GameTime;
  417. else {
  418. var unixtime = Math.round(new Date().getTime()/1000.0);
  419. timeleft = rowss[0].starttime+GameTime-unixtime;
  420. if(timeleft < 0) timeleft = 0;
  421. }
  422. if(timeleft != GameTime) {
  423. setTimeout(EndGame,timeleft*1000);
  424. endtimer = setTimeout(EndGame,GameTime*1000);
  425. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields){
  426. var current_game = (row[0].value);
  427. mysqlConnection.query('UPDATE IGNORE `games` SET `starttime`=UNIX_TIMESTAMP() WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {});
  428. console.log('[YGWEB] Przywracamy gre z '+timeleft+' sekund!');
  429. });
  430. }
  431. });
  432. });
  433. },1500);
  434. });
  435. steam.on('friendMsg', function(steamID, message, type) {
  436. if(type != Steam.EChatEntryType.ChatMsg) return;
  437. if(steamID == admin) {
  438. if(message.indexOf("/sendallitems") == 0) {
  439. offers.loadMyInventory({
  440. appId: 730,
  441. contextId: 2,
  442. APIKey: apik
  443. }, function(err, items) {
  444. if(err) {
  445. steam.sendMessage(steamID, '[YGWEB] Próbujemy wysłać przedmioty...');
  446. weblogon();
  447. return;
  448. }
  449. var item=[],num=0;
  450. for (var i = 0; i < items.length; i++) {
  451. if (items[i].tradable) {
  452. item[num] = {
  453. appid: 730,
  454. contextid: 2,
  455. amount: items[i].amount,
  456. assetid: items[i].id
  457. }
  458. num++;
  459. }
  460. }
  461. if (num > 0) {
  462. offers.makeOffer ({
  463. partnerSteamId: steamID,
  464. itemsFromMe: item,
  465. itemsFromThem: [],
  466. message: ''
  467. }, function(err, response){
  468. if (err) {
  469. throw err;
  470. }
  471. steam.sendMessage(steamID, '[YGWEB] Oferta została wysłana z wszystkimi przedmiotami!');
  472. });
  473. }
  474. });
  475. } else if(message.indexOf("/send") == 0) {
  476. var params = message.split(' ');
  477. if(params.length == 1) return steam.sendMessage(steamID, 'Używaj /send [nazwa_przedmiotu]');
  478. offers.loadMyInventory({
  479. appId: 730,
  480. contextId: 2
  481. }, function(err, items) {
  482. if(err) {
  483. steam.sendMessage(steamID, 'Błąd z ładowaniem ekwipunku...');
  484. weblogon();
  485. return;
  486. }
  487. var item=0;
  488. for (var i = 0; i < items.length; i++) {
  489. if((items[i].market_name).indexOf(params[1]) != -1) {
  490. item = items[i].id;
  491. break;
  492. }
  493. }
  494. if (item != 0) {
  495. offers.makeOffer ({
  496. partnerSteamId: steamID,
  497. itemsFromMe: [
  498. {
  499. appid: 730,
  500. contextid: 2,
  501. amount: 1,
  502. assetid: item
  503. }
  504. ],
  505. itemsFromThem: [],
  506. message: ''
  507. }, function(err, response){
  508. if (err) {
  509. throw err;
  510. }
  511. steam.sendMessage(steamID, '[YGWEB] Oferta wysłana z przedmiotem '+item);
  512. });
  513. }
  514. });
  515. } else if(message.indexOf("/end") == 0) {
  516. steam.sendMessage(steamID,'Gra została zakończona!');
  517. if(endtimer != -1) clearTimeout(endtimer);
  518. EndGame();
  519. } else if(message.indexOf("/code") == 0) {
  520. var code = SteamTotp.generateAuthCode(shared_secret);
  521. steam.sendMessage(steamID,'Twój kod do logowania: ' +code+'');
  522. } else if(message.indexOf("/so") == 0) {
  523. steam.sendMessage(steamID,'Nagroday wysylamy natychmiastowo!');
  524. sendoffers();
  525. }
  526. }
  527. });
  528.  
  529. function in_array(needle, haystack, strict) {
  530. var found = false, key, strict = !!strict;
  531.  
  532. for (key in haystack) {
  533. if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
  534. found = true;
  535. break;
  536. }
  537. }
  538.  
  539. return found;
  540. }
  541.  
  542. function checkoffers(number) {
  543. if (number > 0) {
  544. offers.getOffers({
  545. get_received_offers: 1,
  546. active_only: 1,
  547. get_sent_offers: 0,
  548. get_descriptions: 1,
  549. time_historical_cutoff: Math.round(Date.now() / 1000),
  550. language: "en_us"
  551. }, function(error, body) {
  552. if(error) return;
  553. if(body.response.trade_offers_received){
  554. body.response.trade_offers_received.forEach(function(offer) {
  555. if (offer.trade_offer_state == 2){
  556. if(offer.items_to_give) {
  557. console.log('[YGWEB] Anulujemy oferte '+offer.tradeofferid);
  558. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  559. return;
  560. }
  561. if(offer.items_to_receive == undefined) return;
  562. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'maxitems\'', function(err, row, fields) {
  563. if(offer.items_to_receive.length > row[0].value) {
  564. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  565. offer.items_to_receive = [];
  566. var unixtime = Math.round(new Date().getTime()/1000.0);
  567. console.log('[YGWEB] Oferta #'+offer.tradeofferid+' wyslana przez: '+offer.steamid_other+' anulowana! Zbyt duzo przedmiotow!');
  568. return;
  569. }
  570. });
  571. var delock = false;
  572. offers.loadPartnerInventory({partnerSteamId: offer.steamid_other, appId: 730, contextId: 2, tradeOfferId: offer.tradeofferid, language: "en"}, function(err, hitems) {
  573. if(err) {
  574. weblogon();
  575. recheck = true;
  576. return;
  577. }
  578. if(delock == true) return;
  579. delock = true;
  580. var items = offer.items_to_receive;
  581. var wgg=[],num=0;
  582. for (var i = 0; i < items.length; i++) {
  583. for(var j=0; j < hitems.length; j++) {
  584. if(items[i].assetid == hitems[j].id) {
  585. wgg[num] = hitems[j];
  586. num++;
  587. break;
  588. }
  589. }
  590. }
  591. var price=[];
  592. for(var i=0; i < num; i++) {
  593. if(wgg[i].appid != 730) {
  594. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  595. console.log('[YGWEB] Items is not CSGO skins.');
  596. var unixtime = Math.round(new Date().getTime()/1000.0);
  597. return;
  598. }
  599. /* if(souvenir == 0){
  600. if(wgg[i].market_name.indexOf("Souvenir") != -1) {
  601. var unixtime = Math.round(new Date().getTime()/1000.0);
  602. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  603. console.log('[SERVER] Declined offer #'+offer.tradeofferid+' - Sent by: '+offer.steamid_other+' - Reason: User sent a souvenir skin');
  604. return;
  605. }
  606. }*/
  607. var itemname = wgg[i].market_name;
  608. var url = 'http://'+sitename+'/inc/cost.php?item='+encodeURIComponent(itemname);
  609. (function(someshit) {
  610. request(url, function(error, response, body){
  611. if(!error && response.statusCode === 200){
  612. var unixtime = Math.round(new Date().getTime()/1000.0);
  613. if(body == "notfound"){
  614. console.log('[YGWEB] Oferta wyslana przez '+offer.steamid_other+' anulowana! nie mozna pobrac ceny przedmiotow!');
  615. } else {
  616. wgg[someshit].cost = parseFloat(body);
  617. }
  618. } else {
  619. console.log('[YGWEB] Oferta wyslana przez '+offer.steamid_other+' anulowana! nie mozna pobrac ceny przedmiotow!');
  620. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  621. }
  622. });
  623. })(i)
  624. }
  625. setTimeout(function() {
  626. var sum=0;
  627. for(var i=0; i < num; i++) {
  628. sum += wgg[i].cost;
  629. }
  630.  
  631. var tradelink;
  632. mysqlConnection.query('SELECT tlink FROM `users` WHERE `steamid`=\''+offer.steamid_other+'\'', function(err, row, fields)
  633. {
  634. tradelink= row[0].tlink;
  635. if(!tradelink)
  636. {
  637. var unixtime = Math.round(new Date().getTime()/1000.0);
  638. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  639. console.log('[YGWEB] Oferta wyslana przez '+offer.steamid_other+' anulowana, poniewaz nie uzupelnil on tradelinku!')
  640. return;
  641. }
  642. var token = tradelink.slice(-8);
  643.  
  644. offers.getHoldDuration({partnerSteamId: offer.steamid_other, accessToken: token}, function(err, response){
  645. if (err) {
  646. console.log('[YGWEB] Oferta wyslana przez '+offer.steamid_other+' anulowana, error!')
  647. var unixtime = Math.round(new Date().getTime()/1000.0);
  648. console.log(err);
  649. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  650. return;
  651. }
  652. if(response.their==0)
  653. {
  654. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields){
  655. var current_game = (row[0].value);
  656.  
  657. mysqlConnection.query('SELECT COUNT(value) as citems FROM `game'+current_game+'` WHERE `userid`=\''+offer.steamid_other+'\'', function(err, row, fields){
  658. citems = row[0].citems;
  659. citems=citems+offer.items_to_receive.length;
  660. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'maxitems\'', function(err, row, fields)
  661. {
  662. var mi=row[0].value;
  663. if(citems > mi)
  664. {
  665. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  666. offer.items_to_receive = [];
  667. console.log('[YGWEB] Oferta wyslana przez '+offer.steamid_other+' anulowana, poniewaz wyslal on za duzo skinow!');
  668. return;
  669. }
  670. });
  671. mysqlConnection.query('SELECT SUM(value) as cmoney FROM `game'+current_game+'` WHERE `userid`=\''+offer.steamid_other+'\'', function(err, row, fields){
  672. /*cmoney = row[0].cmoney;
  673. cmoney=cmoney+sum;
  674. for(var k=0; k < num; k++){
  675. if(!is_float(wgg[k].cost)){
  676. if(err){
  677. console.log('err float');
  678. }
  679. //console.log('float');
  680. //offers.declineOffer({tradeOfferId: offer.tradeofferid});
  681. // return;
  682. }
  683. }*/
  684.  
  685.  
  686. getUserInfo(offer.steamid_other, function(error, data){
  687. // if(error) throw error;
  688. if(error) console.log('[YGWEB] ERROR: '+error);
  689. var datadec = JSON.parse(JSON.stringify(data.response));
  690. var name = addslashes(datadec.players[0].personaname);
  691. var avatar = (datadec.players[0].avatarfull);
  692. if(num == 0) return;
  693. offers.acceptOffer({tradeOfferId: offer.tradeofferid}, function(err, response) {
  694. if(err != null) return;
  695. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields) {
  696. var current_game = (row[0].value);
  697. mysqlConnection.query('SELECT `cost`,`itemsnum` FROM `games` WHERE `id`=\''+current_game+'\'', function(err, row, fields) {
  698. var current_bank2 = parseFloat(row[0].cost);
  699. //var current_bank = parseFloat(row[0].cost).toFixed(2);
  700. var itemsnum = row[0].itemsnum;
  701.  
  702. for(var j=0; j < num; j++) {
  703. var itemn = addslashes(wgg[j].market_name);
  704. mysqlConnection.query('INSERT IGNORE INTO `game' + current_game + '` (`userid`,`username`,`item`,`color`,`value`,`avatar`,`image`,`from`,`to`) VALUES (\'' + offer.steamid_other + '\',\'' + name + '\',\'' + itemn + '\',\'' + wgg[j].name_color + '\',\'' + wgg[j].cost + '\',\'' + avatar + '\',\'' + wgg[j].icon_url + '\',\''+current_bank+'\'+\'0\',\''+current_bank+'\'+\''+wgg[j].cost+'\')', function(err, row, fields) {});
  705. io.emit('item', { userid: offer.steamid_other, username: name, item: itemn, color: wgg[j].name_color, value: wgg[j].cost, avatar: avatar, image: wgg[j].icon_url });
  706. mysqlConnection.query('UPDATE IGNORE `games` SET `itemsnum`=`itemsnum`+1, `cost`=`cost`+\''+wgg[j].cost+'\' WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {});
  707. // current_bank = current_bank + wgg[j].cost;
  708. var current_bank3 = current_bank2 + wgg[j].cost;
  709. itemsnum++;
  710. }
  711. var current_bank = parseFloat(current_bank3).toFixed(2);
  712. io.emit('gameinfo', { current_money: current_bank, itemsnum: itemsnum });
  713.  
  714. mysqlConnection.query('SELECT COUNT(DISTINCT userid) AS playersCount FROM `game' + current_game + '`', function(err, rows){
  715. someVar = rows[0].playersCount;
  716. console.log('[YGWEB] Graczy w puli: ' +someVar);
  717. if(someVar == 2 && items.length > 0 && endtimer==-1) {
  718. console.log('[YGWEB] Odliczanie rozpoczete!');
  719. endtimer = setTimeout(EndGame,GameTime*1000);
  720.  
  721. mysqlConnection.query('UPDATE IGNORE `games` SET `starttime`=UNIX_TIMESTAMP() WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {});
  722. }
  723.  
  724. });
  725. console.log('[YGWEB] Zaakceptowano oferte #'+offer.tradeofferid+' wysylajacy '+name+'');
  726. });
  727. });
  728. });
  729. });
  730. });
  731. });
  732. });
  733. } else {
  734. console.log('[YGWEB] Gracz wysylajacy nie posiada aktywowanego ESCROW!');
  735. var unixtime = Math.round(new Date().getTime()/1000.0);
  736. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  737. return;
  738. }
  739. });
  740. });
  741. },2000);
  742. });
  743. }
  744. });
  745. }
  746. });
  747. }
  748. }
  749. setInterval(sendoffers,30000);
  750. var pew;
  751. steam.on('tradeOffers', checkoffers);
  752. setInterval(function(){
  753. steam.on('tradeOffers', checkoffers);
  754. }, 30000);
  755.  
  756. steam.on('sentry', function(data) {
  757. require('fs').writeFileSync('sentry_'+logOnOptions['accountName']+'.hash', data);
  758. });
  759.  
  760. console.log("[YGWEB] Potwierdzanie ofert - Zalogowano");
  761. function confirmS(){
  762. var SteamCommunity = require('steamcommunity');
  763. var SteamTotp = require('steam-totp');
  764. var code = SteamTotp.generateAuthCode('nlyt3AbVvNrBQILanB6r4QrVmlQ=');
  765. //console.log(code);
  766. var client = new SteamCommunity();
  767. client.login({
  768. "accountName": "bartek4176",
  769. "password": "zarzecze",
  770. "twoFactorCode": code
  771. }, function(err, sessionId, cookies, steamguard) {
  772. var hash = require('crypto').createHash('sha1');
  773. hash.update(Math.random().toString());
  774. hash = hash.digest('hex');
  775. device_id2 = 'android:' + hash;
  776. //console.log(this.device_id2);
  777. var SteamcommunityMobileConfirmations = require('steamcommunity-mobile-confirmations');
  778. var steamcommunityMobileConfirmations = new SteamcommunityMobileConfirmations(
  779. {
  780. steamid: "76561198096932160",
  781. identity_secret: "0sOKooSZwarTfmGQwP8W8BgscNY=",
  782. device_id2: this.device_id2,
  783. webCookie: cookies,
  784. });
  785.  
  786. steamcommunityMobileConfirmations.FetchConfirmations((function (err, confirmations){
  787. if (err){
  788. console.log(err);
  789. return;
  790. }
  791. if(confirmations.length != 0){
  792. console.log('[YGWEB] Potwierdzono ' + confirmations.length + ' wymian');
  793. }
  794. if (!confirmations.length){
  795. return;
  796. }
  797. steamcommunityMobileConfirmations.AcceptConfirmation(confirmations[0], (function (err, result){
  798. if (err){
  799. console.log(err);
  800. return;
  801. }
  802. console.log('[YGWEB] Wynik: ' + result);
  803. }).bind(this));
  804. }).bind(this));
  805.  
  806. })
  807. }
  808. setInterval(confirmS,60000);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement