Discord Copy ID Fix (Firefox)

Fixes broken Discord channel/thread/message copy ID buttons in Firefox.

当前为 2025-03-18 提交的版本,查看 最新版本

// ==UserScript==
// @name         Discord Copy ID Fix (Firefox)
// @description  Fixes broken Discord channel/thread/message copy ID buttons in Firefox.
// @author       You
// @version      0.1
// @namespace    https://greasyfork.org/users/1376767
// @match        https://discord.com/*
// @grant        GM_setClipboard
// ==/UserScript==

(function() {
  'use strict';

  function copyToClipboard(text) {
      GM_setClipboard(text);
  }

  function overrideClick(node) {
    const id = node.id;
    const match = id.match(/(\d+)$/); // id="channel-context-devmode-copy-id-123456"
    if (match) {
      const channelId = match[1];
      node.addEventListener('click', function(event) {
        copyToClipboard(channelId);
      }, { once: true });
    }
  }

  // right click creates a menu "class clickTrapContainer_ trapClicks_"
  //   that has some child [role="menuitem"]
  //     whose child has text "Copy ... ID"
  const observer = new MutationObserver(mutations => {
    mutations.forEach(mutation => {
      mutation.addedNodes.forEach(node => {
        if (node.nodeType === Node.ELEMENT_NODE) {
          // console.log(node);
          if (node.className && /clickTrapContainer_.*trapClicks_/.test(node.className)) {
            node.querySelectorAll('[role="menuitem"]').forEach(menuItem => {
              if (Array.from(menuItem.children).some(child => child.textContent?.startsWith("Copy") && child.textContent?.endsWith("ID"))) {
                setTimeout(() => overrideClick(menuItem), 100);
              }
            });
          }
        }
      });
    });
  });

  observer.observe(document.body, { childList: true, subtree: true });
})();