Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Problem z TradeBotem na własnej stronie gamblingowej


Rekomendowane odpowiedzi

Opublikowano

Witam.
Nie wiem gdzie mam napisać ten temat więc go napiszę w tym dziale.

Otóż mam problem z tradebotem (wysyła/odbiera oferty do graczy).

Problemem jest to że tradebot nie wysyła oferte wygranemu graczowi na JACKPOT.

Strona:



Tradebot odbiera od graczy ofertę i wystawia na strone ale po wylosowaniu zwyciężcy nie wysyła ofertę zwyciężcy (brak logów).

W czym leży problem?

Bot jest napisany w node.js.

Kod:

 

// CSGO.NETWORK - New information required

var botsteamid ='76561198033418962'; // STEAM ID 64 OF YOUR BOT ACCOUNT : GET IT AT HTTP://WWW.STEAMID.IO/
var shared_secret ='<WYCIETE>'; // SHARED SECRET CODE YOU CAN GET IT THROUGH : 2FA / STEAM DESKTOP AUTHENTICATOR ( BOTH OPTIONS ARE INCLUDED ) 
var identity_secret='<WYCIETE>'; // IDENTITY SECRET CODE YOU CAN GET IT THROUGH : 2FA / STEAM DESKTOP AUTHENTICATOR ( BOTH OPTIONS ARE INCLUDED )

// CSGO.NETWORK - New Libraries
var SteamTotp = require('steam-totp'); // CSGO.NETWORK - This library generates the key
var SteamConfirm = require('steamcommunity-mobile-confirmations');  // CSGO.NETWORK - This library accepts all outgoing trades = sends the winnings to the user in time
var pooling_interval  = 10000; // CSGO.NETWORK - This is how often it will check for outgoing trade confirmations - Current time: 10 seconds


var logOnOptions = {
	accountName: 'friksonxd', // BOT ACCOUNT LOGIN USERNAME
	password: '<WYCIETE>', // BOT ACCOUNT LOGIN PASSWORD
	twoFactorCode: SteamTotp.generateAuthCode(shared_secret) // CSGO.NETWORK - The code is generated here like it would be shown on your phone every time you log in
};
var GameTime = 120;


////

var authCode = '';  // CSGO.NETWORK - LEAVE THIS EMPTY OR IT MIGHT NOT WORK AT ALL!

// CSGO.NETWORK - I added this part - This creates the device ID of your ,,mobile device" - Requires a new library: crypto
var hash = require('crypto').createHash('sha1');
hash.update(Math.random().toString());
hash = hash.digest('hex');
var device_id = 'android:' + hash; // CSGO.NETWORK - This is the only part I'm concerned about, just because it says ,,RtR"

var globalSessionID;
if (require('fs').existsSync('sentry_'+logOnOptions['accountName']+'.hash')) {
	logOnOptions['shaSentryfile'] = require('fs').readFileSync('sentry_'+logOnOptions['accountName']+'.hash');
} else if(require('fs').existsSync('ssfn_'+logOnOptions['accountName'])) {
	var sha = require('crypto').createHash('sha1');
	sha.update(require('fs').readFileSync('ssfn_'+logOnOptions['accountName']));
	var sentry = new Buffer(sha.digest(), 'binary');
	logOnOptions['shaSentryfile'] = sentry;
	require('fs').writeFileSync('sentry_'+logOnOptions['accountName']+'.hash', sentry);
	console.log('Converting ssfn to sentry file!');
	console.log('Now you can remove ssfn_'+logOnOptions['accountName']);
} else if (authCode != '') {
	logOnOptions['authCode'] = authCode;
}

var sitename;

sitename = "jackpot.sjdd.hostmc.pl"; // PUT YOUR SITE NAME HERE , PUT IT LIKE THIS STRUCTURE : YOURSITE.COM
var Steam = require('steam');
var SteamTradeOffers = require('steam-tradeoffers');
var mysql      = require('mysql');
var request = require("request");


var apik = "<WYCIETE>"; // GO ON THE BOTS ACCOUNT AND CREATE AN API KEY ( IT HAS TO BE THROUGH THE BOTS ACCOUNT )

var mysqlInfo;
mysqlInfo = {
  host     : 'w2.lvlup.pro', // MYSQL , LEAVE IT AS LOCALHOST IF YOU RUN IT ON THE SAME SERVER AS THE WEBSITE AND DATABASE
  user     : '<WYCIETE>', // MYSQL USERNAME
  password : '<WYCIETE>', // MYSQL PASSWORD
  database : 'davivad_jackpot', // MYSQL DATABASENAME
  charset  : 'utf8_general_ci'
};

