This commit is contained in:
Timo Hocker 2024-06-26 13:05:30 +02:00
commit d83c6b7efe
No known key found for this signature in database
GPG Key ID: 3B86485AC71C835C
5 changed files with 247 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/web-ext-artifacts

5
README.md Normal file
View File

@ -0,0 +1,5 @@
# Steam Game Deleter
- Unter about:debugging#/runtime/this-firefox -> Temporäres Addon laden -> manifest.json auswählen.
- https://store.steampowered.com/account/licenses/ (mit abschließendem slash) aufrufen
- Skript sollte laufen

BIN
icons/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

31
manifest.json Normal file
View File

@ -0,0 +1,31 @@
{
"manifest_version": 2,
"name": "Steam Game Delete",
"description": "Deletes Free Steam games from library",
"version": "0.0.1",
"icons": {
"128": "icons/icon.png"
},
"permissions": [
"tabs",
"https://store.steampowered.com/account/licenses/"
],
"background": {
"scripts": ["parsers.js", "background.js"]
},
"browser_specific_settings": {
"gecko": {
"id": "steam-games-delete@scode.ovh"
}
},
"content_scripts": [
{
"matches": ["https://store.steampowered.com/account/licenses/"],
"js": ["site_script.js"]
}
],
"browser_action": {
"default_icon": "icons/icon.png",
"default_title": "Steam Game Deleter"
}
}

210
site_script.js Normal file
View File

