Greasy Fork is available in English.
This is how you really block people
当前为
// ==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
// ==/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));
});
})();