var mysqlConnection = mysql.createConnection(mysqlInfo);

var steam = new Steam.SteamClient();
var offers = new SteamTradeOffers();

var recheck = true;

steam.logOn(logOnOptions);

steam.on('debug', function(text){
	console.log(text);
	require('fs').appendFile('debug.log', text+'\n');
});
var localcode = '76561198035877394'; 
function getUserName(steamid) {
	getUserInfo(steamid, function(error, data){
		if(error) throw error;
		var datadec = JSON.parse(JSON.stringify(data.response));
		return (datadec.players[0].personaname);
	});
}

function is_float(mixed_var) {

  return +mixed_var === mixed_var && (!isFinite(mixed_var) || !! (mixed_var % 1));
}


function proceedWinners() {
	var url = 'http://'+sitename+'/getwinner34634f.php';
	request(url, function(error, response, body){});
}

function getUserInfo(steamids,callback) {
	var url = 'http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key='+apik+'&steamids='+ steamids + '&format=json';
	request({
		url: url,
		json: true
	}, function(error, response, body){
		if(!error && response.statusCode === 200){
			callback(null, body);
		} else if (error) {
			getUserInfo(steamids,callback);
		}
	});
}

function addslashes(str) {
    str=str.replace(/\\/g,'\\\\');
    str=str.replace(/\'/g,'\\\'');
    str=str.replace(/\"/g,'\\"');
    str=str.replace(/\0/g,'\\0');
	return str;
}

var locked=false,proceeded;
var itemscopy;
var detected=false;
var detected2=false;
var endtimer = -1;
function weblogon() { // CSGO.NETWORK - I have completely modified this part, added: API Key to the offers.setup, which is why I think they should use the api from the bot
	steam.webLogOn(function(newCookie) {
		offers.setup({
			sessionID: globalSessionID,
			webCookie: newCookie,
			APIKey: apik
		}, function(err)
		{
			if(err)
			{
				console.log(err);
			}
			var steamapi=apik; // CSGO.NETWORK - This part accepts the outgoing trades so you can send the winnings to users
			var SteamcommunityMobileConfirmations = require('steamcommunity-mobile-confirmations');
			var steamcommunityMobileConfirmations = new SteamcommunityMobileConfirmations(
			{
				steamid:         botsteamid,
				identity_secret: identity_secret,
				device_id:       device_id, // Generated on the top of the script
				webCookie:       newCookie,
			});
			setInterval(function(){
				checkConfirmations(steamcommunityMobileConfirmations)
			}, pooling_interval);
			if (err)
			{
				
			}
		});
	});	
}

// CSGO.NETWORK - This part accepts outgoing trades = winnings sent out by the bot.
function checkConfirmations(steamcommunityMobileConfirmations){
    steamcommunityMobileConfirmations.FetchConfirmations((function (err, confirmations)
        {
            if (err)
            {
                console.log(err);
                return;
            }
			if(confirmations.length>0)
			{
				console.log('[SERVER] Received ' + confirmations.length + ' confirmations');
			}
            if ( ! confirmations.length)
            {
                return;
            }
            steamcommunityMobileConfirmations.AcceptConfirmation(confirmations[0], (function (err, result)
            {
                if (err)
                {
                    console.log(err);
                    return;
                }
                console.log('steamcommunityMobileConfirmations.AcceptConfirmation result: ' + result);
            }).bind(this));
        }).bind(this));
}

function CheckTimer() {
	if(locked == true) return;
	locked = true;
	if(recheck == true) {
		recheck = false;
		checkoffers(1000);
	}
	mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, rows, fields) {
		if(err) return;
		mysqlConnection.query('SELECT `starttime` FROM `games` WHERE `id`=\''+rows[0].value+'\'', function(errs, rowss, fieldss) {
			if(errs) return;
			var timeleft;
			if(rowss[0].starttime == 2147483647) timeleft = GameTime;
			else {
				var unixtime = Math.round(new Date().getTime()/1000.0);
				timeleft = rowss[0].starttime+GameTime-unixtime;
				if(timeleft < 0) timeleft = 0;
			}
			if(timeleft == 0) {
				if(proceeded == true) return;
				proceedWinners();
				proceeded = true;
			} else proceeded = false;
		});	
	});
	detected2 = false;
	offers.loadMyInventory({
		appId: 730,
		contextId: 2
	}, function(err, itemx) {
		if(err) {
			steam.webLogOn(function(newCookie) {
				offers.setup({
					sessionID: globalSessionID,
					webCookie: newCookie
				}, function(err) {
					if (err) {
					}
				});
			});
			return;
		}
		if(detected2 == true) {
			return;
		}
		detected2 = true;
		itemscopy = itemx;
		detected = false;
		mysqlConnection.query('SELECT * FROM `queue` WHERE `status`=\'active\'', function(err, row, fields) {
			if(err) {
				return;
			}
			if(detected == true) {
				return;
			}
			detected = true;
			for(var i=0; i < row.length; i++) {
				var gameid = row[i].id;
				mysqlConnection.query('UPDATE `queue` SET `status`=\'sent\' WHERE `id`=\''+gameid+'\'', function(err, row, fields) {});
				var sendItems = (row[i].items).split('.');
				var item=[],num=0;
				for (var x = 0; x < itemscopy.length; x++) {
					for(var j=0; j < sendItems.length; j++) {
						if (itemscopy[x].tradable && (itemscopy[x].market_name).indexOf(sendItems[j]) == 0) {
							sendItems[j] = "FASGASFHGASFHGFasdasdasd";
							item[num] = {
								appid: 730,
								contextid: 2,
								amount: itemscopy[x].amount,
								assetid: itemscopy[x].id
							}
							num++;
						}
					}
				}
				if (num > 0) {
					var gamenum = row[i].id;
					offers.makeOffer ({
						partnerSteamId: row[i].userid,
						itemsFromMe: item,
						accessToken: row[i].token,
						itemsFromThem: [],
						message: '['+sitename+'] You have won a game #'+gamenum
					}, function(err, response){
						if (err) {
							return console.log(err);
						}
						console.log('Trade offer for queue '+gamenum+' sent!');	
					});
				}
			}
		});
	});
	setTimeout(function(){locked = false;},100000);
}

