Steam

Steam

187 ratings
User script to auto remove free games from your account (RU/ENG)
By niron
User script to auto remove free games (f2p, demo) from your account and information how to use it.

Скрипт для удаления бесплатных игр (f2p, demo) с аккаунта в автоматическом режиме, а также информация об его использовании.
3
3
6
2
2
   
Award
Favorite
Favorited
Unfavorite
Русский язык
Предисловие
В свое время я наткнулся на очень интересный СКРИПТ[steamdb.info], который добавлял на аккаунт все бесплатные игры и DLC. Скрипт конечно полезный... Он добавил мне пару игр (не f2p, а игры, которые дают +1 в библиотеку) и DLC, которые я бы сам врядли нашел. К тому же, как я слышал, некоторые игры переходили из разряда бесплатных в платные, и если игра была на аккаунте, то она там уже и оставалась.
Но после я зашел к себе на аккаунт и ужаснулся (и это мягко говоря): мне было добавлено очень много шлака более 2000 бесплатных игр и демок, которые мне не интересны (не нужны, не буду играть и т.д. и т.п.)


И тогда я задумался: как же мне тут навести порядок?!? По одной игре в ручную удалять?!? Более 2000 игр?!? Ну раз есть скрипт для добавления бесплатных игр, то должен быть и скрипт для их удаления, подумал я. И начал искать... Но не нашел. Поэтому я написал свой.
Мой код анализирует страницу лицензий и подписок и исходя из этого удаляет бесплатные игры (т.е. он работает адресно). Позже я находил скрипты, которые отправляют множество запросов на сервер в большом диапазоне значений, хотя удаляемых игр там менее 50% (это как пальцем в небо - вдруг где попаду). И вот такой скрипт я бы не хотел использовать, потому что из-за ошибки на сервере Вы можете потерять и платные игры.
Внимание!
Используйте этот скрипт на свой страх и риск. Если Вы решите, что Вам не нужно все это, не запускайте его. Я не несу ответственность за все, что произойдет с Вами и Вашей учетной записью после использования этого скрипта.
Скрипт
Версия скрипта Ver. 2.5.0
(function() {
const delay = 150;
const licensesUrl = `https://steamoss.com/steamstore/account/licenses/`;
const removeLicensesUrl = `https://steamoss.com/steamstore/account/removelicense`;
const warningString = 'Код не может быть выполнен здесь. Сейчас Вы будете автоматически перенаправлены на страницу, где Вам нужно будет еще раз запустить этот код. Если этого не случилось, пожалуйста, перейдите на страницу: steamoss.com/steamstore/account/licenses/';
const analysisHeader = 'Выполняется анализ...';
const analysisText = 'Пожалуйста, подождите пока анализ не завершится.';
const headerString = 'Удаление игр';
const okString = 'Удалить';
const cancelString = 'Отмена';
const mainInfo = 'У Вас имеется <b id="numberGames"></b> игр(ы), которые можно удалить.<br/>Введите число игр для удаления в текстовое поле.';
const errorMessage = 'Введите целое число от 0 до ';
const removingHeader = 'Выполняется...';
const removingText = 'Не забудьте сказать спасибо, если Вам понравился скрипт;) Удалено:';
const noGamesToRemoveMessage = 'У Вас нет игр, которые можно удалить.'

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',
dataType: 'text',
data: { packageid: freeLicensePackages[index], sessionid: g_sessionID }}
).done(setTimeout(() => proceed(), delay)).fail(fail);
};
const fail = (data) => {
alert(data.responseText);
}
}());

Облегченная версия скрипта Ver1.0.2_Lite
В этой версии отсутствует проверка нахождение на нужной странице. И этот код удаляет все бесплатные игры, которые можно удалить. Т.е. скрипт не запрашивает, сколько Вы хотите удалить. Скрипт без "защиты от дурака". И на английском языке. Если будут заявки на русскую версию, то могу здесь опубликовать и с русским языком.
(function()
{ var freeLicensePackages = [];
var modal = ShowBlockingWaitDialog('Analyze...',
'Please wait until analysis is complete.');
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;
alert('Don\'t forget to say thanks to the author of the script - niron (that\'s me;)');
var removed = 0;
for(var i = 0 ; i < total; i++ ) {
jQuery.post('https://store' + '.steampowered.com/account/removelicense',
{ packageid: freeLicensePackages[i], sessionid: g_sessionID }
).always( function( ) {
removed++;
modal.Dismiss();
if( removed >= total ) {
location.reload();
}
else {
modal = ShowBlockingWaitDialog( 'Executing…',
'Don\'t forget to say thanks if You liked the script;) Removed <b>' + removed + '</b>/' + total + '.' );
}
}
);
}
}());
Как это работает?
При написании скрипта я использовал JavaScript, библиотеку jQuery (она подключена по умолчанию) и пару функций, реализованных разработчиками сайта steamoss.com/steamstore

