Discord 回復时自动移除标注

Discord 回復时自动移除标注。

目前为 2022-11-23 提交的版本。查看 最新版本

// ==UserScript==
// @namespace      https://gf.qytechs.cn/zh-TW/users/142344-jasn-hr
// @name         Discord Auto remove mention when reply
// @name:zh-TW       Discord 回覆時自動移除標註
// @name:zh-CN       Discord 回復时自动移除标注
// @name:ja        Discord 返信時にメンションを自動的に削除
// @description      Discord Auto remove mention when reply.
// @description:zh-TW  Discord 回覆時自動移除標註。
// @description:zh-CN  Discord 回復时自动移除标注。
// @description:ja     Discord 返信時にメンションを自動的に削除。
// @copyright      2022, HrJasn (https://gf.qytechs.cn/zh-TW/users/142344-jasn-hr)
// @license        GPL-3.0-or-later
// @version        1.4
// @icon         https://www.google.com/s2/favicons?domain=discord.com
// @include        http*://discord.com/*
// @exclude        http*://www.google.com/*
// @grant        none
// ==/UserScript==

console.log("Discord Auto remove mention when reply.");

window.addEventListener('load', () =>{

  let messageLocalize = (messageJson) => {
    let userLocale = navigator.userLanguage || navigator.language || navigator.browserLanguage || navigator.systemLanguage
    return messageJson[userLocale];
  }

  const observeDOM = (()=>{
    const ObSrvDomMut = window.MutationObserver || window.WebKitMutationObserver;
    return (obj,callback)=>{
      if( !obj || obj.nodeType !== 1 ) {return;}
      if( ObSrvDomMut ) {
        const mutObserver = new ObSrvDomMut(callback);
        mutObserver.observe( obj, { childList:true, subtree:true });
        return mutObserver;
      } else if( window.addEventListener ) {
        obj.addEventListener('DOMNodeInserted', callback, false);
        obj.addEventListener('DOMNodeRemoved', callback, false);
      }
    }
  })();

  observeDOM(document.body, function(docElms){
    let addedNodes = [];
    docElms.forEach(record => record.addedNodes.length & addedNodes.push(...record.addedNodes));
    changeProdIDtoLink(this,addedNodes);
  });

  function changeProdIDtoLink(observeOBJ,addedNodes){

    let setCookie = (name,value,days) => {
      var expires = "";
      if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        expires = "; expires=" + date.toUTCString();
      }
      document.cookie = name + "=" + (value || "")  + expires + "; path=/";
    }
    let getCookie=(name) =>{
      var nameEQ = name + "=";
      var ca = document.cookie.split(';');
      for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
      }
      return null;
    }
    let eraseCookie=(name) =>{
      document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
    }

    addedNodes.forEach((addedNode)=>{
      if(addedNode.querySelectorAll){
        addedNode.querySelectorAll('div[class*="replyBar"]').forEach((singleRow)=>{
          let MentionName = singleRow.querySelector('div[class*="replyLabel"] span[class*="name"]').innerText;
          let mentionButton = singleRow.querySelector('div[class*="mentionButton"]');
          function getAutoRemoveMentionUserList(){
            let UserListArr = [];
            try{
              let AutoRemoveMentionUserListCookie = getCookie('AutoRemoveMentionUserList');
              UserListArr = JSON.parse(AutoRemoveMentionUserListCookie);
            }catch(err){
            }
            if(!UserListArr){UserListArr = [];}
            return UserListArr;
          }
          function findMentionUserList(UserList,UserName){
            return UserList.find(u => {
              return u.name == UserName
            })
          }
          function removeFromMentionUserList(UserList,UserName){
            return UserList.filter(u => {
              if (u.name == UserName) {
                return false;
              }
              return true;
            })
          }

          function closeMention(){
            if(mentionButton.parentNode.getAttribute('aria-checked') == 'true'){
              mentionButton.click();
            }
          }
          function openMention(){
            if(mentionButton.parentNode.getAttribute('aria-checked') == 'false'){
              mentionButton.click();
            }
          }
          function loadAutoRemoveSetting(){
            let AutoRemoveMentionUserList = getAutoRemoveMentionUserList();
            let MentionName = singleRow.querySelector('div[class*="replyLabel"] span[class*="name"]').innerText;
            let AutoRemoveMentionButton = mentionButton.parentNode.parentNode.querySelector('#AutoRemoveMentionButton > div');
            if(findMentionUserList(AutoRemoveMentionUserList,MentionName)){
              AutoRemoveMentionButton.style = 'color: var(--text-link);';
              closeMention();
            } else {
              AutoRemoveMentionButton.style = 'color: var(--text-muted);';
              openMention();
            }
          }
          let checkMentionEvent = ()=>{
            let AutoRemoveMentionUserList = getAutoRemoveMentionUserList();
            let MentionName = singleRow.querySelector('div[class*="replyLabel"] span[class*="name"]').innerText;
            let AutoRemoveMentionButton = mentionButton.parentNode.parentNode.querySelector('#AutoRemoveMentionButton > div');
            if(findMentionUserList(AutoRemoveMentionUserList,MentionName)){
              let newAutoRemoveMentionUserList = removeFromMentionUserList(AutoRemoveMentionUserList,MentionName);
              setCookie('AutoRemoveMentionUserList',JSON.stringify(newAutoRemoveMentionUserList),null);
              newAutoRemoveMentionUserList = [];
            } else {
              let newUser = JSON.parse(JSON.stringify({'name':MentionName}));
              AutoRemoveMentionUserList.push(newUser);
              setCookie('AutoRemoveMentionUserList',JSON.stringify(AutoRemoveMentionUserList),null);
            }
            loadAutoRemoveSetting();
          }
          let AutoRemoveMentionButtonNameArray = {
            'en':'@Auto remove this people\'s reply mention',
            'zh-TW':'@自動移除此人的回覆標註',
            'zh-CN':'@自动移除此人的回復标注',
            'ja': '@この人の返信の言及を自動的に削除します'
          }
          let AutoRemoveMentionButton = mentionButton.parentNode.parentNode.insertBefore(mentionButton.parentNode.cloneNode(true),mentionButton.parentNode);
          AutoRemoveMentionButton.id = 'AutoRemoveMentionButton';
          AutoRemoveMentionButton.querySelector('div[class*="mentionButton"]').textContent = messageLocalize(AutoRemoveMentionButtonNameArray);
          AutoRemoveMentionButton.addEventListener('click',checkMentionEvent,false);
          loadAutoRemoveSetting();
        });
      }
    });
  }

});

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址