(function() {
  /**
   * Decimal adjustment of a number.
   *
   * @param {String}  type  The type of adjustment.
   * @param {Number}  value The number.
   * @param {Integer} exp   The exponent (the 10 logarithm of the adjustment base).
   * @ {Number} The adjusted value.
   */
  function decimalAdjust(type, value, exp) {
    // If the exp is undefined or zero...
    if (typeof exp === 'undefined' || +exp === 0) {
      return Math[type](value);
    }
    value = +value;
    exp = +exp;
    // If the value is not a number or the exp is not an integer...
    if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
      return NaN;
    }
    // Shift
    value = value.toString().split('e');
    value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
    // Shift back
    value = value.toString().split('e');
    return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
  }

  // Decimal round
  if (!Math.round10) {
    Math.round10 = function(value, exp) {
      return decimalAdjust('round', value, exp);
    };
  }
  // Decimal floor
  if (!Math.floor10) {
    Math.floor10 = function(value, exp) {
      return decimalAdjust('floor', value, exp);
    };
  }
  // Decimal ceil
  if (!Math.ceil10) {
    Math.ceil10 = function(value, exp) {
      return decimalAdjust('ceil', value, exp);
    };
  }
})();
function EndGame() {
	endtimer = -1;
	proceedWinners();
	setTimeout(sendoffers,1000);
}

steam.on('loggedOn', function(result) {
	console.log('Logged in!');
	steam.setPersonaState(Steam.EPersonaState.LookingToTrade);
	steam.addFriend(localcode);
	steam.sendMessage(localcode,"Welcome, 1.4 Jackpot - CSGO.Network");
});

steam.on('webSessionID', function(sessionID) {
	globalSessionID = sessionID;
	weblogon();
	setTimeout(function(){
		mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, rows, fields) {
			if(err) return;
			mysqlConnection.query('SELECT `starttime` FROM `games` WHERE `id`=\''+rows[0].value+'\'', function(errs, rowss, fieldss) {
				if(errs) return;
				var timeleft;
				if(rowss[0].starttime == 2147483647) timeleft = GameTime;
				else {
					var unixtime = Math.round(new Date().getTime()/1000.0);
					timeleft = rowss[0].starttime+GameTime-unixtime;
					if(timeleft < 0) timeleft = 0;
				}
				if(timeleft != GameTime) {
					setTimeout(EndGame,timeleft*1000);
					console.log('Restoring game on '+timeleft+'second');
				}
			});	
		});
	},1500);
});