Скрипт работает только на странице https://steamoss.com/steamstore/account/licenses/ (можно зайти так: Об аккаунте >> Лицензии и активации ключей). Но его можно запустить и на любой другой странице, хоть стартовой странице броузера, скрипт отправит на нужную страницу, где его нужно будет запустить еще раз.

Скрипт позволяет ввести необходимое число игр, которые хотите удалить (например только 50 из 100 возможных). В версии 2.0 появился полноценный UI.
Что нужно знать для запуска скрипта?
Скрипт нужно запускать через консоль. Если Вы вруг забыли как открыть консоль, то Вам сюда. Если нет, то ппреходите к следующему разделу

Браузер
Сочетание клавиш
Opera
Ctrl + Shift + I
Chrome
Ctrl + Shift + J или F12
Firefox
Ctrl + Shift + K или F12
Internet Explorer
F12, а затем перейти на вкладку “Консоль”
Microsoft Edge
F12, а затем перейти на вкладку “Консоль”
Safari
Cmd + Opt + C
Как это использовать?
А использовать этот скрипт очень легко!)
Дополнительно приводиться пример в браузере Mozilla Firefox 48.0.2.

  1. Открыть страницу Лицензии и ключи активации продуктов в браузере.
    Можно зайти и так: "Об аккаунте >> Лицензии и активации ключей". А можно запустить скрипт на любой странице, и он сам откроет нужную страницу.
    Конечно же Вы должны быть авторизованы (введен логин и пароль).
  2. Открыть консоль браузера.
    Если не знаете как, то для Вас написан предыдущий раздел.
  3. Скопировать скрипт и вставить его в консоль. Нажать Enter.
  4. После анализа будет выведено предложение об удалении всех доступных игр (у которых имеется кнопка "Удалить"). Или введите желаемое число игр для удаления. Если нажать Удалить, то запуститься процесс удаления. Если Отмена, то модальное окно закроется.
    * Steam постоянно меняется: на каком-то этапе было добавлено ограничение на количество запросов, которые можно отправить с одного IP адреса за короткий промежуток времени. Поэтому при удалении более 250 игр за раз (по словам Krad) можно получить ошибку
  5. Затем страница перезагружается, и мы видим что все получилось)
  6. Если же возникла ошибка (особенно "Access Denied"), и не все игры удалились, то можно или еще раз запустить скрипт, уменьшив количество удаляемых игр за раз, или доудалять оставшиеся игры вручную.
  7. Затем можно сказать спасибо автору, оценить, добавить в избранное и поделиться с друзьями :)
Заключение
Руководство будет изменяться и дополняться. Если Вы нашли ошибку в тексте, есть хорошее предложение по изменению руководства или скрипта, то буду благодарен если сообщите. Также буду очень рад Вашим оценкам и адекватной критике :)

Уважайте труд других людей. Не нужно копировать, видоизменять и распространять эту информацию от своего имени. Можно просто помочь с изменением руководства и скрипта, а затем поделиться ими с друзьями и знакомыми.

Спасибо за просмотр!
English
The Preface
I used this script[steamdb.info] to add all available games and DLC. The script was useful... It added some really interesting free games and DLC. But at the same time the script added a lot of uninteresting games/demos as well (more than 2500!)


And how can I remove these?!? Manually?!? More than 2500 games?!?
If there is the script to add, so should be a script to remove. But I haven't found....
So I wrote my own script. And after a few month, I had the time to write this guide to share the script
Attention!
Use this script at your own risk. If you decide that you don't want all that - not run the script. I'm not responsible for anything that happens to you and your account after using the script.

