Advertisement
Guest User

Untitled

a guest
Oct 11th, 2016
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.94 KB | None | 0 0
  1. var SteamCommunity = require('steamcommunity');
  2. var SteamTotp = require('steam-totp');
  3. var mysql = require('mysql');
  4. var log4js = require('log4js');
  5. var SteamTradeOffers = require('steam-tradeoffers');
  6. var async = require('async');
  7.  
  8. var pool = mysql.createPool({
  9. connectionLimit : 10,
  10. database: 'csgo',
  11. host: 'localhost',
  12. user: 'root',
  13. password: 'Tome'
  14. });
  15.  
  16. var community = new SteamCommunity();
  17. var offers = new SteamTradeOffers();
  18. log4js.configure({
  19. appenders: [
  20. { type: 'console' },
  21. { type: 'file', filename: 'logs/bot_'+process.argv[2]+'.log' }
  22. ]
  23. });
  24. var logger = log4js.getLogger();
  25.  
  26. var express = require('express');
  27. var app = express();
  28.  
  29. app.get('/sendTrade/', function (req, res) {
  30. var assetids = req.query['assetids'];
  31. assetids = assetids.split(',');
  32. var partner = req.query['partner'];
  33. var token = req.query['token'];
  34. var checksum = req.query['checksum'];
  35. var steamid = req.query['steamid'];
  36. var senditems = [];
  37. for(var i = 0; i < assetids.length; i++) {
  38. if(assetids[i] == "") continue;
  39. senditems.push({
  40. appid: 730,
  41. contextid: 2,
  42. assetid: assetids[i]
  43. });
  44. }
  45. var code = makecode();
  46. console.log(partner, token, checksum, assetids, senditems);
  47. offers.makeOffer({
  48. partnerAccountId: partner,
  49. accessToken: token,
  50. itemsFromThem: senditems,
  51. itemsFromMe: [],
  52. message: 'Code: '+code
  53. }, function(err, r) {
  54. if(err) {
  55. logger.error('Error sending trade');
  56. logger.debug(err);
  57. res.json({
  58. success: false,
  59. error: err.toString()
  60. });
  61. } else {
  62. offers.loadPartnerInventory({
  63. partnerSteamId: steamid,
  64. tradeOfferId: r.tradeofferid,
  65. appId: 730,
  66. contextId: 2,
  67. language: 'russian'
  68. }, function(err, rr) {
  69. if(err) {
  70. logger.debug(err);
  71. res.json({
  72. success: false,
  73. error: err.toString()
  74. });
  75. } else {
  76. var names = [];
  77. for(var i = 0; i < senditems.length; i++) {
  78. for(var a = 0; a < rr.length; a++) {
  79. if((senditems[i].assetid == rr[a].id) && (!rr[a].ss)) {
  80. names.push({market_hash_name: rr[a].market_hash_name, icon_url: rr[a].icon_url});
  81. rr[a].ss = 1;
  82. continue;
  83. }
  84. }
  85. }
  86. res.json({
  87. success: true,
  88. code: code,
  89. amount: checksum,
  90. tid: r.tradeofferid,
  91. items: names
  92. });
  93. }
  94. });
  95. }
  96. });
  97. });
  98.  
  99. app.get('/sendTradeMe/', function (req, res) {
  100. var names = req.query['names'];
  101. names = names.split(',');
  102. var partner = req.query['partner'];
  103. var token = req.query['token'];
  104. var checksum = req.query['checksum'];
  105. offers.loadMyInventory({
  106. appId: 730,
  107. contextId: 2
  108. }, function(err, items) {
  109. if(err) {
  110. logger.error('Error sending trade');
  111. logger.debug(err);
  112. res.json({
  113. success: false,
  114. error: err.toString()
  115. });
  116. } else {
  117. var senditems = [];
  118. for(var i = 0; i < names.length; i++) {
  119. for(var a = 0; a < items.length; a++) {
  120. if((names[i] == items[a].market_hash_name) && (!items[a].ss)) {
  121. senditems.push({
  122. appid: 730,
  123. contextid: 2,
  124. assetid: items[a].id
  125. });
  126. if(senditems.length == names.length-1) break;
  127. items[a].ss = 1;
  128. continue;
  129. }
  130. if(senditems.length == names.length-1) break;
  131. }
  132. };
  133. var code = makecode();
  134. console.log(partner, token, checksum, names, senditems);
  135. offers.makeOffer({
  136. partnerAccountId: partner,
  137. accessToken: token,
  138. itemsFromThem: [],
  139. itemsFromMe: senditems,
  140. message: 'Code: '+code
  141. }, function(err, r) {
  142. if(err) {
  143. logger.error('Error sending trade');
  144. logger.debug(err);
  145. res.json({
  146. success: false,
  147. error: err.toString()
  148. });
  149. } else {
  150. res.json({
  151. success: true,
  152. code: code,
  153. amount: -checksum,
  154. tid: r.tradeofferid,
  155. state: 2
  156. });
  157. }
  158. });
  159. }
  160. });
  161. });
  162.  
  163. app.get('/checkTrade/', function (req, res) {
  164. var tid = req.query['tid'];
  165. offers.getOffer({
  166. tradeofferid: tid
  167. }, function(err, trade) {
  168. if(err) {
  169. logger.error('Error checking trade');
  170. logger.debug(err);
  171. res.json({
  172. success: false,
  173. error: err.toString()
  174. });
  175. } else {
  176. logger.debug(trade);
  177. if(trade.response.offer.trade_offer_state == 3) {
  178. res.json({
  179. success: true,
  180. action: 'accept',
  181. result: 'Coins have been added to your balance'
  182. });
  183. } else if(trade.response.offer.trade_offer_state == 7) {
  184. res.json({
  185. success: true,
  186. result: 'You are declined trade',
  187. action: 'cross'
  188. });
  189. } else {
  190. res.json({
  191. success: false,
  192. error: 'You are not accept trade'
  193. });
  194. }
  195. }
  196. });
  197. });
  198.  
  199. function cancelTrade(offerid) {
  200. offers.declineOffer({
  201. tradeOfferId: offerid
  202. }, function(err, log) {
  203. if (err) {
  204. logger.error('Не смогли отменить трейд #'+offerid);
  205. logger.debug(err);
  206. return;
  207. }
  208. logger.debug(log);
  209. logger.trace('Offer #'+offerid+' canceled');
  210. });
  211. }
  212.  
  213. query('SELECT * FROM `bots` WHERE `id` = '+pool.escape(process.argv[2]), function(err, res) {
  214. if((err) || (!res[0])) {
  215. logger.error('Cant find account');
  216. process.exit(0);
  217. return;
  218. }
  219. account = res[0];
  220. app.listen(3000+account.id);
  221. logger.trace('We got account info');
  222. account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  223. account.auth = false;
  224. logger.debug(account);
  225. community.login(account, login);
  226. });
  227.  
  228. community.on('confKeyNeeded', function(tag, callback) {
  229. callback(null, time, SteamTotp.getConfirmationKey(account.identity_secret, time(), tag));
  230. });
  231.  
  232. community.on('newConfirmation', function(confirmation) {
  233. var time = time();
  234. var key = SteamTotp.getConfirmationKey(account.identity_secret, time, 'allow');
  235. confirmation.respond(time, key, true, function(err) {
  236. if(err) {
  237. logger.error('Error on mobile auth');
  238. logger.debug(err);
  239. return;
  240. }
  241. logger.trace('Trade sucesfully confirmed');
  242. });
  243. });
  244.  
  245. function query(sql, callback) {
  246. if (typeof callback === 'undefined') {
  247. callback = function() {};
  248. }
  249. pool.getConnection(function(err, connection) {
  250. if(err) return callback(err);
  251. logger.info('DB connection ID: '+connection.threadId);
  252. connection.query(sql, function(err, rows) {
  253. if(err) return callback(err);
  254. connection.release();
  255. return callback(null, rows);
  256. });
  257. });
  258. }
  259.  
  260. function login(err, sessionID, cookies, steamguard) {
  261. if(err) {
  262. logger.error('Auth error');
  263. logger.debug(err);
  264. if(err.message == "SteamGuardMobile") {
  265. account.twoFactorCode = SteamTotp.generateAuthCode(account.shared_secret);
  266. logger.warn('Error in auth: '+account.twoFactorCode);
  267. setTimeout(function() {
  268. community.login(account, login);
  269. }, 5000);
  270. return;
  271. }
  272. process.exit(0);
  273. }
  274. logger.trace('Sucesfully auth');
  275. account.sessionID = sessionID;
  276. account.cookies = cookies;
  277. community.getWebApiKey('csgobananas.com', webApiKey);
  278. community.startConfirmationChecker(10000, account.identity_secret);
  279. }
  280.  
  281. function webApiKey(err, key) {
  282. if(err) {
  283. logger.error('Cant make apikey')
  284. logger.debug(err);
  285. process.exit(0);
  286. return;
  287. }
  288. account.key = key;
  289. logger.trace('API key bot '+account.accountName+' '+account.key);
  290. offersSetup();
  291. community.loggedIn(checkLoggedIn);
  292. }
  293.  
  294. function offersSetup() {
  295. logger.trace('Loaded steam-tradeoffers');
  296. offers.setup({
  297. sessionID: account.sessionID,
  298. webCookie: account.cookies,
  299. APIKey: account.key
  300. });
  301. }
  302.  
  303. function checkLoggedIn(err, loggedIn, familyView) {
  304. if((err) || (!loggedIn)) {
  305. logger.error('We arent logged in')
  306. process.exit(0);
  307. } else {
  308. logger.trace('Logged in');
  309. account.auth = true;
  310. }
  311. }
  312.  
  313. function makecode() {
  314. var text = "";
  315. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  316.  
  317. for(var i=0; i < 5; i++)
  318. text += possible.charAt(Math.floor(Math.random() * possible.length));
  319.  
  320. return text;
  321. }
  322.  
  323. function time() {
  324. return parseInt(new Date().getTime()/1000)
  325. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement