Greasy Fork 支持简体中文。

Hide Slack User 2024

block specified users in Slack.

// ==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
  );
})();