@ -0,0 +1,210 @@
(function() {
const delay = 500;
const licensesUrl = `https://store.steampowered.com/account/licenses/`;
const removeLicensesUrl = `https://store.steampowered.com/account/removelicense`;
const warningString = 'Code cannot be executed here. You will be automatically redirected to the correct page. Please run this code on Steam\'s account page details: store.steampowered.com/account/licenses';
const analysisHeader = 'Analyzing...';
const analysisText = 'Please wait until analysis is complete.';
const headerString = 'Games removing';
const okString = 'Remove';
const cancelString = 'Cancel';
const mainInfo = 'You have <b id="numberGames"></b> game(s) can be removed.<br/>Enter the number of games you want to remove.';
const errorMessage = 'Enter number from 0 to ';
const removingHeader = 'In Progress...';
const removingText = 'Don\'t forget to say thanks if you like the script ;) Removed:';
const noGamesToRemoveMessage = 'There are no games available for removing.'
const rateLimitedMessage = 'You have been rate limited, try again later!'
const errorMessage2 = 'An error was encountered while processing your request:'
if (location.href != (licensesUrl)) {
alert(warningString);
window.location = (licensesUrl);
return;
}
var freeLicensePackages = [];
var modal = ShowBlockingWaitDialog(analysisHeader, analysisText);
jQuery('.free_license_remove_link a').each(function(i, el) {
var matched = decodeURI(el.href).match(/\d{4,}/);
if (matched !== null) {
freeLicensePackages.push(+matched);
}
});
modal.Dismiss();
var total = freeLicensePackages.length;
if (total == 0) {
alert(noGamesToRemoveMessage);
return;
}
var enteredNumber = total;
var desc = jQuery(`<div class="newmodal_prompt_description">${mainInfo}</div><div><div class="newmodal_prompt_input gray_bevel for_text_input fullwidth"><input type="text" id="games_number" value="0"/><span style="display: none; color: rgb(255, 0, 0);"><small>${errorMessage}${total}</small></span></div></div>`);
var main = jQuery(`<div class="newmodal" style="position: fixed; z-index: 1000; max-width: 900px; left: 300px; top: 95px;"><div class="newmodal_header_border"><div class="newmodal_header"><div class="ellipsis">${headerString}</div></div></div><div class="newmodal_content_border"><div class="newmodal_content" style="max-height: 205px;"><div id="mainDiv"></div><div class="newmodal_buttons"><div class="btn_green_white_innerfade btn_medium"><span id="okButton">${okString}</span></div><div class="btn_grey_white_innerfade btn_medium"><span id="cancelButton">${cancelString}</span></div></div></div></div></div><div class="newmodal_background" style="opacity: 0.8;"></div>`);
jQuery('body').append(main);
jQuery('#cancelButton').on('click', function (event) {
jQuery('.newmodal').remove();
jQuery('.newmodal_background').remove();
});
jQuery('#mainDiv').html(desc);
jQuery('#numberGames').text(total);
jQuery('#games_number').val(total);
jQuery('#games_number').on('change', function (event) {
var input = jQuery(this);
var value = +input.val();
if (!Number.isInteger(value) || value > total || value <= 0) {
input.css('border-color', 'red');
input.next('span').show();
jQuery('#okButton').hide();
}
else {
enteredNumber = value;
input.css('border-color', '');
input.next('span').hide();
jQuery('#okButton').show();
}
});
var removed = 0;
jQuery('#okButton').on('click', function (event) {
jQuery('.newmodal').remove();
jQuery('.newmodal_background').remove();
proceed();
});
const proceed = () => {
if (modal) {
modal.Dismiss();
}
if (removed >= enteredNumber) {
location.reload();
}
else {
modal = ShowBlockingWaitDialog(removingHeader, `${removingText} <b>${removed}</b>/${enteredNumber}.`);
deleteFunc(removed++);
}
};
const deleteFunc = (index) => {
jQuery.ajax({url: removeLicensesUrl,
type: 'POST',
data: { packageid: freeLicensePackages[index], sessionid: g_sessionID },
success: function ( response ) {
if ( response.success == 1 ) {
setTimeout(() => proceed(), delay)
}
else {
modal.Dismiss();
if (response.success = 84)
ShowAlertDialog( 'Error', rateLimitedMessage + ' Error: ' + response.success);
else
ShowAlertDialog( 'Error', errorMessage2 + ' ' + response.success);
... (5 lines left)
Collapse
message.txt
5 KB

(function() {
const delay = 500;
const licensesUrl = `https://store.steampowered.com/account/licenses/`;
const removeLicensesUrl = `https://store.steampowered.com/account/removelicense`;
const warningString = 'Code cannot be executed here. You will be automatically redirected to the correct page. Please run this code on Steam\'s account page details: store.steampowered.com/account/licenses';
const analysisHeader = 'Analyzing...';
const analysisText = 'Please wait until analysis is complete.';
const headerString = 'Games removing';
const okString = 'Remove';
const cancelString = 'Cancel';
const mainInfo = 'You have <b id="numberGames"></b> game(s) can be removed.<br/>Enter the number of games you want to remove.';
const errorMessage = 'Enter number from 0 to ';
const removingHeader = 'In Progress...';
const removingText = 'Don\'t forget to say thanks if you like the script ;) Removed:';
const noGamesToRemoveMessage = 'There are no games available for removing.'
const rateLimitedMessage = 'You have been rate limited, try again later!'
const errorMessage2 = 'An error was encountered while processing your request:'
if (location.href != (licensesUrl)) {
alert(warningString);
window.location = (licensesUrl);
return;
}
var freeLicensePackages = [];
var modal = ShowBlockingWaitDialog(analysisHeader, analysisText);
jQuery('.free_license_remove_link a').each(function(i, el) {
var matched = decodeURI(el.href).match(/\d{4,}/);
if (matched !== null) {
freeLicensePackages.push(+matched);
}
});
modal.Dismiss();
var total = freeLicensePackages.length;
if (total == 0) {
alert(noGamesToRemoveMessage);
return;
}
var enteredNumber = total;
var desc = jQuery(`<div class="newmodal_prompt_description">${mainInfo}</div><div><div class="newmodal_prompt_input gray_bevel for_text_input fullwidth"><input type="text" id="games_number" value="0"/><span style="display: none; color: rgb(255, 0, 0);"><small>${errorMessage}${total}</small></span></div></div>`);
var main = jQuery(`<div class="newmodal" style="position: fixed; z-index: 1000; max-width: 900px; left: 300px; top: 95px;"><div class="newmodal_header_border"><div class="newmodal_header"><div class="ellipsis">${headerString}</div></div></div><div class="newmodal_content_border"><div class="newmodal_content" style="max-height: 205px;"><div id="mainDiv"></div><div class="newmodal_buttons"><div class="btn_green_white_innerfade btn_medium"><span id="okButton">${okString}</span></div><div class="btn_grey_white_innerfade btn_medium"><span id="cancelButton">${cancelString}</span></div></div></div></div></div><div class="newmodal_background" style="opacity: 0.8;"></div>`);
jQuery('body').append(main);
jQuery('#cancelButton').on('click', function (event) {
jQuery('.newmodal').remove();
jQuery('.newmodal_background').remove();
});
jQuery('#mainDiv').html(desc);
jQuery('#numberGames').text(total);
jQuery('#games_number').val(total);
jQuery('#games_number').on('change', function (event) {
var input = jQuery(this);
var value = +input.val();
if (!Number.isInteger(value) || value > total || value <= 0) {
input.css('border-color', 'red');
input.next('span').show();
jQuery('#okButton').hide();
}
else {
enteredNumber = value;
input.css('border-color', '');
input.next('span').hide();
jQuery('#okButton').show();
}
});
var removed = 0;
jQuery('#okButton').on('click', function (event) {
jQuery('.newmodal').remove();
jQuery('.newmodal_background').remove();
proceed();
});
const proceed = () => {
if (modal) {
modal.Dismiss();
}
if (removed >= enteredNumber) {
location.reload();
}
else {
modal = ShowBlockingWaitDialog(removingHeader, `${removingText} <b>${removed}</b>/${enteredNumber}.`);
deleteFunc(removed++);
}
};
const deleteFunc = (index) => {
jQuery.ajax({url: removeLicensesUrl,
type: 'POST',
data: { packageid: freeLicensePackages[index], sessionid: g_sessionID },
success: function ( response ) {
if ( response.success == 1 ) {
setTimeout(() => proceed(), delay)
}
else {
modal.Dismiss();
if (response.success = 84)
ShowAlertDialog( 'Error', rateLimitedMessage + ' Error: ' + response.success);
else
ShowAlertDialog( 'Error', errorMessage2 + ' ' + response.success);
}
}
})
};
}());