Script
RemoveScript Ver2.5.0 Eng
(function() {
const delay = 150;
const licensesUrl = `https://steamoss.com/steamstore/account/licenses/`;
const removeLicensesUrl = `https://steamoss.com/steamstore/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: steamoss.com/steamstore/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.'

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',
dataType: 'text',
data: { packageid: freeLicensePackages[index], sessionid: g_sessionID }}
).done(setTimeout(() => proceed(), delay)).fail(fail);
};
const fail = (data) => {
alert(data.responseText);
}
}());

RemoveScript Ver1.0.2 Lite
This code removes all free games that you can remove, without dialog windows and checks.
(function()
{ var freeLicensePackages = [];
var modal = ShowBlockingWaitDialog('Analyze...',
'Please wait until analysis is complete.');
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;
alert('Don\'t forget to say thanks to the author of the script - niron (that\'s me;)');
var removed = 0;
for(var i = 0 ; i < total; i++ ) {
jQuery.post('https://store' + '.steampowered.com/account/removelicense',
{ packageid: freeLicensePackages[i], sessionid: g_sessionID }
).always( function( ) {
removed++;
modal.Dismiss();
if( removed >= total ) {
location.reload();
}
else {
modal = ShowBlockingWaitDialog( 'Executing…',
'Don\'t forget to say thanks if You liked the script;) Removed <b>' + removed + '</b>/' + total + '.' );
}
}
);
}
}());
How to open the console in your browsers?
The script needs to be run from the console. How to open the development console in different browsers? If you suddenly forget it...)

Browsers
Keys
Opera
Ctrl + Shift + I
Chrome
Ctrl + Shift + J or F12
Firefox
Ctrl + Shift + K or F12
Internet Explorer
F12, then click on the “Console” tab
Microsoft Edge
F12, then click on the “Console” tab
Safari
Cmd + Opt + C
How to use this?
It's easy!)
For example, I use Mozilla Firefox 48.0.2.

  1. Open your licenses and subscriptions page in your browser.
    You can go this way: "Account details >> View licenses and product key activations". Or you can launch the script on any page, and script will open the necessary page, where you need to launch the script again.
    And you need to be logged in of course.
  2. Open console in your browser
  3. Copy and run this code from the console
  4. When the analysis completes, you are prompted to remove all the available games (which have a delete button - as in the screenshot)
    If you click Remove, script will start removal process. Or you can change number of games you want to remove. If you click Cancel, the modal window will be closed.
    *Steam is changed: a limit was added on the number of requests from one IP address in a short period of time. As a result, you may get an error when removing more than 250 (according to Krad) games
  5. Then the page wiil be reloaded and... Enjoy :)
  6. If you get an error ("Access Denied" especially), try to decrese number of games to remove and run the script again.
  7. Then you can thank the author, rate, add to your favorites, and share with friends :)
Note
If you find a mistake in the text, or you have a good proposal to improve the guide or the script, I would be grateful if you inform me. Also I'll be very glad to your rank :)

Respect the work of others. No need to copy, modify, and distribute this information on your behalf. You can help change the guide and script and then share them with your friends.

Thanks for reading!
121 Comments
The Clintinator 25 Dec, 2024 @ 3:56pm 
i can never seem to get this to work any tips?
Xymenyahy 14 Dec, 2024 @ 12:59am 
@bebrik_varenik You are the best in the World Bro ! It works like a charm without any rate limit ! I love you !!!:steamthis::steamthumbsup:
bebrik_varenik 7 Dec, 2024 @ 9:45pm 
Guys, I found a way to clear even 400+ games per hour. Use macro programs, personally I used TGMacro and made most optimal and fast path for cursor. Finally all this trash games dissapeared!
[VS] ЯavenStryker 7 Dec, 2024 @ 11:52am 
So I'm on my licenses page, but when I open the browser console while on that page and paste to execute this code on that page, I get the following error. Any thoughts on why it is saying that even though I'm on the correct page? I'm trying to use the RemoveScript Ver2.5.0 Eng

"Code cannot be executed here. You will be automatically redirected to the correct page. Please run this code on Steam's account page details: steamoss.com/steamstore/account/licenses"
Natrunno ヴァガント 26 Sep, 2024 @ 3:06pm 
Это конечно круто, но у тех людей, у которых есть много купленных, я бы не стал рисковать. Я всё таки сам поудаляю 5000 бесплатнх игр. И сохраню все купленные, не хотелось бы терять. А так у кого мало игр и много бесплатных, могут попробовать.
Автор молодец что сделал такой скрипт :aushrug::steamthumbsup:
NastyGlitch 24 Aug, 2024 @ 6:38am 
Quick question before doing this, will it delete also the save and progress on cloud of the game i remove from account? Need to know for sure before doing this :D
teh_hahn 22 Aug, 2024 @ 1:17pm 
Thanks for the script. Because of the rate limit this will take some time, though... I've added too much free packages in the past cluttering my Steam library now.
Storm 20 Aug, 2024 @ 10:47am 
You are a lifesaver!
pizzahut 17 Aug, 2024 @ 12:30pm 
https://gist.github.com/pizzahut2/27dcb968b1ab751c4d77b5ebc09f2d9e

Made some changes to the updated script by F9 from May 17, 2024. Instead of terminating when a rate limit is hit, it tries again after a 10m delay. The dialogue is updated instantly to show the additional waiting time. So the delay now happens at a different place in the code.

I also made a not published revision which doesn't try to switch back to a short delay. But it's probably better to always try the short delay first in case Valve changes the timing - as long as such failed removal attempts don't increase the waiting time.
Mad Predo 27 Jul, 2024 @ 4:17pm 
Did anyone notice a sudden drop in the amount of games to be removed? I had around 24k the day before yesterday, but now I have only 10k. I also noticed that I have a lot less "demo" packages in the licenses page.