pixiv blacklist

hide unwant artist in search

  1. // ==UserScript==
  2. // @name pixiv blacklist
  3. // @version 0.03
  4. // @description hide unwant artist in search
  5. // @author x94fujo6
  6. // @match https://www.pixiv.net/*
  7. // @grant GM_getValue
  8. // @grant GM_setValue
  9.  
  10. // @namespace https://gf.qytechs.cn/users/110545
  11. // ==/UserScript==
  12. /* jshint esversion: 9 */
  13.  
  14. (async function () {
  15. let current = window.location.href,
  16. retry_count = 0,
  17. delay = 1000;
  18.  
  19. console.log("script start");
  20.  
  21. window.onload = setTimeout(checkUrl, delay);
  22.  
  23. setInterval(() => {
  24. let url = window.location.href;
  25. if (url != current) {
  26. console.log(`re-run script @${url}`);
  27. window.onload = setTimeout(checkUrl, delay);
  28. current = url;
  29. }
  30. }, 1000);
  31.  
  32. function checkUrl() {
  33. let url = window.location.href;
  34. if (url.includes("/tags/")) main("tag");
  35. if (url.includes("/users/")) main("user");
  36. }
  37.  
  38. async function main(mode = "") {
  39. let
  40. g = {
  41. key: {
  42. blacklist: "blacklist",
  43. },
  44. default: {
  45. blacklist: [],
  46. },
  47. get(key) {
  48. this.is_key(key);
  49. return GM_getValue(key, this.default[key]);
  50. },
  51. set(key, value) {
  52. this.is_key(key);
  53. return GM_setValue(key, value);
  54. },
  55. is_key(key) {
  56. if (!this.default[key]) throw Error("unknown key");
  57. },
  58. },
  59. checkBlacklist = (ele) => {
  60. let user_id = ele.querySelector("a[href*='/users/']");
  61. if (user_id) {
  62. user_id = Number(user_id.href.match(/users\/(\d+)/)[1]);
  63. } else {
  64. return false;
  65. }
  66. if (blacklist.has(user_id)) {
  67. let nodes = [...ele.childNodes[0].childNodes];
  68. nodes.pop();
  69. nodes.forEach(node => {
  70. node.style.opacity = 0;
  71. node.style.pointerEvents = "none";
  72. });
  73. return true;
  74. }
  75. return false;
  76. },
  77. result = false,
  78. blacklist = new Set(g.get(g.key.blacklist));
  79.  
  80. console.log("script main");
  81. result = document.querySelectorAll(".juyBTC");
  82. console.log("result", result);
  83. if (mode == "user") {
  84. console.log("user");
  85. let b = null,
  86. ids = {
  87. remove: "_blacklist_remove",
  88. add: "_blacklist_add",
  89. },
  90. add = document.getElementById(ids.add),
  91. remove = document.getElementById(ids.remove);
  92. if (add) {
  93. add.remove();
  94. add = null;
  95. }
  96. if (remove) {
  97. remove.remove();
  98. remove = null;
  99. }
  100. b = document.querySelector("button[data-gtm-user-id]");
  101. if (b) {
  102. let user_id = Number(b.getAttribute("data-gtm-user-id"));
  103. if (blacklist.has(user_id)) {
  104. remove = b.cloneNode();
  105. remove.id = ids.remove;
  106. remove.textContent = "blacklist--";
  107. remove.type = "button";
  108. remove.style = `
  109. color: white;
  110. background-color: limegreen;
  111. `;
  112. remove.onclick = () => {
  113. blacklist.delete(user_id);
  114. g.set(g.key.blacklist, [...blacklist]);
  115. console.log(`user[${user_id}] is remove from blacklist`, [...blacklist]);
  116. document.location.reload();
  117. };
  118. b.insertAdjacentElement("afterend", remove);
  119. } else {
  120. add = b.cloneNode();
  121. add.id = ids.add;
  122. add.textContent = "blacklist++";
  123. add.type = "button";
  124. add.style = `
  125. color: white;
  126. background-color: black;
  127. `;
  128. add.onclick = () => {
  129. blacklist.add(user_id);
  130. g.set(g.key.blacklist, [...blacklist]);
  131. console.log(`user[${user_id}] is add to blacklist`, [...blacklist]);
  132. document.location.reload();
  133. };
  134. b.insertAdjacentElement("afterend", add);
  135. }
  136. b.addEventListener("click", () => {
  137. window.location.reload();
  138. });
  139. } else {
  140. console.log("user button not found");
  141. return false;
  142. }
  143. console.log("script end [user]");
  144. return true;
  145. }
  146.  
  147. if (mode == "tag") {
  148. let count = 0;
  149. console.log("search");
  150.  
  151. result.forEach(r => {
  152. let all = r.querySelectorAll("li");
  153. all.forEach(ele => {
  154. if (checkBlacklist(ele)) count++;
  155. });
  156. });
  157.  
  158. console.log(`script hide ${count} artworks`);
  159. console.log("script end [search]");
  160. if (count == 0) {
  161. console.log(`count = 0, retry(${retry_count})`);
  162. if (retry_count < 3) {
  163. retry_count++;
  164. setTimeout(() => {
  165. main("tag");
  166. }, delay);
  167. } else {
  168. retry_count = 0;
  169. console.log(`end retry`);
  170. }
  171. }
  172. return count;
  173. }
  174. console.log("script end");
  175. return false;
  176. }
  177. })();

QingJ © 2025

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