Hide Slack User 2024

block specified users in Slack.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 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
  );
})();