diff --git a/destroy-spammer/destroy-spammer.js b/destroy-spammer/destroy-spammer.js new file mode 100644 index 0000000..f7fdb78 --- /dev/null +++ b/destroy-spammer/destroy-spammer.js @@ -0,0 +1,73 @@ +// ==UserScript== +// @name Destroy Spammer +// @namespace https://github.com/Glorfindel83/ +// @description Adds a 'Destroy spammer' link for moderator on user profiles with only deleted posts. +// @author Glorfindel +// @version 0.1 +// @match *://*.stackexchange.com/users/* +// @match *://*.stackoverflow.com/users/* +// @match *://*.superuser.com/users/* +// @match *://*.serverfault.com/users/* +// @match *://*.askubuntu.com/users/* +// @match *://*.stackapps.com/users/* +// @match *://*.mathoverflow.net/users/* +// @grant none +// ==/UserScript== +(function () { + 'use strict'; + // Determine user ID + var userIDRegex = /\/users\/(\d+)\//g; + var userID = userIDRegex.exec(document.location) [1]; + var moderatorLinkElement = $('a#user-moderator-link-' + userID); + if (moderatorLinkElement.length == 0) // Current user is not a moderator - no action possible + return; + + // Check for (deleted) questions and answers + var questionsPanel = $('#user-panel-questions'); + var undeletedQuestions = questionsPanel.find('td.question-hyperlink').not('.deleted-answer').length; // yes, deleted-answer. Don't ask why. + var deletedQuestions = questionsPanel.find('td.question-hyperlink.deleted-answer').length; + if (undeletedQuestions > 0) // User has content - use the dialog instead + return; + var answersPanel = $('#user-panel-answers'); + var undeletedAnswers = answersPanel.find('td.answer-hyperlink').not('.deleted-answer').length; + var deletedAnswers = answersPanel.find('td.answer-hyperlink.deleted-answer').length; + if (undeletedAnswers > 0) // User has content - use the dialog instead + return; + if (deletedQuestions + deletedAnswers == 0) // User has no deleted content - use the dialog instead + return; + if (deletedQuestions + deletedAnswers > 4) // User has too much deleted content - use the dialog instead + return; + + // Create Destroy link + var destroyLink = document.createElement('a'); + destroyLink.appendChild(document.createTextNode('Destroy spammer')); + destroyLink.onclick = function () { + // 'Open' moderator menu + $.get({ + url: 'https://apple.stackexchange.com/admin/users/' + userID + '/moderator-menu?_=', + cache: false, + success: function (html) { + // Find key + var fkey = ($($.parseHTML(html)).find('input[name=fkey]').attr('value')); + + // Ask for confirmation + if (window.confirm('Are you sure?')) { + $.post({ + url: 'https://apple.stackexchange.com/admin/users/' + userID + '/destroy', + data: 'annotation=&deleteReasonDetails=&mod-actions=destroy&destroyReason=This+user+was+created+to+post+spam+or+nonsense+and+has+no+other+positive+participation&destroyReasonDetails=&fkey=' + fkey, + success: function (data) { + // Reload page + window.location.reload(); + }, + error: function (jqXHR, textStatus, errorThrown) { + console.log('Error: ' + textStatus + ' ' + errorThrown); + } + }); + } + } + }); + }; + + // Add to document + moderatorLinkElement.after(destroyLink); +}) ();