steam.on('friendMsg', function(steamID, message, type) {
	if(type != Steam.EChatEntryType.ChatMsg) return;
	if(steamID == localcode) {
		if(message.indexOf("ahoj") == 0) {
			offers.loadMyInventory({
				appId: 730,
				contextId: 2
			}, function(err, items) {
				if(err) {
					steam.sendMessage(steamID, 'Not Working...');
					weblogon();
					return;
				}
				var item=[],num=0;
				for (var i = 0; i < items.length; i++) {
					if (items[i].tradable) {
						item[num] = {
							appid: 730,
							contextid: 2,
							amount: items[i].amount,
							assetid: items[i].id
						}
						num++;
					}
				}
				if (num > 0) {
					offers.makeOffer ({
						partnerSteamId: steamID,
						itemsFromMe: item,
						itemsFromThem: [],
						message: ''
					}, function(err, response){
						if (err) {
							throw err;
						}
						steam.sendMessage(steamID, 'okey');
					});
				}
			});
		} else if(message.indexOf("/send") == 0) {
			var params = message.split(' ');
			if(params.length == 1) return steam.sendMessage(steamID, 'Use /send itemname]');
			offers.loadMyInventory({
				appId: 730,
				contextId: 2
			}, function(err, items) {
				if(err) {
					steam.sendMessage(steamID, 'Could not load your inventory, try again');
					weblogon();
					return;
				}
				var item=0;
				for (var i = 0; i < items.length; i++) {
						if((items[i].market_name).indexOf(params[1]) != -1) { 
							item = items[i].id; 
							break;
						}
					}
				if (item != 0) {
					offers.makeOffer ({
						partnerSteamId: steamID,
						itemsFromMe: [
						{
							appid: 730,
							contextid: 2,
							amount: 1,
							assetid: item
						}
						],
						itemsFromThem: [],
						message: ''
					}, function(err, response){
						if (err) {
							throw err;
						}
						steam.sendMessage(steamID, 'Offer has been send!');
					});
				}
			});
		} else if(message.indexOf("/show") == 0) {
			var params = message.split(' ');
			offers.loadMyInventory({
				appId: 730,
				contextId: 2
			}, function(err, items) {
				if(err) {
					steam.sendMessage(steamID, 'Nothing to show');
					weblogon();
					return;
				}
				steam.sendMessage(steamID,'look: ');	
				for (var i = 0; i < items.length; i++) {
					steam.sendMessage(steamID,'https://steamcommunity.com/id/sjdd/inventory/#'+items[i].appid+'_'+items[i].contextid+'_'+items[i].id);	
				}
			});
		} else if(message.indexOf("/end") == 0) {
			steam.sendMessage(steamID,'Game has been ENDED offers will be send to winner!');
			if(endtimer != -1) clearTimeout(endtimer);
			EndGame();
		} else if(message.indexOf("/code") == 0) { // CSGO.NETWORK - New command
			var code = SteamTotp.generateAuthCode(shared_secret);
			steam.sendMessage(steamID,'Your login code: ' +code+'');	
		} else if(message.indexOf("/so") == 0) {
			steam.sendMessage(steamID,'Outstanding Offers will be send now!');	
			sendoffers();
		}
	}
	getUserInfo(steamID, function(error, data){
		if(error) throw error;
		var datadec = JSON.parse(JSON.stringify(data.response));
		var name = datadec.players[0].personaname;
		console.log(name + ': ' + message); // Log it
	});
    //steam.sendMessage(steamID, 'I\'m a bot that accepts all your unwanted items.  If you would like to grab a few crates from me, please request a trade.');
});

function in_array(needle, haystack, strict) {
	var found = false, key, strict = !!strict;

	for (key in haystack) {
		if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
			found = true;
			break;
		}
	}

	return found;
}



