// ==UserScript== // @name GiveAwaySuHelper // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author sollyu // @icon https://giveaway.su/favicon-96x96.png // @match *://*.giveaway.su/giveaway/view/* // @connect steamcommunity.com // @connect steampowered.com // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_addStyle // @grant GM_xmlhttpRequest // @require https://cdn.staticfile.org/jquery/1.12.4/jquery.min.js // @run-at document-end // @downloadURL https://update.greasyfork.icu/scripts/373175/GiveAwaySuHelper.user.js // @updateURL https://update.greasyfork.icu/scripts/373175/GiveAwaySuHelper.meta.js // ==/UserScript== (function() { var steamHeper = new SteamHelper(); function onButtonClickJoin() { var button = $(this).text('...') GM_xmlhttpRequest({ url: "https://giveaway.su/action/redirect/" + $(this).attr("data-action-id"), method: 'GET', onload: function(response) { if (response.finalUrl.startsWith('https://store.steampowered.com/curator/')) { var clanID = response.finalUrl.match(/([0-9]+)/); clanID = clanID === null ? null : clanID[1]; steamHeper.followCurator(clanID, function(){ button.text('完') }) } else if (response.finalUrl.startsWith('https://steamcommunity.com/groups/')) { steamHeper.joinSteamGroup(response.finalUrl, function(){ button.text('完') }) } else if (response.finalUrl.startsWith('https://store.steampowered.com/app/')) { var appID = response.finalUrl.match(/([0-9]+)/); appID = appID === null ? null : appID[1]; steamHeper.addToWishList(appID, function(){ steamHeper.followGame(appID, function() { button.text('完') }) }) } } }) } function onButtonClickLeave() { var button = $(this).text('...') var finishNumber = 0 var actionSize = GM_getValue(window.location.pathname).length $.each(GM_getValue(window.location.pathname), function(index, value) { GM_xmlhttpRequest({ url : "https://giveaway.su/action/redirect/"+value, method: 'GET', onload: function(response) { finishNumber = finishNumber + 1 console.log(finishNumber) if (finishNumber == actionSize) { button.text('全部已经完成') } if (response.finalUrl.startsWith('https://store.steampowered.com/curator/')) { var clanID = response.finalUrl.match(/([0-9]+)/); clanID = clanID === null ? null : clanID[1]; steamHeper.unfollowCurator(clanID, function(){}) }else if (response.finalUrl.startsWith('https://steamcommunity.com/groups/')) { steamHeper.getGroupID(response.finalUrl, function(groupID) { steamHeper.leaveSteamGroup(groupID, function(){}) }) }else if (response.finalUrl.startsWith('https://store.steampowered.com/app/')) { var appID = response.finalUrl.match(/([0-9]+)/); appID = appID === null ? null : appID[1]; steamHeper.removeToWishList(appID, function(){ steamHeper.unfollowGame(appID, function() { }) }) } }, onerror: function(response) { finishNumber = finishNumber + 1 console.log(finishNumber) if (finishNumber == actionSize) { button.text('全部已经完成') } } }) }) } function SteamHelper() { this.groupSessionID = null; this.curatorSessionID = null; this.wishlistID = null; this.userId = null; this.processUrl = null; this.init = function(callback) { var that = this; GM_xmlhttpRequest({ url : "https://steamcommunity.com/my/groups", method: "GET", onload: function(response) { // debugger; that.userId = response.responseText.match(/g_steamID = \"(.+?)\";/); that.groupSessionID = response.responseText.match(/g_sessionID = \"(.+?)\";/); that.processUrl = response.responseText.match(/steamcommunity.com\/(id\/.+?|profiles\/[0-9]+)\/friends\//); that.userId = that.userId === null ? null : that.userId[1]; that.groupSessionID = that.groupSessionID === null ? null : that.groupSessionID[1]; that.processUrl = that.processUrl === null ? null : "https://steamcommunity.com/" + that.processUrl[1] + "/home_process"; GM_xmlhttpRequest({ url : 'https://store.steampowered.com/wishlist/profiles/', method: 'GET', onload: function(response) { that.curatorSessionID = response.responseText.match(/g_sessionID = \"(.+?)\";/); that.wishlistID = response.finalUrl.match(/([0-9]+)/); that.curatorSessionID = that.curatorSessionID === null ? null : that.curatorSessionID[1]; that.wishlistID = that.wishlistID === null ? null : that.wishlistID[1]; if($(".giveaway-info-block").find(".text-right").length == 0) { callback(false) }else { var actionID=[] $(".giveaway-info-block").find(".text-right").each(function(index, value){ $(this).append( $('').click(onButtonClickJoin)) actionID.push($(this).parent().attr('data-action-id')) }); GM_setValue(window.location.pathname, actionID) callback(true) } } }); } }); } this.joinSteamGroup = function(groupUrl, callback) { var that = this; GM_xmlhttpRequest({ url : groupUrl, method : 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, data : $.param({ action: 'join', sessionID: that.groupSessionID }), onload : function(response) { callback() } }); } this.leaveSteamGroup = function(groupId, callback) { var that = this; GM_xmlhttpRequest({ url : that.processUrl, method : 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, data : $.param({ sessionID: that.groupSessionID, action: "leaveGroup", groupId: groupId }), onload : function(response) { callback() } }); } this.followCurator = function(clanID, callback) { var that = this; GM_xmlhttpRequest({ url : 'https://store.steampowered.com/curators/ajaxfollow', method : 'POST', headers : {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, data : $.param({ clanid: clanID, follow: '1', sessionid: that.curatorSessionID }), onload : function(response) { callback() } }); } this.unfollowCurator = function(clanID, callback) { var that = this; GM_xmlhttpRequest({ url : 'https://store.steampowered.com/curators/ajaxfollow', method : 'POST', headers : {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, data : $.param({ clanid: clanID, follow: '0', sessionid: that.curatorSessionID }), onload : function(response) { callback() } }); } this.followGame = function(appID, callback) { var that = this; GM_xmlhttpRequest({ url : 'https://store.steampowered.com/explore/followgame/', method : 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, data : $.param({ appid: appID, sessionid: that.curatorSessionID }), onload : function(response) { callback() } }); } this.unfollowGame = function(appID, callback) { var that = this; GM_xmlhttpRequest({ url : 'https://store.steampowered.com/explore/followgame/', method : 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, data : $.param({ appid: appID, sessionid: that.curatorSessionID, unfollow: '1' }), onload : function(response) { callback() } }); } /** * Get the numeric ID for a Steam group */ this.getGroupID = function(groupUrl, callback) { GM_xmlhttpRequest({ url : groupUrl, method : "GET", headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, onload : function(response) { var group_id = response.responseText.match(/OpenGroupChat\( \'([0-9]+)\'/); group_id = group_id === null ? null : group_id[1]; callback(group_id); } }) } this.addToWishList = function(appID, callback) { var that = this; GM_xmlhttpRequest({ url : 'https://store.steampowered.com/api/addtowishlist', method : 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, data : $.param({ appid: appID, sessionid: that.curatorSessionID }), onload : function(response) { callback() } }) } this.removeToWishList = function(appID, callback) { var that = this; GM_xmlhttpRequest({ url : 'https://store.steampowered.com/wishlist/profiles/'+that.wishlistID+'/remove/', method : 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, data : $.param({ appid: appID, sessionid: that.curatorSessionID }), onload : function(response) { callback() } }); } } var initButton = $('') initButton.click(function(){ initButton.text('...') steamHeper.init(function(response) { initButton.remove() if (response == false) { $('.giveaway-info-block').before($('').click(onButtonClickLeave)) } }); }) $('.giveaway-info-block').before(initButton) })();