巴哈姆特刪信助手

一鍵刪除指定的通知信(預設刪除動畫瘋獲獎通知、【勇者福利社】成功獲得抽獎資格通知信)

  1. // ==UserScript==
  2. // @name 巴哈姆特刪信助手
  3. // @namespace https://github.com/vios10009
  4. // @version 1.2
  5. // @description 一鍵刪除指定的通知信(預設刪除動畫瘋獲獎通知、【勇者福利社】成功獲得抽獎資格通知信)
  6. // @author vios10009
  7. // @match https://mailbox.gamer.com.tw/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=gamer.com.tw
  9. // @grant GM_getValue
  10. // @grant GM_setValue
  11. // @grant GM_registerMenuCommand
  12. // ==/UserScript==
  13.  
  14. let bhSlave = document.getElementById("BH-slave");
  15. let newButton = document.createElement("button");
  16.  
  17. // 自訂要刪除的信件標題列表
  18. const defaultTitles = [
  19. "動畫瘋獲獎通知",
  20. "【勇者福利社】成功獲得抽獎資格通知信"
  21. ];
  22. // 從 GM_getValue 取得已儲存的標題,如果沒有則使用預設標題
  23. let titlesToDelete = GM_getValue('titlesToDelete', defaultTitles);
  24.  
  25. newButton.innerText = "刪除本頁的指定通知信";
  26. newButton.style.cssText = `
  27. width: 100%;
  28. margin-bottom: 10px;
  29. height: 2.5rem;
  30. background-color: rgb(215, 84, 84);
  31. border-radius: 5px;
  32. border: 1px solid rgb(179, 59, 59);
  33. color: white;
  34. `;
  35. newButton.onclick = () => { deleteLetters(titlesToDelete) };
  36. bhSlave.insertBefore(newButton, bhSlave.querySelector("h5"));
  37.  
  38. let deleteCount = 0; // 記錄刪除的信件數量
  39.  
  40. function deleteLetters(titles) {
  41. let bhTable = document.querySelector(".BH-table");
  42. let letters = bhTable.querySelectorAll("tr.readU, tr.readR");
  43. let found = false;
  44.  
  45. for (let letter of letters) {
  46. let mailTitle = letter.querySelector(".mailTitle").innerText;
  47. if (titles.includes(mailTitle)) {
  48. letter.querySelector("input[type=checkbox]").checked = true;
  49. found = true;
  50. deleteCount++; // 累計刪除的信件數量
  51. }
  52. }
  53.  
  54. if (found) {
  55. // 顯示按鈕區域
  56. document.getElementById("mail-action-area").style.display = "block";
  57.  
  58. // 啟用刪除按鈕
  59. let deleteButton = document.querySelector("[onclick='mailbox.delMail();']");
  60. if (deleteButton) {
  61. deleteButton.classList.remove("is-disabled");
  62. deleteButton.click(); // 觸發刪除
  63.  
  64. setTimeout(() => {
  65. let confirmButton = document.querySelector(".btn-box .btn-primary");
  66. if (confirmButton) {
  67. confirmButton.click(); // 自動點擊「確定」
  68.  
  69. // 等待彈窗處理完畢後再點擊「關閉」
  70. setTimeout(() => {
  71. let closeButton = document.querySelector(".btn-box .btn-danger");
  72. if (closeButton) {
  73. closeButton.click(); // 自動點擊「關閉」
  74. }
  75. // 刪除後重新刪除目前頁面項目
  76. setTimeout(() => deleteLetters(titles), 1000);
  77. }, 1500);
  78. }
  79. }, 500);
  80. }
  81. } else {
  82. // 若當前頁面無可刪除的信件則結束並告知總共刪除的數量
  83. if (deleteCount == 0) {
  84. alert(`目前頁面沒有可刪除的信件。`);
  85. } else {
  86. alert(`刪除完成!總共刪除了 ${deleteCount} 封指定通知信。`);
  87. }
  88. }
  89. }
  90.  
  91. // 新增要刪除的標題
  92. GM_registerMenuCommand("新增要刪除的信件標題", () => {
  93. let newTitle = prompt("輸入要刪除的信件標題:");
  94. if (newTitle && !titlesToDelete.includes(newTitle)) {
  95. titlesToDelete.push(newTitle);
  96. GM_setValue('titlesToDelete', titlesToDelete);
  97. alert("已新增標題:" + newTitle);
  98. } else {
  99. alert("標題無效或重複!");
  100. }
  101. });
  102.  
  103. // 刪除要刪除的標題
  104. GM_registerMenuCommand("刪除要刪除的信件標題", () => {
  105. let titleToDelete = prompt("輸入要刪除的信件標題:");
  106. let index = titlesToDelete.indexOf(titleToDelete);
  107. if (index > -1) {
  108. titlesToDelete.splice(index, 1);
  109. GM_setValue('titlesToDelete', titlesToDelete);
  110. alert("已刪除標題:" + titleToDelete);
  111. } else {
  112. alert("找不到該標題!");
  113. }
  114. });
  115.  
  116. // 顯示目前設定的標題
  117. GM_registerMenuCommand("顯示目前設定的標題", () => {
  118. if (titlesToDelete.length > 0) {
  119. let titleList = titlesToDelete.join("\n");
  120.  
  121. // 建立彈出視窗的 textarea
  122. let textarea = document.createElement("textarea");
  123. textarea.value = titleList;
  124. textarea.style.width = "400px";
  125. textarea.style.height = "200px";
  126. textarea.style.position = "fixed";
  127. textarea.style.top = "50%";
  128. textarea.style.left = "50%";
  129. textarea.style.transform = "translate(-50%, -50%)";
  130. textarea.style.zIndex = "9999";
  131. textarea.style.padding = "10px";
  132. textarea.style.border = "1px solid #ccc";
  133. textarea.style.background = "white";
  134. textarea.style.fontSize = "14px";
  135.  
  136. document.body.appendChild(textarea);
  137. textarea.select(); // 自動選取內容,方便複製
  138.  
  139. // 當點擊其他地方時,自動關閉 textarea
  140. textarea.onblur = () => document.body.removeChild(textarea);
  141. } else {
  142. alert("目前沒有設定任何標題。");
  143. }
  144. });

QingJ © 2025

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