Hide Slack User 2024

block specified users in Slack.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Hide Slack User 2024
// @namespace    http://tampermonkey.net/
// @version      0.0.2
// @description  block specified users in Slack.
// @author       nakyeonko3
// @match        https://*.slack.com/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @license MIT
// ==/UserScript==

(() => {
  // Add userName to hide here.
  // ex) const hiddenUsers = ["userName1", "엄준식 사원", "코딩애플 사장", "CEO 팀 쿡"];
  const hiddenUsers = ["userName1", "useName2"];

  const hideMainMessages = (message) => {
    let hide = false;
    // Detect a.c-message__sender_link and, if present, update hide.
    const sender = message.querySelector("span.c-message__sender");
    if (sender != null) {
      hide = hiddenUsers.includes(sender.getAttribute("data-stringify-text"));
    }
    if (hide) {
      message.style.display = "none";
    }
  };

  const hideSidbarMessages = (message) => {
    let hide = false;
    // Detect a.c-message__sender_link and, if present, update hide.
    const sender_sidebar = message.querySelector(
      "span.p-channel_sidebar__name span"
    );
    if (sender_sidebar !== null) {
      hide = hiddenUsers.includes(sender_sidebar.innerText);
    }
    if (hide === true) {
      sender_sidebar.closest(".c-virtual_list__item").style.display = "none";
    }
  };

  const hideMessages = (container) => {
    for (const message of container.children) {
      hideMainMessages(message); // hide main page messages
      hideSidbarMessages(message); // hide sidebar messages
    }
  };

  const observeMessages = (container) => {
    // Observe at most once per container.
    const callback = (mutations) => {
      hideMessages(container);
    };
    callback();
    const observer = new MutationObserver(callback);
    observer.observe(container, { childList: true });
  };

  const observeContainerIn = (layout, view) => {
    const callback = (mutations) => {
      for (const child of layout.children) {
        const container = child.querySelector(
          "div.c-virtual_list__scroll_container"
        );
        if (container != null) {
          observeMessages(container);
        }
      }
    };
    callback();
  };

  window.addEventListener(
    "load",
    () => {
      const workspace_layout = document.querySelector(
        "div.p-client_workspace__layout"
      );
      observeContainerIn(workspace_layout, "p-workspace__primary_view_body");
    },
    false
  );
})();