Difference between revisions of "User:Moussekateer/vector.js"

From Team Fortress Wiki
Jump to: navigation, search
m
m (fix POST requests)
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
importScriptURI('https://raw.github.com/Moussekateer/TFWiki-scripts/master/spambot_killer.js', 'text/javascript');
+
//// START SPAMBOT KILLER ///
  
importScriptURI('https://raw.github.com/Moussekateer/TFWiki-scripts/master/wikifi_toolbox.js', 'text/javascript');
+
// create mw API object for wiki queries
 +
var api = new mw.Api();
  
// hai
+
function deletePage(title) {
var clickms = 250;
+
    // query to get deletetoken
var lastTouchDown = -1;
 
// /hai
 
  
 +
    var promise = api.get({ action: 'query', prop: 'info', intoken: 'delete', titles: title });
  
 +
    promise.then(function (res) {
 +
        console.log('LOG: deletetokenres=' + res);
 +
        var pages = res.query.pages;
  
function touchHandler(event) {
+
        for (var key in pages) {
    var touch = event.changedTouches[0];
+
            var deletetoken = pages[key].deletetoken;
  
 +
            // use deletetoken in POST request to delete page
 +
            api.post({ action: 'delete', title: title, reason: 'Spam', token: deletetoken }).then(function (res) {
 +
                console.log('LOG: deleted=' + title);
 +
            });
 +
        }
 +
    });
 +
}
 +
 +
function killContributions(contribs) {
 +
    console.log('LOG: usercontribs=' + contribs);
 +
 +
    for (var edit in contribs) {
 +
        // only delete contribution if new page
  
// hai
+
        if ('new' in contribs[edit]) {
var d = new Date();
+
            console.log('LOG: usercontribtodelete=' + contribs[edit]);
switch(event.type)
+
 
{
+
            deletePage(contribs[edit].title);
    case "touchstart": type = "mousedown"; lastTouchDown = d.getTime(); break;
+
        }
    case "touchmove": type="mousemove"; lastTouchDown = -1; break;       
+
     }
    case "touchend": if(lastTouchDown > -1 && (d.getTime() - lastTouchDown) < clickms){lastTouchDown = -1; type="click"; break;} type="mouseup"; break;
 
     default: return;
 
 
}
 
}
// /hai
 
  
 +
function blockUser(user) {
 +
    // query to get blocktoken
 +
    var promise = api.get({ action: 'query', prop: 'info', intoken: 'block', titles: 'User:' + user });
  
     var simulatedEvent = document.createEvent("MouseEvent");
+
     promise.then(function (res) {
         simulatedEvent.initMouseEvent(type, true, true, window, 1,
+
         console.log('LOG: blocktokenres=' + res);
         touch.screenX, touch.screenY,
+
         var pages = res.query.pages;
        touch.clientX, touch.clientY, false,
 
        false, false, false, 0, null);
 
  
    touch.target.dispatchEvent(simulatedEvent);
+
        for (key in pages){
    event.preventDefault();
+
            // use blocktoken in POST request to block user
 +
            var blocktoken = pages[key].blocktoken;
 +
            console.log('LOG: blocktoken=' + blocktoken);
 +
 
 +
            api.post({ action: 'block', user: user, expiry: 'never', nocreate: '', autoblock: '', reason: 'Spamming links to external sites', token: blocktoken }).then(function (res) {
 +
                console.log('LOG: blocked=' + user);
 +
            });
 +
        }
 +
    });
 
}
 
}
  
function touchinit() {
+
function killUser(user) {
     document.addEventListener("touchstart", touchHandler, true);
+
     // query user details
     document.addEventListener("touchmove", touchHandler, true);
+
    var promise = api.get({ action: 'query', list: 'usercontribs', ucuser: user });
     document.addEventListener("touchend", touchHandler, true);
+
 
     document.addEventListener("touchcancel", touchHandler, true);
+
     promise.then(function (res) {
 +
        var userContributions = res.query.usercontribs;
 +
 
 +
        if (userContributions.length > 5){
 +
            alert('User:' + user + ' has more than 5 edits');
 +
        } else {
 +
            // hit it doc
 +
            blockUser(user);
 +
            killContributions(userContributions);
 +
 
 +
            // vas gud
 +
            alert('User:' + user + ' has been terminated. Good day');
 +
        }
 +
    });
 +
}
 +
 
 +
function pootSecretSauce() {
 +
    // insert blockdelete link in new page revision details
 +
     $('.mw-usertoollinks a:last-child').after(" | <a href=# id='blockdelete'>blockdelete</a>");
 +
 
 +
     $('a#blockdelete').click(function() {
 +
        // grab username from revision details
 +
        var user = $('.diff-ntitle .mw-userlink').text();
 +
        console.log('LOG: User=' + user);
 +
 
 +
        killUser(user);
 +
    });
 
}
 
}
  
$(document).ready(function() {
+
$(pootSecretSauce);
  touchinit();
+
 
});
+
/// END SPAMBOT KILLER ///

Latest revision as of 23:37, 3 July 2016

//// START SPAMBOT KILLER ///

// create mw API object for wiki queries
var api = new mw.Api();

function deletePage(title) {
    // query to get deletetoken

    var promise = api.get({ action: 'query', prop: 'info', intoken: 'delete', titles: title });

    promise.then(function (res) {
        console.log('LOG: deletetokenres=' + res);
        var pages = res.query.pages;

        for (var key in pages) {
            var deletetoken = pages[key].deletetoken;

            // use deletetoken in POST request to delete page
            api.post({ action: 'delete', title: title, reason: 'Spam', token: deletetoken }).then(function (res) { 
                console.log('LOG: deleted=' + title);
            });
        }
    });
}

function killContributions(contribs) {
    console.log('LOG: usercontribs=' + contribs);

    for (var edit in contribs) {
        // only delete contribution if new page

        if ('new' in contribs[edit]) {
            console.log('LOG: usercontribtodelete=' + contribs[edit]);

            deletePage(contribs[edit].title);
        }
    }
}

function blockUser(user) {
    // query to get blocktoken
    var promise = api.get({ action: 'query', prop: 'info', intoken: 'block', titles: 'User:' + user });

    promise.then(function (res) {
        console.log('LOG: blocktokenres=' + res);
        var pages = res.query.pages;

        for (key in pages){
            // use blocktoken in POST request to block user
            var blocktoken = pages[key].blocktoken;
            console.log('LOG: blocktoken=' + blocktoken);

            api.post({ action: 'block', user: user, expiry: 'never', nocreate: '', autoblock: '', reason: 'Spamming links to external sites', token: blocktoken }).then(function (res) {
                console.log('LOG: blocked=' + user);
            });
        }
    });
}

function killUser(user) {
    // query user details
    var promise = api.get({ action: 'query', list: 'usercontribs', ucuser: user });

    promise.then(function (res) {
        var userContributions = res.query.usercontribs;

        if (userContributions.length > 5){
            alert('User:' + user + ' has more than 5 edits');
        } else {
            // hit it doc
            blockUser(user);
            killContributions(userContributions);

            // vas gud
            alert('User:' + user + ' has been terminated. Good day');
        }
    });
}

function pootSecretSauce() {
    // insert blockdelete link in new page revision details
    $('.mw-usertoollinks a:last-child').after(" | <a href=# id='blockdelete'>blockdelete</a>");

    $('a#blockdelete').click(function() {
        // grab username from revision details
        var user = $('.diff-ntitle .mw-userlink').text();
        console.log('LOG: User=' + user);

        killUser(user);
    });
}

$(pootSecretSauce);

/// END SPAMBOT KILLER ///