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

From Team Fortress Wiki
Jump to: navigation, search
m (fix POST requests)
 
(34 intermediate revisions by the same user not shown)
Line 1: Line 1:
$(document).ready(function(){
+
//// START SPAMBOT KILLER ///
var ttCache = new Object();
+
 
var urlPrefix = wgArticlePath.replace("$1","");
+
// create mw API object for wiki queries
var container = $("<div id='tooltip-container' style='position:absolute;z-index:999999;height:auto !important;padding:0px;margin:0px;max-width: 300px'></div>");
+
var api = new mw.Api();
var ttOffset = 10;
+
 
container.hide();
+
function deletePage(title) {
var mouseX = 0;
+
    // query to get deletetoken
var mouseY = 0;
+
 
var bodyContainer = $("#bodyContent");
+
    var promise = api.get({ action: 'query', prop: 'info', intoken: 'delete', titles: title });
bodyContainer.append(container);
+
 
$(".backpack-link").mouseover(function(evt){
+
    promise.then(function (res) {
var url = $(this).find("a").attr("href");
+
        console.log('LOG: deletetokenres=' + res);
if(urlPrefix == url.substr(0,urlPrefix.length)){
+
        var pages = res.query.pages;
url = url.substr(urlPrefix.length);
+
 
}
+
        for (var key in pages) {
relocateTooltip(evt);
+
            var deletetoken = pages[key].deletetoken;
if(ttCache[url] != undefined){
+
 
showTooltip(ttCache[url]);
+
            // use deletetoken in POST request to delete page
return;
+
            api.post({ action: 'delete', title: title, reason: 'Spam', token: deletetoken }).then(function (res) {  
}
+
                console.log('LOG: deleted=' + title);
$.get(wgScript+"?title="+url+"&action=render",function(data){
+
            });
var subpage = $(data).find(".backpack-tooltip");
+
        }
ttCache[url] = subpage;
+
    });
showTooltip(subpage);
+
}
},"html");
+
 
}).mousemove(function(evt){
+
function killContributions(contribs) {
updateCoords(evt);
+
    console.log('LOG: usercontribs=' + contribs);
relocateTooltip();
+
 
}).mouseout(function(){
+
    for (var edit in contribs) {
container.hide();
+
        // only delete contribution if new page
});
+
 
function showTooltip(tooltipObj){
+
        if ('new' in contribs[edit]) {
container.html(tooltipObj);
+
            console.log('LOG: usercontribtodelete=' + contribs[edit]);
container.css("width","auto");
+
 
if(container.outerWidth() > 300)
+
            deletePage(contribs[edit].title);
container.css("width","300px");
+
        }
relocateTooltip();
+
    }
container.show();
+
}
}
+
 
function relocateTooltip(){
+
function blockUser(user) {
var lMouseX = mouseX;
+
    // query to get blocktoken
var lMouseY = mouseY;
+
    var promise = api.get({ action: 'query', prop: 'info', intoken: 'block', titles: 'User:' + user });
if(lMouseY + container.outerHeight() > $(window).height()+$(window).scrollTop())
+
 
lMouseY = ($(window).height()+$(window).scrollTop())-container.outerHeight();
+
    promise.then(function (res) {
if(lMouseX + container.outerWidth() > $(window).width()+$(window).scrollLeft())
+
        console.log('LOG: blocktokenres=' + res);
lMouseX = lMouseX - ((ttOffset*2) + container.outerWidth());
+
        var pages = res.query.pages;
var bodyOffset = bodyContainer.offset();
+
 
lMouseX -= bodyOffset.left;
+
        for (key in pages){
lMouseY -= bodyOffset.top;
+
            // use blocktoken in POST request to block user
container.css("left",lMouseX+"px").css("top",lMouseY+"px");
+
            var blocktoken = pages[key].blocktoken;
}
+
            console.log('LOG: blocktoken=' + blocktoken);
function updateCoords(evt){
+
 
mouseX = evt.pageX + ttOffset;
+
            api.post({ action: 'block', user: user, expiry: 'never', nocreate: '', autoblock: '', reason: 'Spamming links to external sites', token: blocktoken }).then(function (res) {
mouseY = evt.pageY + ttOffset;
+
                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 ///

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 ///