Discord 回覆時自動移除標註

Discord 回覆時自動移除標註。

目前為 2023-10-31 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @namespace https://gf.qytechs.cn/zh-TW/users/142344-jasn-hr
  3. // @name Discord Auto remove mention when reply
  4. // @name:zh-TW Discord 回覆時自動移除標註
  5. // @name:zh-CN Discord 回復时自动移除标注
  6. // @name:ja Discord 返信時にメンションを自動的に削除
  7. // @description Discord Auto remove mention when reply.
  8. // @description:zh-TW Discord 回覆時自動移除標註。
  9. // @description:zh-CN Discord 回復时自动移除标注。
  10. // @description:ja Discord 返信時にメンションを自動的に削除。
  11. // @copyright 2022, HrJasn (https://gf.qytechs.cn/zh-TW/users/142344-jasn-hr)
  12. // @license GPL-3.0-or-later
  13. // @version 1.2
  14. // @icon https://www.google.com/s2/favicons?domain=discord.com
  15. // @include http*://discord.com/*
  16. // @exclude http*://www.google.com/*
  17. // @grant none
  18. // ==/UserScript==
  19.  
  20. console.log("Discord Auto remove mention when reply.");
  21.  
  22. window.addEventListener('load', () =>{
  23.  
  24. let messageLocalize = (messageJson) => {
  25. let userLocale = navigator.userLanguage || navigator.language || navigator.browserLanguage || navigator.systemLanguage
  26. return messageJson[userLocale];
  27. }
  28.  
  29. const observeDOM = (()=>{
  30. const ObSrvDomMut = window.MutationObserver || window.WebKitMutationObserver;
  31. return (obj,callback)=>{
  32. if( !obj || obj.nodeType !== 1 ) {return;}
  33. if( ObSrvDomMut ) {
  34. const mutObserver = new ObSrvDomMut(callback);
  35. mutObserver.observe( obj, { childList:true, subtree:true });
  36. return mutObserver;
  37. } else if( window.addEventListener ) {
  38. obj.addEventListener('DOMNodeInserted', callback, false);
  39. obj.addEventListener('DOMNodeRemoved', callback, false);
  40. }
  41. }
  42. })();
  43.  
  44. observeDOM(document.body, function(docElms){
  45. let addedNodes = [];
  46. docElms.forEach(record => record.addedNodes.length & addedNodes.push(...record.addedNodes));
  47. changeProdIDtoLink(this,addedNodes);
  48. });
  49.  
  50. function changeProdIDtoLink(observeOBJ,addedNodes){
  51.  
  52. let setCookie = (name,value,days) => {
  53. var expires = "";
  54. if (days) {
  55. var date = new Date();
  56. date.setTime(date.getTime() + (days*24*60*60*1000));
  57. expires = "; expires=" + date.toUTCString();
  58. }
  59. document.cookie = name + "=" + (value || "") + expires + "; path=/";
  60. }
  61. let getCookie=(name) =>{
  62. var nameEQ = name + "=";
  63. var ca = document.cookie.split(';');
  64. for(var i=0;i < ca.length;i++) {
  65. var c = ca[i];
  66. while (c.charAt(0)==' ') c = c.substring(1,c.length);
  67. if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  68. }
  69. return null;
  70. }
  71. let eraseCookie=(name) =>{
  72. document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
  73. }
  74.  
  75. addedNodes.forEach((addedNode)=>{
  76. if(addedNode.querySelectorAll){
  77. addedNode.querySelectorAll('div[class*="replyBar"]').forEach((singleRow)=>{
  78. let MentionName = singleRow.querySelector('div[class*="replyLabel"] span[class*="name"]').innerText;
  79. let mentionButton = singleRow.querySelector('div[class*="mentionButton"]');
  80.  
  81. function getAutoRemoveMentionUserList(){
  82. let UserListArr = [];
  83. try{
  84. let AutoRemoveMentionUserListCookie = getCookie('AutoRemoveMentionUserList');
  85. UserListArr = JSON.parse(AutoRemoveMentionUserListCookie);
  86. }catch(err){
  87. }
  88. if(!UserListArr){UserListArr = [];}
  89. return UserListArr;
  90. }
  91. function findMentionUserList(UserList,UserName){
  92. return UserList.find(u => {
  93. return u.name == UserName
  94. })
  95. }
  96. function removeFromMentionUserList(UserList,UserName){
  97. return UserList.filter(u => {
  98. if (u.name == UserName) {
  99. return false;
  100. }
  101. return true;
  102. })
  103. }
  104.  
  105. function closeMention(){
  106. if(mentionButton.parentNode.getAttribute('aria-checked') == 'false'){
  107. mentionButton.click();
  108. }
  109. }
  110. function openMention(){
  111. if(mentionButton.parentNode.getAttribute('aria-checked') == 'true'){
  112. mentionButton.click();
  113. }
  114. }
  115. function loadAutoRemoveSetting(){
  116. let AutoRemoveMentionUserList = getAutoRemoveMentionUserList();
  117. let MentionName = singleRow.querySelector('div[class*="replyLabel"] span[class*="name"]').innerText;
  118. if(!findMentionUserList(AutoRemoveMentionUserList,MentionName)){
  119. mentionButton.parentNode.parentNode.querySelector('#AutoRemoveMentionButtonOn').style.display = 'none';
  120. mentionButton.parentNode.parentNode.querySelector('#AutoRemoveMentionButtonOff').style.display = 'block';
  121. closeMention();
  122. } else {
  123. mentionButton.parentNode.parentNode.querySelector('#AutoRemoveMentionButtonOff').style.display = 'none';
  124. mentionButton.parentNode.parentNode.querySelector('#AutoRemoveMentionButtonOn').style.display = 'block';
  125. openMention();
  126. }
  127. }
  128. let closeMentionEvent = ()=>{
  129. let MentionName = singleRow.querySelector('div[class*="replyLabel"] span[class*="name"]').innerText;
  130. mentionButton.parentNode.parentNode.querySelector('#AutoRemoveMentionButtonOn').style.display = 'none';
  131. mentionButton.parentNode.parentNode.querySelector('#AutoRemoveMentionButtonOff').style.display = 'block';
  132. let AutoRemoveMentionUserList = getAutoRemoveMentionUserList();
  133. if(findMentionUserList(AutoRemoveMentionUserList,MentionName)){
  134. let newAutoRemoveMentionUserList = removeFromMentionUserList(AutoRemoveMentionUserList,MentionName);
  135. setCookie('AutoRemoveMentionUserList',JSON.stringify(newAutoRemoveMentionUserList),null);
  136. newAutoRemoveMentionUserList = [];
  137. }
  138. loadAutoRemoveSetting();
  139. console.log(getAutoRemoveMentionUserList());
  140. }
  141. let openMentionEvent = () => {
  142. let MentionName = singleRow.querySelector('div[class*="replyLabel"] span[class*="name"]').innerText;
  143. mentionButton.parentNode.parentNode.querySelector('#AutoRemoveMentionButtonOff').style.display = 'none';
  144. mentionButton.parentNode.parentNode.querySelector('#AutoRemoveMentionButtonOn').style.display = 'block';
  145. let AutoRemoveMentionUserList = getAutoRemoveMentionUserList();
  146. if(!findMentionUserList(AutoRemoveMentionUserList,MentionName)){
  147. let newUser = JSON.parse(JSON.stringify({'name':MentionName}));
  148. AutoRemoveMentionUserList.push(newUser);
  149. setCookie('AutoRemoveMentionUserList',JSON.stringify(AutoRemoveMentionUserList),null);
  150. }
  151. loadAutoRemoveSetting();
  152. console.log(getAutoRemoveMentionUserList());
  153. }
  154. let AutoRemoveMentionButtonNameArray = {
  155. 'en':'@Auto remove this people\'s reply mention',
  156. 'zh-TW':'@自動移除此人的回覆標註',
  157. 'zh-CN':'@自动移除此人的回復标注',
  158. 'ja': '@この人の返信の言及を自動的に削除します'
  159. }
  160. if(mentionButton.parentNode.getAttribute('aria-checked') == 'true'){
  161. let AutoRemoveMentionButtonOn = mentionButton.parentNode.parentNode.insertBefore(mentionButton.parentNode.cloneNode(true),mentionButton.parentNode);
  162. AutoRemoveMentionButtonOn.id = 'AutoRemoveMentionButtonOn';
  163. AutoRemoveMentionButtonOn.querySelector('div[class*="mentionButton"]').textContent = messageLocalize(AutoRemoveMentionButtonNameArray);
  164. AutoRemoveMentionButtonOn.addEventListener('click',closeMentionEvent,false);
  165. } else {
  166. let AutoRemoveMentionButtonOff = mentionButton.parentNode.parentNode.insertBefore(mentionButton.parentNode.cloneNode(true),mentionButton.parentNode);
  167. AutoRemoveMentionButtonOff.id = 'AutoRemoveMentionButtonOff';
  168. AutoRemoveMentionButtonOff.querySelector('div[class*="mentionButton"]').textContent = messageLocalize(AutoRemoveMentionButtonNameArray);
  169. AutoRemoveMentionButtonOff.addEventListener('click',openMentionEvent,false);
  170. }
  171. mentionButton.click();
  172. if(mentionButton.parentNode.getAttribute('aria-checked') == 'true'){
  173. let AutoRemoveMentionButtonOn = mentionButton.parentNode.parentNode.insertBefore(mentionButton.parentNode.cloneNode(true),mentionButton.parentNode);
  174. AutoRemoveMentionButtonOn.id = 'AutoRemoveMentionButtonOn';
  175. AutoRemoveMentionButtonOn.querySelector('div[class*="mentionButton"]').textContent = messageLocalize(AutoRemoveMentionButtonNameArray);
  176. AutoRemoveMentionButtonOn.style.display = 'none';
  177. AutoRemoveMentionButtonOn.addEventListener('click',closeMentionEvent,false);
  178. } else {
  179. let AutoRemoveMentionButtonOff = mentionButton.parentNode.parentNode.insertBefore(mentionButton.parentNode.cloneNode(true),mentionButton.parentNode);
  180. AutoRemoveMentionButtonOff.id = 'AutoRemoveMentionButtonOff';
  181. AutoRemoveMentionButtonOff.querySelector('div[class*="mentionButton"]').textContent = messageLocalize(AutoRemoveMentionButtonNameArray);
  182. AutoRemoveMentionButtonOff.style.display = 'none';
  183. AutoRemoveMentionButtonOff.addEventListener('click',openMentionEvent,false);
  184. }
  185. let messagesWrapper = mentionButton.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.querySelector('div[class*="messagesWrapper"]');
  186. messagesWrapper.addEventListener('click',loadAutoRemoveSetting,false);
  187. messagesWrapper.click();
  188. });
  189. }
  190. });
  191. }
  192. });

QingJ © 2025

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