Slack user censor

Replace the messages of a special user with a tiny red bar

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name         Slack user censor
// @version      1.0.0
// @grant        none
// @author       github.com/geezee
// @description  Replace the messages of a special user with a tiny red bar
// @match        https://app.slack.com/*
// @license      GPLv3
// @namespace https://greasyfork.org/users/387744
// ==/UserScript==

const userId = ""; // user id can be retrieved from data-message-sender attribute on .c-message__sender_link
const targetInstanceName = ""; // the name of the workplace to run this script on

const style = "background:rgba(255,50,50,0.1); padding: 3px 20px; font-size: 8px;"; // the style of the red bar
const blockMsg = "Message blocked";
const hoverMsg = "read"; // if you don't want to read the message when hovering then set this to an empty string


function blockMessage(msg) {
    const bodyContainer = msg.querySelector(".c-message__body");
    if (bodyContainer == null) return;
    const body = bodyContainer.innerHTML;
    msg.innerHTML = '<div style="' + style + '">'
    						+ '<a href="#" data-message-sender="' + userId + '"></a>'
    						+ blockMsg
    					  + ' - <abbrv class="c-message__contents__toblock">' + hoverMsg + '</abbrv></div>';
    msg.querySelector(".c-message__contents__toblock").title = body;
}

function hideMessages() {
    const messages = Array.from(document.querySelectorAll(".c-message"));
    for (var i=0; i<messages.length; i++) {
        var msg = messages[i];
        // make sure the message has an author and it matches the troll's id
        const senderLink = msg.querySelector("a.c-message__sender_link");
        if (senderLink == null) continue;
        const sender = senderLink.dataset.messageSender;
        if (sender != userId) continue;
         
        // replace the message with a block notice
        blockMessage(msg);
        
        // search for adjacent messages
        while (messages[i+1].classList.contains("c-message--adjacent")) {
            i++;
            blockMessage(messages[i]);
        }
    }
}


setTimeout(function() {
    const instanceName = document.querySelector(".p-classic_nav__team_header__team__name").innerHTML;
  	if (instanceName != targetInstanceName) return;
    document.querySelector(".p-workspace__primary_view").addEventListener("DOMSubtreeModified", () => {
        setTimeout(hideMessages, 1000);
    });
    hideMessages();
}, 2000);