User:DannyS712 test/PC bot.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:DannyS712 test/PC bot. |
//<nowiki>
$(function (){
var PC_bot_config = {
name: '[[User:DannyS712/PC bot|PC bot]]',
version: '1.8.1',
debug: false
};
var PC_bot_advert = "Task 11: Disable the categories on this page while it is still a draft, per [[WP:USERNOCAT]], using " + PC_bot_config.name + " (v. " + PC_bot_config.version + ")";
var root_user_pages = [];
var will_fix = [];
var unable_to_fix = [];
mw.loader.using( 'mediawiki.util', function () {
$(document).ready( function () {
importScript( 'User:DannyS712 test/page.js' );
if ( mw.config.get( 'wgPageName' ) === "Wikipedia:Database_reports/Polluted_categories") {
$(document).ready( function () {
mw.util.addPortletLink ( 'p-cactions', 'javascript:void(0)', 'Polluted categories', 'ca-polluted', 'TOOLTIP');
$('#ca-polluted').on('click', function() {
Polluted_categories();
} );
} );
}
} );
} );
function PC_bot ( category_name ) {
return new Promise((resolve) => {
console.log( '\t', category_name );
var getDrafts = {
action: 'query',
list: 'categorymembers',
cmlimit: 'max',
cmtitle: category_name,
cmprop: 'title',
format: 'json'
};
$.get( mw.config.get( 'wgScriptPath' ) + '/api.php', getDrafts, function( Drafts ) {
//console.log(Drafts);
var pages = Drafts.query.categorymembers;
for (var i = 0; i < pages.length; i++) {
if (pages[i].ns === 2){
var name = pages[i].title;
//console.log("Page:", name);
if ( name.indexOf('/') > -1 ){
console.log("Will try:", name);
will_fix.push( name );
//draft_no_cat( name );
} else {
console.log( "Root user page:", name);
root_user_pages.push( '* [[' + name + ']]' );
}
}
}
//location.reload();
resolve();
} );
} );
}
async function Polluted_categories(){
var content1 = get_page( mw.config.get( 'wgPageName' ) );
if (PC_bot_config.debug) console.log( content1 );
var content2 = content1.replace( /\|-\n\| (\d*)\n\| {{dbr link\|1=(.*)}}/g, '"$2",');
if (PC_bot_config.debug) console.log( content2 );
var content3 = content2.replace( /(.*\n)*! Category\n/i, '{\n"Pages": [');
if (PC_bot_config.debug) console.log( content3 );
var content4 = content3.replace ( /,\n\|}/, "\n] }");
if (PC_bot_config.debug) console.log( content3 );
var content5 = content4.replace ( /_/g, " ");
if (PC_bot_config.debug) console.log( content5 );
var as_JSON = JSON.parse( content5 );
if (PC_bot_config.debug) console.log( as_JSON );
var array = as_JSON.Pages;
console.log( array );
var page = "";
for (var iii = 0; iii < array.length; iii++){
page = 'Category:' + array[iii];
if (/AfC submissions.*/.test(page)) console.log( "Skip: AfC" );
else if (/.*Wikipedians/.test(page)) console.log( "Skip: Wikipedians");
else if (/Wikipedia.*/.test(page)) console.log( "Skip: Wikipedia");
else if (/WikiProject.*/.test(page)) console.log( "Skip: WikiProject");
else if (/.*ArtAndFeminism.*/.test(page)) console.log( "Skip: ArtAndFeminism");
else if (/.*User pages.*/.test(page)) console.log( "Skip: User page");
else if (/.*Portal templates.*/.test(page)) console.log( "Skip: Portal templates");
else {
await PC_bot( page );
}
}
var to_try = [...new Set(will_fix)];
//console.log( to_try );
for (var jjj = 0; jjj < to_try.length; jjj++){
await draft_no_cat(to_try[jjj]);
}
//console.log("Unable to fix:", unable_to_fix);
var unique_root_user_pages = [...new Set(root_user_pages)];
//console.log( "Root user pages skipped:", unique_root_user_pages );
var requestContent = 'DannyS712 bot needs help with task 11 (polluted categories); the following pages appear to be categorized as articles, but weren\'t automatically fixed because they are root user pages:\n\n{{div col}}\n';
requestContent = requestContent + unique_root_user_pages.join('\n') + '\n\n{{div col end}}\n\n';
requestContent = requestContent + 'Additionally, the following pages appear to be categorized as articles through the transclusion of templates, and so I couldn\'t fix them.\n\n{{div col}}\n';
requestContent = requestContent + unable_to_fix.join('\n') + '\n\n{{div col end}}\n\nThanks, --~~~~';
console.log(requestContent);
var sectionHeading = 'Task 11: Help needed, {{subst:#time: Y-m-d }}';
var requestSummary = 'DannyS712 bot needs help - requested using ' + PC_bot_config.name + " (v. " + PC_bot_config.version + ")";
//botNeedsHelp(requestSummary, sectionHeading, requestContent);
}
function draft_no_cat( title ){
return new Promise((resolve) => {
var send_req = {
action: 'query',
titles: title,
prop: 'revisions',
intoken: 'edit',
rvprop: 'content',
indexpageids: 1,
dataType: 'xml',
format: 'xml'
};
$.get( mw.config.get( 'wgScriptPath' ) + '/api.php', send_req, function( response ) {
var text = $( response ).find( 'rev' ).text();
var new_text = text.replace( /\[\[Category/gi, '\[\[:Category' ); // Replace categorization with links
var submit = {
action: 'edit',
title: title,
text: new_text,
summary: PC_bot_advert,
minor: true,
bot: true,
token: mw.user.tokens.get( 'csrfToken' )
};
if ( text === new_text ) {
console.log('Unable to fix: ' + title);
unable_to_fix.push( '* [[' + title + ']]' );
} else {
$.when(
$.post( mw.config.get( 'wgScriptPath' ) + '/api.php', submit, function( response ){ } )
).done( function() {
console.log("Done: " + title);
} );
}
resolve();
} );
} );
}
function botNeedsHelp( summary, title, content) {
$.ajax({
url: mw.util.wikiScript( 'api' ),
data: {
format: 'json',
action: 'edit',
title: 'User talk:DannyS712 bot',
section: 'new',
sectiontitle: title,
summary: summary,
text: content,
token: mw.user.tokens.get( 'csrfToken' )
},
dataType: 'json',
type: 'POST',
success: function( data ) {
if ( data && data.edit && data.edit.result == 'Success' ) {
console.log( 'Help requested' ); // reload page if edit was successful
} else if ( data && data.error ) {
alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
} else {
alert( 'Error: Unknown result from API.' );
}
},
error: function( xhr ) {
alert( 'Error: Request failed.' );
}
});
}
});
//</nowiki>