Greasy Fork

Facebook (Messenger) Blacklist

This is how you really block people

目前为 2019-07-11 提交的版本。查看 最新版本

// ==UserScript==
// @name         Facebook (Messenger) Blacklist
// @namespace    AAAAAAAA.com
// @version      0.1
// @description  This is how you really block people
// @author       ducktrshessami
// @match        *://www.facebook.com/*
// @run-at       document-end
// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js
// ==/UserScript==

(function() {
    const blacklist = [ // Fill this list with their Facebook names
        ""
    ];

    function main() { // Triggered by page change on facebook.com
        if (document.getElementById("ChatTabsPagelet")) {
            blacklist.forEach((name) => {
                foo(name); // Messages
                bar(name); // Read receipt tooltip
            });
            foobar(); // Read receipts and message previews
        }
    }

    async function update(name, nickname, thread) {
        if (!blacklistNicknames[thread]) {
            blacklistNicknames[thread] = new Object;
        }
        blacklistNicknames[thread][name] = nickname;
        window.localStorage.setItem("MessengerBlacklistNicknames", JSON.stringify(blacklistNicknames));
        foobar();
    }

    async function foo(name) { // Destroy targets and handle nickname parsing
        var chats = $("#ChatTabsPagelet [class='fbNubGroup clearfix'] > div > div > [class*='fantaTabMain-thread:']"), targets;
        chats.each(function() {
            targets = $(".fbNubFlyoutOuter > div > div > div > div > div > div > div > div > div > div:has([aria-label^='" + name + "']):visible", this);
            if (targets.length) { // Target acquired
                targets.hide();
                console.log("Target destroyed");
                const nickname = targets.first().find("div > div:first-child > span:first");
                if (nickname.length) {
                    update(name, nickname.prop("innerHTML"), this.className.split(' ').filter(word => word.startsWith("fantaTabMain-thread:")).join().slice(20));
                }
            }
        });
    }

    async function bar(name) { // Edit the tooltip for read receipts
        var targets = $("[data-tooltip-content*='" + name + "']", ".more:visible");
        if (targets.length) { // Target acquired
            targets.attr("data-tooltip-content", (i, tooltip) => tooltip.replace(name, "").replace("\n\n", "\n"));
            console.log("Target destroyed");
        }
    }

    async function foobar() { // Handle read receipts and latest message previews
        //asdf
    }

    var blacklistNicknames, observer = new MutationObserver(main);
    if (!(blacklistNicknames = JSON.parse(window.localStorage.getItem("MessengerBlacklistNicknames")))) { // Check for stored value
        blacklistNicknames = new Object;
        window.localStorage.setItem("MessengerBlacklistNicknames", JSON.stringify(blacklistNicknames));
    }
    observer.observe(document.body, { // Wait for page change
        childList: true,
        subtree: true
    });
    window.addEventListener("beforeunload", () => { // Store before leaving
        window.localStorage.setItem("MessengerBlacklistNicknames", JSON.stringify(blacklistNicknames));
    });
})();