NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name SG Bot
// @namespace SGB
// @icon http://www.steamgifts.com/favicon.ico?v=9
// @updateURL https://openuserjs.org/src/scripts/diegokfu/SG_Bot.user.js
// @downloadURL https://openuserjs.org/src/scripts/diegokfu/SG_Bot.user.js
// @match *://www.steamgifts.com*
// @version 0.4
// @grant none
// @require https://gist.githubusercontent.com/arantius/3123124/raw/grant-none-shim.js
// @author Diego Ferreira
// ==/UserScript==
var currentPoints=parseInt(document.getElementsByClassName("nav__points")[0].innerHTML);
var MaximumPointstoEnter=(currentPoints > 70) ? parseInt(currentPoints/10) : 7;
var MaximumTimetoEnter=300;
var MaximumEntriesToEnter=900;
var BotActive=true;
var Comentarios=["Thanks mate :)","hope you have a nice day! :)", "Thanks for sharing!", "Thx:D", "thanks dude!", "ty :3", "thx", "TEXT you for the giveaway (۶•̀ᴗ•́)۶" ,"Thanks!", "Thank you for this chance! :D", "ty for giveaway :3", "Thank you!", "Thank you very much ^^", "You are awesome! Thanks a lot! ;)", "Obrigado. Thanks. Danke. 고맙습니다 Gracias. Merci. Grazie. ありがとうございました спасибо 谢谢 Teşekkür ederim dziękuję :)", "Thanks for the awesome giveaway!"];
var xsrf = $('input[type=hidden][name=xsrf_token]').val();
var loggedin = ($('.nav__sits').length > 0) ? false : true;
var GiveawaysToEnter=[];
setInterval(refreshP,60*1000);
var html='<div class="nav__button-container" style="padding:0px; margin:auto 70px 0px 0px;"><div class="nav__relative-dropdown is-hidden"><div class="nav__absolute-dropdown">';
html+='<a class="nav__row" href="http://www.steamgifts.com/giveaways/entered"><i class="icon-grey fa fa-fw fa-edit"></i><div class="nav__row__summary"><p class="nav__row__summary__name">Contador de Sorteios</p><p class="nav__row__summary__description">Entrou em um total de <span id="GiveawayCounter">'+number_format(GM_getValue("GiveawaysCount" ,0), 0)+'</span> Sorteios.</p></div></a>';
html+='<a class="nav__row" href="#"><i class="fa fa-fw fa-info-circle" style="color:lightblue"></i><div class="nav__row__summary"><p class="nav__row__summary__name">Configurações</p><p class="nav__row__summary__description">Entrando em Sorteios de até <span id="PointsCounter">'+MaximumPointstoEnter+'</span> pontos.</p></div></a>';
//html+='<a id="syncsteam" class="nav__row" href="#"><i class="icon-green fa fa-fw fa-refresh"></i><div class="nav__row__summary"><p class="nav__row__summary__name">Sincronizar conta com Steam</p><p class="nav__row__summary__description">Sincronizar conta Steam em 1 Clique.</p></div></a>';
html+='</div></div><div id="sgbot" class="nav__button">SteamGift Bot</div> <div class="nav__button nav__button--is-dropdown-arrow"><i class="fa fa-angle-down"></i></div></div>';
$(".nav__right-container").before(html);
$("#syncsteam").click(sync);
function number_format( numero, decimal, decimal_separador, milhar_separador ){
numero = (numero + '').replace(/[^0-9+\-Ee.]/g, '');
var n = !isFinite(+numero) ? 0 : +numero,
prec = !isFinite(+decimal) ? 0 : Math.abs(decimal),
sep = (typeof milhar_separador === 'undefined') ? ',' : milhar_separador,
dec = (typeof decimal_separador === 'undefined') ? '.' : decimal_separador,
s = '',
toFixedFix = function (n, prec) {
var k = Math.pow(10, prec);
return '' + Math.round(n * k) / k;
};
// Fix para IE: parseFloat(0.55).toFixed(0) = 0;
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
if (s[0].length > 3) {
s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
}
if ((s[1] || '').length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1).join('0');
}
return s.join(dec);
}
function secLeft(ExpireDate){
var curDate=new Date(); curDate=new Date(curDate.toGMTString());
ExpireDate=new Date(ExpireDate);
var secLeft=(ExpireDate.getTime() - curDate.getTime()) / (1000 * 1 * 1 * 1);
return secLeft;
}
function doThanksComment(giveaway){
var comentario=Comentarios[Math.floor(Math.random()*Comentarios.length)];
$.ajax({
url: "http://www.steamgifts.com/giveaway/"+giveaway,
type: "POST",
data: "xsrf_token="+xsrf+"&do=comment_new&parent_id=&description="+comentario,
success: function(e) {
//success
}
});
}
if(document.location.href.toLowerCase().indexOf("giveaways/won") > -1){
$(".table__column--width-small.text-center.table__column--gift-feedback").click(sync);
}
function sync(){
$.ajax({
url: "/ajax.php",
type: "POST",
dataType: "json",
data: "xsrf_token="+xsrf+"&do=sync",
success: function(e) {
if(e.msg.toLowerCase().indexOf("success") > -1){
//alert("Conta sincronizada com sucesso!");
} else {
// alert("Ocorreu algum erro ao sincronizar, tente mais tarde :c");
}
}
});
}
function refreshP(){
$.ajax({
url: "/ajax.php",
type: "POST",
dataType: "json",
data: "xsrf_token="+xsrf+"&do=entry_insert",
success: function(e) {
if($(".nav__points").text()!=e.points){
$(".nav__points").text(e.points);
currentPoints=parseInt(e.points);
MaximumPointstoEnter=(currentPoints > 70) ? parseInt(currentPoints/10) : 7;
}
}
});
}
function AlreadyEnter(code){
if(GM_getValue("enteredGiveaways") == null){ GM_setValue("enteredGiveaways","[]"); }
var enteredGiveaways = JSON.parse(GM_getValue("enteredGiveaways"));
var Entered=false;
for(var x=0; x < enteredGiveaways.length; x++){
if(enteredGiveaways[x] != undefined && enteredGiveaways[x].code == code){
Entered=true;
}
}
return Entered;
}
function removeEnteredFromCode(code){
if(GM_getValue("enteredGiveaways") == null){ GM_setValue("enteredGiveaways","[]"); }
var enteredGiveaways = JSON.parse(GM_getValue("enteredGiveaways"));
for(var x=0;x<enteredGiveaways.length;x++){
if(enteredGiveaways[x] != undefined && enteredGiveaways[x].code == code){
enteredGiveaways.splice(x,1);
}
}
GM_setValue("enteredGiveaways", JSON.stringify(enteredGiveaways));
}
function removeGiveawayToEnterFromCode(code){
for(var x=0;x<GiveawaysToEnter.length;x++){
if(GiveawaysToEnter[x] != undefined && GiveawaysToEnter[x].code == code){
GiveawaysToEnter.splice(x,1);
}
}
}
function expireGiveaways(){
if(GM_getValue("enteredGiveaways") == null){ GM_setValue("enteredGiveaways","[]"); }
var enteredGiveaways = JSON.parse(GM_getValue("enteredGiveaways"));
// console.log('antes',enteredGiveaways);
for(var x=0;x<enteredGiveaways.length;x++){
if(enteredGiveaways[x] != undefined){
var curDate=new Date(); curDate=new Date(curDate.toGMTString());
var ExpireDate=enteredGiveaways[x].expireDate;
if(secLeft(ExpireDate) <= 0){
removeEnteredFromCode(enteredGiveaways[x].code);
}
}
}
// console.log('dps',enteredGiveaways);
GM_setValue("enteredGiveaways", JSON.stringify(enteredGiveaways));
}
function getEnteredGiveawayFromCode(code){
if(GM_getValue("enteredGiveaways") == null){ GM_setValue("enteredGiveaways","[]"); }
var enteredGiveaways = JSON.parse(GM_getValue("enteredGiveaways"));
for(var x=0; x < enteredGiveaways.length; x++){
if(enteredGiveaways[x].code == code){
return enteredGiveaways[x];
}
}
return null;
}
function pushNew(code, expireDate){
if(GM_getValue("enteredGiveaways") == null){ GM_setValue("enteredGiveaways","[]"); }
var enteredGiveaways = JSON.parse(GM_getValue("enteredGiveaways"));
enteredGiveaways.push( { code:code, expireDate:expireDate } );
GM_setValue("GiveawaysCount", parseInt(parseInt(GM_getValue("GiveawaysCount" , 0))+1));
$("#GiveawayCounter").html(number_format(GM_getValue("GiveawaysCount" ,0), 0));
GM_setValue("enteredGiveaways", JSON.stringify(enteredGiveaways));
//console.log('entered',enteredGiveaways.length);
}
function enterGiveaway(code, expireDate, url){
$.ajax({
url: "http://www.steamgifts.com/ajax.php",
type: "POST",
dataType: "json",
data: "xsrf_token="+xsrf+"&do=entry_insert&code="+code,
success: function(e) {
if(e.type == "success"){
currentPoints=e.points;
MaximumPointstoEnter=(currentPoints > 70) ? parseInt(currentPoints/10) : 7;
$("#PointsCounter").html(MaximumPointstoEnter);
pushNew(code, expireDate);
doThanksComment(url); //if(Math.random() < .6){ doThanksComment(url); }
document.getElementsByClassName("nav__points")[0].innerHTML=currentPoints;
}
}
});
}
function leaveGiveaway(code){
if(GM_getValue("enteredGiveaways") == null){ GM_setValue("enteredGiveaways","[]"); }
var enteredGiveaways = JSON.parse(GM_getValue("enteredGiveaways"));
$.ajax({
url: "/ajax.php",
type: "POST",
dataType: "json",
data: "xsrf_token="+xsrf+"&do=entry_delete&code="+code,
success: function(e) {
currentPoints=e.points;
MaximumPointstoEnter=(currentPoints > 70) ? parseInt(currentPoints/10) : 7;
$("#PointsCounter").html(MaximumPointstoEnter);
if(e.type == success){
if(enteredGiveaways.indexOf(code) != -1){
enteredGiveaways.splice(enteredGiveaways.indexOf(code),1);
GM_setValue("enteredGiveaways", JSON.stringify(enteredGiveaways));
}
//e.entry_count
}
}
});
}
function sortGiveaways(array){
array.sort(function (a, b) {
if (a.left > b.left) {
return 1;
}
if (a.left< b.left) {
return -1;
}
// a must be equal to b
return 0;
});
array.sort(function (a, b) {
if (a.points > b.points) {
return 1;
}
if (a.points < b.points) {
return -1;
}
// a must be equal to b
return 0;
});
return array;
}
function newGiveawayToEnter(GameCode, Points, secLeft, ExpireDate, GameURL){
var push=true;
for(var x=0; x < GiveawaysToEnter.length; x++){
if(GiveawaysToEnter[x] != undefined && GiveawaysToEnter[x].code == GameCode){
push=false;
}
}
if(push){
GiveawaysToEnter.push( { left:secLeft, points:Points, code:GameCode, ExpireDate:ExpireDate, URL:GameURL } );
}
}
function checkForGiveaways(){ if(!BotActive){return;}
$.get("http://www.steamgifts.com/giveaways/search?page=1", function(r, textStatus){
var xmlString = r
, parser = new DOMParser()
, doc = parser.parseFromString(xmlString, "text/html");
for(var x=0; x < doc.getElementsByClassName("giveaway__summary").length; x++){
var Copies=1;
var Points=0;
for(var i=0; i < doc.getElementsByClassName("giveaway__summary")[x].childNodes[1].getElementsByTagName("span").length; i++){
if(doc.getElementsByClassName("giveaway__summary")[x].childNodes[1].getElementsByTagName("span")[i].innerHTML != undefined && doc.getElementsByClassName("giveaway__summary")[x].childNodes[1].getElementsByTagName("span")[i].innerHTML.indexOf("P)") > -1){
Points=parseInt(doc.getElementsByClassName("giveaway__summary")[x].childNodes[1].getElementsByTagName("span")[i].innerHTML.replace("(", ""));
}
if(doc.getElementsByClassName("giveaway__summary")[x].childNodes[1].getElementsByTagName("span")[i].innerHTML != undefined && doc.getElementsByClassName("giveaway__summary")[x].childNodes[1].getElementsByTagName("span")[i].innerHTML.indexOf("Copies)") > -1){
Copies=parseInt(doc.getElementsByClassName("giveaway__summary")[x].childNodes[1].getElementsByTagName("span")[i].innerHTML.replace("(", ""));
}
}
var Game=doc.getElementsByClassName("giveaway__summary")[x].childNodes[1].childNodes[1].innerHTML;
var GameCode=doc.getElementsByClassName("giveaway__summary")[x].childNodes[1].childNodes[1].href.split("/giveaway/")[1].split("/")[0];
var GameURL=doc.getElementsByClassName("giveaway__summary")[x].childNodes[1].childNodes[1].href.split("/giveaway/")[1];
var EndTime=doc.getElementsByClassName("giveaway__summary")[x].childNodes[3].childNodes[1].childNodes[2].title;
var curDate=new Date(); curDate=new Date(curDate.toGMTString());
var ExpireDate=new Date(EndTime.replace("pm"," pm").replace("am"," am").replace("Today, ", curDate.toDateString()+" "));
var secLeft=(ExpireDate.getTime() - curDate.getTime()) / (1000 * 1 * 1 * 1);
var Entries=parseFloat(doc.getElementsByClassName("giveaway__summary")[x].childNodes[5].childNodes[1].childNodes[2].innerHTML.replace(",", "."));
Entries=parseInt(parseInt(Entries.toString().replace(".",""))/Copies);
if(secLeft > 0 && secLeft <= MaximumTimetoEnter && Entries <= MaximumEntriesToEnter && currentPoints >= Points && Points <= MaximumPointstoEnter && !AlreadyEnter(GameCode)){
newGiveawayToEnter(GameCode, Points, secLeft, ExpireDate, GameURL);
} else if(Points < 2){
newGiveawayToEnter(GameCode, Points, secLeft, ExpireDate, GameURL);
}
}
var array=sortGiveaways(GiveawaysToEnter);
for(var x=0; x<array.length;x++){
if(array[x] != undefined && !AlreadyEnter(array[x].code)){
enterGiveaway(array[x].code, array[x].ExpireDate, array[x].URL);
}
}
currentPoints=doc.getElementsByClassName("nav__points")[0].innerHTML;
MaximumPointstoEnter=(currentPoints > 70) ? parseInt(currentPoints/10) : 7;
$("#PointsCounter").html(MaximumPointstoEnter);
});
}
if(BotActive && loggedin){
setInterval(checkForGiveaways,30*1000);
setInterval(expireGiveaways,60*1000);
checkForGiveaways();
}