Kemono Party Blacklist

Blacklists posts by Creator ID

  1. // ==UserScript==
  2. // @name Kemono Party Blacklist
  3. // @namespace https://MeusArtis.ca
  4. // @version 1.3.6
  5. // @author Meus Artis
  6. // @description Blacklists posts by Creator ID
  7. // @icon https://www.google.com/s2/favicons?domain=kemono.su
  8. // @match https://coomer.su/*/user/*
  9. // @match https://coomer.su/artists*
  10. // @match https://coomer.su/account/favorites/*
  11. // @match https://coomer.su/posts*
  12. // @match https://kemono.su/*/user/*
  13. // @match https://kemono.su/artists*
  14. // @match https://kemono.su/account/favorites/*
  15. // @match https://kemono.su/dms*
  16. // @match https://kemono.su/posts*
  17. // @require https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js
  18. // @license CC BY-NC-SA 4.0
  19. // @run-at document-end
  20. // ==/UserScript==
  21. // ChatGPT Go BRRRR, still no idea why it only works when pasting urls in new tabs, but not right click > open in new tab/window
  22. (function () {
  23. const BlacklistStorage = window.localStorage;
  24. const styleSheet = document.createElement("style");
  25. const styles = `.creator__blacklist{color:#ddd;font-weight:700;text-shadow:#000 0 0 3px,#000 -1px -1px 0px,#000 1px 1px 0;background-color:transparent;border:transparent}.user-header__blacklist{box-sizing:border-box;font-weight:700;color:#fff;text-shadow:#000 0 0 3px,#000 -1px -1px 0px,#000 1px 1px 0;background-color:transparent;border:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}`;
  26. document.head.appendChild(styleSheet);
  27. styleSheet.innerText = styles;
  28. styleSheet.type = "text/css";
  29. if (!BlacklistStorage.getItem("blacklist")) {
  30. alert("Blacklist does not exist, creating a new one");
  31. BlacklistStorage.setItem("blacklist", JSON.stringify([]));
  32. }
  33. const Blacklisted = JSON.parse(BlacklistStorage.getItem("blacklist"));
  34. function applyBlacklist() {
  35. Blacklisted.forEach((item) => {
  36. $(`article[data-user='${item}']`).css({ display: "none" });
  37. $(`a[data-id='${item}']`).css({ display: "none" });
  38. $(`article.dm-card header a[href='/patreon/user/${item}']`).closest("article").css({ display: "none" });
  39. });
  40. }
  41. function setupBlacklistButtons() {
  42. const HeadMetaPost = document.querySelector("meta[name='user']");
  43. const HeadMetaArtist = document.querySelector("meta[name='artist_name']");
  44. const HeadMetaID = HeadMetaPost ? HeadMetaPost.getAttribute("content") : null;
  45. const HeadMetaArtistID = document.querySelector("meta[name='id']").getAttribute("content");
  46. const ButtonArea = document.querySelector('.post__actions');
  47. const ButtonAreaArtist = document.querySelector('.user-header__actions');
  48. const BlacklistButton = document.createElement("BUTTON");
  49. BlacklistButton.classList.add("creator__blacklist");
  50. BlacklistButton.type = "button";
  51. if (HeadMetaID) {
  52. const isBlacklisted = Blacklisted.includes(HeadMetaID);
  53. BlacklistButton.innerHTML = isBlacklisted
  54. ? '<span class="creator__blacklist-icon">⛒</span><span>Blacklisted</span>'
  55. : '<span class="creator__blacklist-icon">⛔</span><span>Blacklist</span>';
  56. BlacklistButton.onclick = () => {
  57. if (isBlacklisted) {
  58. Blacklisted.splice(Blacklisted.indexOf(HeadMetaID), 1);
  59. alert("Creator Unblacklisted");
  60. } else {
  61. Blacklisted.push(HeadMetaID);
  62. alert("Creator Blacklisted");
  63. }
  64. BlacklistStorage.setItem("blacklist", JSON.stringify(Blacklisted));
  65. history.back();
  66. };
  67. if (ButtonArea) {
  68. console.log("Post Page");
  69. ButtonArea.appendChild(BlacklistButton);
  70. }
  71. } else {
  72. const isBlacklisted = Blacklisted.includes(HeadMetaArtistID);
  73. BlacklistButton.innerHTML = isBlacklisted
  74. ? '<span class="creator__blacklist-icon">⛒</span><span>Blacklisted</span>'
  75. : '<span class="creator__blacklist-icon">⛔</span><span>Blacklist</span>';
  76. BlacklistButton.onclick = () => {
  77. if (isBlacklisted) {
  78. Blacklisted.splice(Blacklisted.indexOf(HeadMetaArtistID), 1);
  79. alert("Creator Unblacklisted");
  80. } else {
  81. Blacklisted.push(HeadMetaArtistID);
  82. alert("Creator Blacklisted");
  83. }
  84. BlacklistStorage.setItem("blacklist", JSON.stringify(Blacklisted));
  85. history.back();
  86. };
  87. if (ButtonAreaArtist) {
  88. console.log("Artist Page");
  89. ButtonAreaArtist.appendChild(BlacklistButton);
  90. }
  91. }
  92. }
  93. function observeUrlChange(callback) {
  94. let lastUrl = location.href;
  95. new MutationObserver(() => {
  96. const currentUrl = location.href;
  97. if (currentUrl !== lastUrl) {
  98. lastUrl = currentUrl;
  99. callback();
  100. }
  101. }).observe(document.body, { childList: true, subtree: true });
  102. }
  103. function initializeScript() {
  104. setTimeout(() => {
  105. applyBlacklist();
  106. setupBlacklistButtons();
  107. }, 333);
  108. }
  109. window.addEventListener("DOMContentLoaded", initializeScript);
  110. observeUrlChange(initializeScript);
  111. })();