Advertisement
Guest User

Untitled

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