- // ==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
- // ==/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( $('<button type="button" class="btn btn-xs btn-default" data-action-id="' +$(this).parent().attr('data-action-id')+ '">加</button>').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 = $('<button style="width: 100%;" class="btn btn-xs btn-default" >初始化</button>')
- initButton.click(function(){
- initButton.text('...')
- steamHeper.init(function(response) {
- initButton.remove()
- if (response == false) {
- $('.giveaway-info-block').before($('<button style="width: 100%;" class="btn btn-xs btn-default" >全部退出</button>').click(onButtonClickLeave))
- }
- });
- })
- $('.giveaway-info-block').before(initButton)
- })();