Remove all members from a steam group that you admin/moderate
// ==UserScript==
// @name Purge Steam Group Members
// @namespace https://greasyfork.org/en/users/2205
// @version 0.1
// @description Remove all members from a steam group that you admin/moderate
// @license Apache-2.0
// @author Rudokhvist
// @match https://steamcommunity.com/groups/*/membersManage
// @icon https://www.google.com/s2/favicons?sz=64&domain=steamcommunity.com
// @grant unsafeWindow
// ==/UserScript==
(function() {
'use strict';
let workingDialog;
let steamIDs = [];
let selfID;
let groupLink;
let webLimiter = 300;
function KickMember(userindex) {
workingDialog.Dismiss();
workingDialog = unsafeWindow.ShowBlockingWaitDialog( 'Purge in progress', 'Please wait, ' + (steamIDs.length-userindex) +' members left' );
if (userindex >= steamIDs.length) {
workingDialog.Dismiss();
unsafeWindow.ShowAlertDialog("SUCCESS","Group purged");
unsafeWindow.location.reload();
return;
}
if (steamIDs[userindex].textContent.trim() === selfID) {
KickMember(userindex+1);
}
let xhr = new XMLHttpRequest();
xhr.open("POST", groupLink + "/membersManage", true);
xhr.responseType = "document";
xhr.onload = function () {
setTimeout(
(function (userindex) {
return function () {
KickMember(userindex);
};
})(userindex+1),
webLimiter
);
};
xhr.onerror = function () {
unsafeWindow.ShowAlertDialog("ERROR","Failed to remove member " + steamIDs[userindex].textContent.trim());
setTimeout(
(function (userindex) {
return function () {
KickMember(userindex);
};
})(userindex+1),
webLimiter
);
};
let body = new FormData();
body.append("sessionID",unsafeWindow.g_sessionID);
body.append("action","kick");
body.append("memberId",steamIDs[userindex].textContent.trim());
body.append("queryString","");
xhr.send(body);
}
function PurgeGroup () {
unsafeWindow.ShowConfirmDialog('WARNING', 'Are you sure you want to remove all users from the group?').done(function(){
let profileRegex = /(http[s]?:\/\/steamcommunity.com\/groups\/[^\/]*)\/membersManage.*/g;
let result = profileRegex.exec(document.location);
if (result) {
groupLink = result[1];
selfID = unsafeWindow.g_steamID;
let xhr = new XMLHttpRequest();
xhr.open("GET", groupLink + "/memberslistxml?xml=1", true);
xhr.responseType = "document";
xhr.onload = function () {
steamIDs = xhr.responseXML.documentElement.getElementsByTagName("steamID64");
console.log(steamIDs.length);
console.log(steamIDs);
workingDialog = unsafeWindow.ShowBlockingWaitDialog( 'Purge in progress', 'Please wait, ' + steamIDs.length +' members left' );
KickMember(0);
};
xhr.onerror = function () {
unsafeWindow.ShowAlertDialog("ERROR","Unable to load member list");
};
xhr.send();
} else {
unsafeWindow.ShowAlertDialog("ERROR","Unable to parse group name");
}
});
}
//main
let buttonText = `<div id="asf_stm_stop" class="btn_darkred_white_innerfade btn_medium_thin" style="float: right; margin-left: 10px;" title="Purge group">
<span>🧹</span>
</div>`;
let templateElement = document.createElement("template");
templateElement.innerHTML = buttonText.trim();
let button = templateElement.content.firstChild;
let splitter = document.querySelector("#searchAreaClear")
splitter.parentElement.insertBefore(button,splitter);
button.addEventListener("click", PurgeGroup);
})();