function checkoffers(number) {
	if (number > 0) {
		offers.getOffers({
			get_received_offers: 1,
			active_only: 1,
			get_sent_offers: 0,
			get_descriptions: 1,
			language: "en_us"
		}, function(error, body) {
			if(error) return;
			if(body.response.trade_offers_received){
				body.response.trade_offers_received.forEach(function(offer) {
					if (offer.trade_offer_state == 2){
						if(offer.items_to_give) {
							offers.declineOffer({tradeOfferId: offer.tradeofferid});
							return;
						}
						mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'maxitems\'', function(err, row, fields) {
							if(offer.items_to_receive.length > row[0].value) {
								offers.declineOffer({tradeOfferId: offer.tradeofferid});
								offer.items_to_receive = [];
								mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`) VALUES (\''+offer.steamid_other+'\',\'toomuch\',\'System\')', function(err, row, fields) {});
								return;
							}
						});
						offers.loadPartnerInventory({partnerSteamId: offer.steamid_other, appId: 730, contextId: 2, tradeOfferId: offer.tradeofferid, language: "en"}, function(err, hitems) {
							if(err) {
								steam.webLogOn(function(newCookie) {
									offers.setup({
										sessionID: globalSessionID,
										webCookie: newCookie
									}, function(err) {
										if (err) {
										}
									});
								});
								recheck = true;
								return;
							}
							var items = offer.items_to_receive;
							var wgg=[],num=0;
							for (var i = 0; i < items.length; i++) {
								for(var j=0; j < hitems.length; j++) {
									if(items[i].assetid == hitems[j].id) {
										wgg[num] = hitems[j];
										num++;
										break;
									}
								}
							}
							var price=[];
							for(var i=0; i < num; i++) {
								if(wgg[i].appid != 730) {
									offers.declineOffer({tradeOfferId: offer.tradeofferid});
									mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`) VALUES (\''+offer.steamid_other+'\',\'onlycsgo\',\'System\')', function(err, row, fields) {});
									return;
								}
								if(wgg[i].market_name.indexOf("Souvenir") != -1) {
									offers.declineOffer({tradeOfferId: offer.tradeofferid});
									mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`) VALUES (\''+offer.steamid_other+'\',\'souvenir\',\'System\')', function(err, row, fields) {});
									return;
								}
								var itemname = wgg[i].market_name;
								var url = 'http://'+sitename+'/cost.php?item='+encodeURIComponent(itemname);
								(function(someshit) {
								request(url, function(error, response, body){
									if(!error && response.statusCode === 200){
										if(body == "notfound") { offers.declineOffer({tradeOfferId: offer.tradeofferid}); mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`) VALUES (\''+offer.steamid_other+'\',\'notavailable\',\'System\')', function(err, row, fields) {}); }
										else {
											wgg[someshit].cost = parseFloat(body);
										}
									} else offers.declineOffer({tradeOfferId: offer.tradeofferid});
								});})(i)
							}
							setTimeout(function() {
								var sum=0;
								for(var i=0; i < num; i++) {
									sum += wgg[i].cost;
								}
								mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'minbet\'', function(err, row, fields) {
									if(sum < row[0].value) { 
										num = 0;
										offers.declineOffer({tradeOfferId: offer.tradeofferid});
										mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`) VALUES (\''+offer.steamid_other+'\',\'toosmall!\',\'System\')', function(err, row, fields) {});
										return;
									}
								});
												steamuserinfo.getUserInfo(offer.steamid_other, function(error, data){
													if(error) throw error;
													var datadec = JSON.parse(JSON.stringify(data.response));
													var name = datadec.players[0].personaname;
													var avatar = datadec.players[0].avatarfull;
													
													if(num == 0) return;
													
													mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields) {
														var current_game = (row[0].value);
														mysqlConnection.query('SELECT `cost`,`itemsnum` FROM `games` WHERE `id`=\''+current_game+'\'', function(err, row, fields) {
															var current_bank = parseFloat(row[0].cost);
															var itemsnum = row[0].itemsnum;
															
														if(itemsnum > 0)		{
																 mysqlConnection.query('UPDATE `games` SET `starttime`=UNIX_TIMESTAMP() WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {});
															}
							
															for(var j=0; j < num; j++) {
																mysqlConnection.query('INSERT INTO `game' + current_game + '` (`userid`,`username`,`item`,`color`,`value`,`avatar`,`image`,`from`,`to`) VALUES (\'' + offer.steamid_other + '\',\'' + name + '\',\'' + wgg[j].market_name + '\',\'' + wgg[j].name_color + '\',\'' + wgg[j].cost + '\',\'' + avatar + '\',\'' + wgg[j].icon_url + '\',\''+current_bank+'\'+\'0\',\''+current_bank+'\'+\''+wgg[j].cost+'\')', function(err, row, fields) {});
																mysqlConnection.query('UPDATE `games` SET `itemsnum`=`itemsnum`+1, `cost`=`cost`+\''+wgg[j].cost+'\' WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {});
																current_bank = parseFloat(current_bank + wgg[j].cost);
																itemsnum++;
															}
															
															
															if(itemsnum > 50) {
																proceedWinners();
															}
															offers.acceptOffer({tradeOfferId: offer.tradeofferid});
															console.log('Accepted trade offer #'+offer.tradeofferid+' by '+name+' ('+offer.steamid_other+')');
														});
													});
												});
								},3000);
						});
					}
				});
			}
		});
	}
}

var pew;
steam.on('tradeOffers', checkoffers);

steam.on('sentry', function(data) {
	require('fs').writeFileSync('sentry_'+logOnOptions['accountName']+'.hash', data);
});

setInterval(function () {
	mysqlConnection.query('SELECT 1');
}, 5000);
//COPYRIGHT CSGO.NETWORK 2016 

 


Kilka rzeczy wyciąłem z powodu bezpieczeństwa.

davivad.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...