Jump to content

User:DannyS712 test/remind bot.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by DannyS712 test (talk | contribs) at 03:24, 5 February 2019 (brean on match). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
(function() {
RemindBot_config = {
	name: "[[User:DannyS712/Remind Bot.js|Remind Bot]]",
	version: 1.0,
	debug: true
};

mw.loader.using( 'mediawiki.util', function () {
    importScript('User:DannyS712 test/get JSON.js');
    importScript('User:DannyS712 test/set JSON.js');
    $(document).ready( function () { 
        mw.util.addPortletLink( 'p-cactions', null, 'Remind BOT', 'ca-BOT-reminder', 'Check reminders'); 
        $('#ca-BOT-reminder').click( function ( event ) {
            event.preventDefault();
            check_reminders();
        } );
    } );
} );
function check_reminders(){
	var current_reminders = get_JSON( 'User:DannyS712 test/reminders.json' );
	console.log( current_reminders );
	//if (RemindBot_config.debug) console.log( current_reminders );
	var pages = get_page_list();
	//console.log( pages );
	var new_reminders = all_reminders( pages );
	//console.log( new_reminders );
	var actual_current = remove_old( current_reminders, new_reminders );
	//console.log( actual_current );
	new_reminders = remove_current( actual_current, new_reminders );
	//console.log( new_reminders );
	var to_store = add_demo_back( new_reminders );
	console.log( to_store );
	var as_string = JSON.stringify( to_store , null, 2 );
	console.log( as_string );
	set_JSON( 'User:DannyS712 test/reminders.json', as_string, 'update' );
}
function get_page_list(){
	/**
	var get_pages = {
        action: 'query',
        list: 'categorymembers',
        cmlimit: 'max',
        cmtitle: 'Category:Wikipedians recieving reminders',
        cmprop: 'title',
        format: 'json'
    };
    var result = null;
	var scriptUrl = mw.config.get( 'wgScriptPath' ) + '/api.php';
	$.ajax({
		url: scriptUrl,
		type: 'get',
		data: get_pages,
		dataType: 'json',
		async: false,
		success: function(catResponse) {
	    	console.log( catResponse );
			var pages = catResponse.query.categorymembers;
			var listed = [];
			for (var i = 0; i < pages.length; i++) {
				if ( pages[i].ns === 2 ) {
					listed.push(pages[i].title + "/remind.json");
				}
			}
			console.log( listed );
			if ( listed.length <= 0 ) {
				alert( "There are no users recieving reminders." );
			}
			else {
		    	result = listed;
			}
		} 
	});
	return result;
	***/
	return (['User:DannyS712 test/remind.json', 'User:DannyS712 test/remind 2.json']);
}
function all_reminders( pages ){
	var all_reminders = [];
	for (var iii = 0; iii < pages.length; iii++){
		var user_reminders = get_JSON(pages[iii]);
		//console.log( user_reminders );
		for (var jjj = 0; jjj < user_reminders.length; jjj++){
			var reminder = user_reminders[jjj];
			if (reminder.page == "demo") continue;
			else {
				//console.log( reminder );
				all_reminders.push( {user: pages[iii], start: reminder.start, id: reminder.id, reminded: false} );
			}
		}
	}
	return all_reminders;
}
function remove_current( actual_current, new_reminders ){
	console.log( "current:", actual_current);
	console.log( "new:", new_reminders);
	for (var iii = 0; iii < new_reminders.length; iii++){
		for (var jjj = 0; jjj < actual_current.length; jjj++){
			if (actual_current[jjj].id == new_reminders[iii].id){
				console.log( actual_current[jjj], new_reminders[iii] );
				new_reminders.splice(iii, 1);
				iii--;
				break;
			}
		}
	}
	return new_reminders;
}
function remove_old( current, new_reminders ){
	console.log( current, new_reminders );
	var is_old = true;
	for (var mmm = 1; mmm < current.length; mmm++){
		is_old = true;
		for (var nnn = 0; nnn < new_reminders.length; nnn++){
			if (current[mmm].id == new_reminders[nnn].id){
				is_old = false;
				break;
			}
		}
		if (is_old){
			console.log( current[mmm]);
			current.splice(mmm, 1);
			mmm--;
		}
	}
	return current;
}
function add_demo_back ( new_reminders ){
	var demo = {
		user: "User:_USERNAME_/remind.json",
		start: "earliest time for reminder (milliseconds since epoch)",
		id: "reminder_id",
		reminded: "if the user has been reminded (true/false)"
	};
	var all_together = [];
	all_together.push(demo);
	all_together = all_together.concat( new_reminders );
	console.log( all_together );
	return all_together;
}

})();