// ==UserScript== // @name Messenger Blacklist // @namespace AAAAAAAA.com // @version 2.4 // @description This is how you really block people // @author ducktrshessami // @match *://www.messenger.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 "" ]; /***************** ^^ Edit above list ^^ *****************/ function main() { // Triggered by page change foo().forEach((name) => { // Member list bar("[title^='Seen by " + name + " ']"); // Read receipt bar("[aria-label='Messages'] > div > div:has([alt='" + name + "'])", name); // Messages bar("[aria-label='Dialog content'] li:has(a[href]:contains('" + name + "'))"); // Nickname change }); foobar(); // Latest message } async function update(name, nickname) { // Update a blacklisted user's nickname const id = $("[aria-relevant='additions text']:not([aria-live='polite']) > div[id]:first", "[aria-label='Conversation List']:first").prop("id"); // Assume nickname is for selected conversation if (id) { if (!blacklistNicknames[id]) { blacklistNicknames[id] = new Object; } blacklistNicknames[id][name] = nickname; window.localStorage.setItem("MessengerBlacklistNicknames", JSON.stringify(blacklistNicknames)); foobar(); } } function foo() { // Check if there are blacklisted users in the current conversation return blacklist.filter((name) => { if (name) { var member = $("li:has(:contains('" + name + "'))", "[data-testid='info_panel']:first"); member.hide(); // Just spam hide regardless of visibility return member.length; } }); } async function bar(selector, name) { // Destroy targets and handle nickname parsing var targets = $(selector + ":visible"); if (targets.length) { // Target acquired targets.hide(); console.log("Target destroyed"); if (name) { // Nickname parsing const nickname = targets.first().find("h5[aria-label] > span:first"); if (nickname.length) { update(name, nickname.prop("innerHTML")); } } } } async function foobar() { // Check the latest message of every conversation for blacklisted nicknames var convo, latest, found; for (var id in blacklistNicknames) { found = false; convo = document.getElementById(id); latest = $("div:last-child > span > span:not(:only-child):first", convo); for (var name in blacklistNicknames[id]) { if (latest.prop("innerHTML") == blacklistNicknames[id][name]) { // Target acquired found = true; latest.parent().parent().hide(); // Also spam hide regardless of visibility } } if (!found) { // Conversation is clear $("div > div > div:last-child:hidden", convo).show(); } } } 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)); }); })();