您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Block all member of a steam group
- // ==UserScript==
- // @name SteamGroupBlocker
- // @namespace https://greasyfork.org/users/191481
- // @version 0.1.1
- // @description Block all member of a steam group
- // @author Zeper
- // @match https://steamcommunity.com/groups/*/members
- // @match https://steamcommunity.com/groups/*/members/
- // @grant GM_xmlhttpRequest
- // @connect steamcommunity.com
- // ==/UserScript==
- var IsDebug = false;
- var xhr = new XMLHttpRequest();
- var parser = new DOMParser();
- var GroupMembers = [];
- var MemberCount = 0;
- var GroupName = "";
- var NextPageNum = 1;
- var Action = "block";
- var HasBlockBtnBeenPressed = false;
- // Error
- var ErrorCount = 0;
- var RetryOverError = 1;
- var NetErrorCount = 0;
- var RetryOverNetError = 3;
- var timestamp = 0;
- var minDelay = 30000;
- function EndOfScript(){
- HasBlockBtnBeenPressed = false;
- NextPageNum = 1;
- console.log("[SteamGroupBlocker] End of script, all members should have been "+Action+".");
- alert("[SteamGroupBlocker] End of script, all members should have been "+Action+".");
- return;
- }
- function GetGroupMembers(){
- if (NextPageNum == 0) {
- EndOfScript();
- } else {
- if (IsDebug){console.log("[SteamGroupBlocker] PageNum : "+NextPageNum);}
- GM_xmlhttpRequest ( {
- method: "GET",
- url: "http://steamcommunity.com/groups/"+GroupName+"/memberslistxml/?xml=1&p="+NextPageNum.toString(),
- onreadystatechange : function (response) {
- if (response.readyState == 4 && response.status == 200) {
- if (IsDebug){console.log(response.responseText);}
- var xmlDoc = parser.parseFromString(response.responseText,"text/xml");
- var SteamID64 = xmlDoc.getElementsByTagName("steamID64");
- if (MemberCount == 0) {
- var MemberCounts = xmlDoc.getElementsByTagName("memberCount");
- for (let Counts of MemberCounts) {
- if (Counts.parentNode.localName == "memberList") {
- MemberCount = parseInt(Counts.innerHTML);
- }
- }
- if (IsDebug){console.log("[SteamGroupBlocker] MemberCount : "+ JSON.stringify(MemberCount));}
- if (MemberCount >= 1000) {
- HasBlockBtnBeenPressed = false;
- console.warn("[SteamGroupBlocker] This group has a lot of member it will take time to "+Action+" all of them. At best 1000 users per 30 seconds.");
- console.warn("[SteamGroupBlocker] if you realy want to do it anyway click once more on the "+Action+" button");
- alert("[SteamGroupBlocker] This group has a lot of member it will take time to "+Action+" all of them. At best 1000 users per 30 seconds.");
- alert("[SteamGroupBlocker] if you realy want to do it anyway click once more on the "+Action+" button");
- return;
- }
- }
- for (let item of SteamID64) {
- GroupMembers.push(item.innerHTML);
- }
- if (IsDebug){
- console.log(GroupMembers);
- }
- var NextPage = xmlDoc.getElementsByTagName("nextPageLink");
- if (NextPage.length > 0){
- NextPage = NextPage[0].childNodes[0].data;
- var NextPageUrl = new URLSearchParams(NextPage);
- NextPageNum = NextPageUrl.get('p');
- } else { NextPageNum = 0}
- ActionOnSteamID();
- }
- }
- } );
- }
- }
- function ActionOnSteamID(){
- if (ErrorCount > RetryOverError) {
- throw new Error("[SteamGroupBlocker] Too much error when trying to block users, script will stop.");
- return;
- } else if (NetErrorCount > RetryOverNetError) {
- throw new Error("[SteamGroupBlocker] Too much network error when trying to block users maybe you are rate limited, script will stop.");
- return;
- } else {
- if (GroupMembers.length > 0) {
- var delay = 1;
- var steamIDstring = ""
- GroupMembers.forEach(steamID => {
- steamIDstring += "&steamids%5B%5D="+steamID;
- });
- if (IsDebug){console.log("[SteamGroupBlocker] steamIDstring : "+steamIDstring);}
- timestamp = Date.now();
- console.log("[SteamGroupBlocker] Sending "+Action+" request.");
- GM_xmlhttpRequest({
- method: 'POST',
- url: 'https://steamcommunity.com/profiles/'+g_steamID+'/friends/action',
- data: "sessionid="+g_sessionID.toString()+"&steamid="+g_steamID+"&ajax=1&action="+Action+steamIDstring,
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
- 'X-Requested-With': 'XMLHttpRequest'
- },
- onreadystatechange : function (response) {
- if (response.readyState == 4) {
- if (response.status == 200) {
- NetErrorCount = 0;
- var jsonResponse = JSON.parse(response.responseText);
- if (IsDebug){console.log("[SteamGroupBlocker] Block response : "+response.responseText);}
- if (IsDebug){console.log("[SteamGroupBlocker] Block response success : "+jsonResponse.success);}
- if (jsonResponse.success == 1) {
- ErrorCount = 0;
- GroupMembers.length = 0;
- if (NextPageNum == 0) {
- EndOfScript();
- return;
- }
- } else {
- ErrorCount++;
- }
- if ((Date.now() - timestamp) < minDelay) {delay = (minDelay-(Date.now() - timestamp))}
- console.log("[SteamGroupBlocker] Waiting : "+delay+" ms before next step...");
- setTimeout(() => {ActionOnSteamID();}, delay);
- } else {
- NetErrorCount++;
- setTimeout(() => {ActionOnSteamID();}, minDelay);
- }
- }
- }
- });
- } else if (NextPageNum == 0) {
- EndOfScript();
- } else {
- GetGroupMembers();
- }
- }
- }
- function BlockBtnPressed(){
- if (HasBlockBtnBeenPressed) {
- console.warn("[SteamGroupBlocker] Button already pressed.");
- return;
- } else {
- HasBlockBtnBeenPressed = true;
- Action = "block";
- GetGroupMembers();
- }
- }
- function UnBlockBtnPressed(){
- if (HasBlockBtnBeenPressed) {
- console.warn("[SteamGroupBlocker] Button already pressed.");
- return;
- } else {
- HasBlockBtnBeenPressed = true;
- Action = "unblock";
- GetGroupMembers();
- }
- }
- function DoGUI(){
- let BlockBtn = document.createElement('button');
- BlockBtn.className = ('btn_darkred_white_innerfade btn_medium');
- let BlockText = document.createElement('span');
- BlockText.append('BLOCK ALL USERS');
- BlockBtn.appendChild(BlockText);
- BlockBtn.addEventListener("click", BlockBtnPressed , false);
- document.querySelector("#searchEditForm > button").after(BlockBtn)
- let UnBlockBtn = document.createElement('button');
- UnBlockBtn.className = ('btn_darkblue_white_innerfade btn_medium');
- let UnBlockText = document.createElement('span');
- UnBlockText.append('UNBLOCK ALL USERS');
- UnBlockBtn.appendChild(UnBlockText);
- UnBlockBtn.addEventListener("click", UnBlockBtnPressed , false);
- BlockBtn.after(UnBlockBtn)
- }
- function Init(){
- let regex = /https:\/\/steamcommunity\.com\/groups\/([^;]+)\/members/;
- GroupName = window.document.baseURI.match(regex)[1];
- console.log("[SteamGroupBlocker] GroupName : "+GroupName);
- if (g_steamID === false) {
- throw new Error("[SteamGroupBlocker] You need to be logged into steam.");
- return;
- }
- DoGUI();
- }
- Init();