User:DannyS712 test/PC bot.js

// $(function { var PC_bot_config = {	name: '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\| /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\n'; requestContent = requestContent + unique_root_user_pages.join('\n') + '\n\n\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\n'; requestContent = requestContent + unable_to_fix.join('\n') + '\n\n\n\nThanks, --~'; console.log(requestContent); var sectionHeading = 'Task 11: Help needed, '; 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.' ); }   }); } }); //