Discussions » Creation Requests

Facebook Group Member Removal

§
Posted: 2019-08-08

Facebook Group Member Removal

Greetings,

I looked through the userscript mirror as well as other depots that I could find to see if somebody had already written a mass-member removal script from a specific group or groups on Facebook.

I found this Java Script that somebody wrote to do the bulk of the work, but it was intended for an older Java Script Console in Firefox. I haven't done much with Javascript in the past few years, so I thought I would ask to see if somebody would be willing to help retrofit this GreaseMonkey or TamperMonkey.

Here is the JavaScript that I found, claiming to be able to perform the grunt work:

var deleteAllGroupMembers = (function () {
    var deleteAllGroupMembers = {};
    // the facebook ids of the users that will not be removed.
    // IMPORTANT: add your own facebook id here so that the script will not remove yourself!
    var excludedFbIds = ['1010101010','010101010']; // make sure each id is a string!
    var usersToDeleteQueue = [];
    var scriptEnabled = false;
    var processing = false;

deleteAllGroupMembers.start = function() {
    scriptEnabled = true;
    deleteAll();
};
deleteAllGroupMembers.stop = function() {
    scriptEnabled = false;
};

function deleteAll() {
    if (scriptEnabled) {
        queueMembersToDelete();
        processQueue();
    }
}

function queueMembersToDelete() {
    var adminActions = document.getElementsByClassName('adminActions');
    console.log(excludedFbIds);
   for(var i=0; i<adminActions.length; i++) {
    var gearWheelIconDiv = adminActions[i];
    var hyperlinksInAdminDialog = gearWheelIconDiv.getElementsByTagName('a');
    var fbMemberId = gearWheelIconDiv.parentNode.parentNode.id.replace('member_','');
    var fbMemberName = getTextFromElement(gearWheelIconDiv.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.getElementsByClassName('fcb')[0]);

    if (excludedFbIds.indexOf(fbMemberId) != -1) {
        console.log("SKIPPING "+fbMemberName+' ('+fbMemberId+')');
        continue;
    } else {
        usersToDeleteQueue.push({'memberId': fbMemberId, 'gearWheelIconDiv': gearWheelIconDiv});
    }
   }
}

function processQueue() {
    if (!scriptEnabled) {
    return;
}
if (usersToDeleteQueue.length > 0) {
    removeNext();
    setTimeout(function() {
        processQueue();
    },1000);
        } else {
    getMore();
    }
}

function removeNext() {
    if (!scriptEnabled) {
    return;
}
if (usersToDeleteQueue.length > 0) {
    var nextElement = usersToDeleteQueue.pop();
    removeMember(nextElement.memberId, nextElement.gearWheelIconDiv);
}
}

function removeMember(memberId, gearWheelIconDiv) {
    if (processing) {
    return;
}
var gearWheelHref = gearWheelIconDiv.getElementsByTagName('a')[0];
gearWheelHref.click();
processing = true;
setTimeout(function(){
    var popupRef = gearWheelHref.id;
    var popupDiv = getElementByAttribute('data-ownerid',popupRef);
    var popupLinks = popupDiv.getElementsByTagName('a');
    for(var j=0; j<popupLinks.length; j++) {
        if (popupLinks[j].getAttribute('href').indexOf('remove.php') !== -1) {
        // this is the remove link
        popupLinks[j].click();
        setTimeout(function(){
        var confirmButton = document.getElementsByClassName('layerConfirm uiOverlayButton selected')[0];
        var errorDialog = getElementByAttribute('data-reactid','.4.0');
        if (confirmButton != null) {
        if (canClick(confirmButton)) {
            confirmButton.click();
            } else {
            console.log('This should not happen memberid: '+memberId);
            5/0;
            console.log(gearWheelIconDiv);
            }
                    }
        if (errorDialog != null) {
            console.log("Error while removing member "+memberId);
            errorDialog.getElementsByClassName('selected  layerCancel autofocus')[0].click();
        } 
        processing = false;
        },700);
        continue;
    }
    }
},500);
}

function canClick(el) {
    return (typeof el != 'undefined') && (typeof el.click != 'undefined');
}

function getMore() {
    processing = true;
    more = document.getElementsByClassName("pam uiBoxLightblue  uiMorePagerPrimary");
if (typeof more != 'undefined' && canClick(more[0])) {
    more[0].click();
    setTimeout(function(){
    deleteAll();
    processing = false;
}, 2000);
} else {
    deleteAllGroupMembers.stop();
}
}

function getTextFromElement(element) {
    var text = element.textContent;
    return text;
}

function getElementByAttribute(attr, value, root) {
    root = root || document.body;
    if(root.hasAttribute(attr) && root.getAttribute(attr) == value) {
    return root;
}
var children = root.children,
    element;
for(var i = children.length; i--; ) {
    element = getElementByAttribute(attr, value, children[i]);
    if(element) {
    return element;
}
}
return null;
}
return deleteAllGroupMembers;

})(); deleteAllGroupMembers.start();

// stop the script by entering this in the console: deleteAllGroupMembers.stop();

Any help or guidance would be greatly appreciated.

Charles

Post reply

Sign in to post a reply.