// ==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 // @downloadURL none // ==/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)); }); })();