您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Blacklists posts by Creator ID
// ==UserScript== // @name Kemono Party Blacklist // @namespace https://MeusArtis.ca // @version 2.0.2 // @author Meus Artis // @description Blacklists posts by Creator ID // @icon https://www.google.com/s2/favicons?domain=kemono.cr // @match https://coomer.st/*/user/* // @match https://coomer.st/artists* // @match https://coomer.st/account/favorites/* // @match https://coomer.st/posts* // @match https://kemono.cr/*/user/* // @match https://kemono.cr/artists* // @match https://kemono.cr/account/favorites/* // @match https://kemono.cr/dms* // @match https://kemono.cr/posts* // @require https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js // @grant GM_getValue // @grant GM_setValue // @grant GM_registerMenuCommand // @license CC BY-NC-SA 4.0 // @run-at document-end // ==/UserScript== (function () { const styleSheet = document.createElement("style"); 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}`; document.head.appendChild(styleSheet); styleSheet.innerText = styles; styleSheet.type = "text/css"; if (GM_getValue("Blacklist") === undefined) { const BlacklistStorage = window.localStorage.getItem("blacklist"); if (BlacklistStorage) { try { alert("Migrating Blacklist to GreaseMonkey storage"); const OldBlacklist = JSON.parse(BlacklistStorage); const NewBlacklist = Array.isArray(OldBlacklist) ? OldBlacklist.filter(id => typeof id === "string" && id.length > 0) : []; GM_setValue("Blacklist", NewBlacklist.join(',')); if (confirm("Migration complete! Remove old localStorage entry?")) { window.localStorage.removeItem("blacklist"); console.log("LocalStorage Blacklist removed"); } else { console.log("LocalStorage Blacklist retained"); } } catch (e) { console.error("Migration failed:", e); alert("Error migrating Blacklist, Creating a new one"); GM_setValue("Blacklist", ""); } } else { alert("Blacklist does not exist, creating a new one"); GM_setValue("Blacklist", ""); } } function getBlacklist() { return GM_getValue("Blacklist", "").split(',').filter(Boolean); } function saveBlacklist(list) { GM_setValue("Blacklist", list.join(',')); } let Blacklisted = getBlacklist(); function applyBlacklist() { Blacklisted.forEach((item) => { $(`article[data-user='${item}']`).css({ display: "none" }); $(`a[data-id='${item}']`).css({ display: "none" }); $(`article.dm-card header a[href='/patreon/user/${item}']`).closest("article").css({ display: "none" }); }); } function setupBlacklistButtons() { const HeadMetaPost = document.querySelector("meta[name='user']"); const HeadMetaArtist = document.querySelector("meta[name='artist_name']"); const HeadMetaID = HeadMetaPost ? HeadMetaPost.getAttribute("content") : null; const HeadMetaArtistID = document.querySelector("meta[name='id']").getAttribute("content"); const ButtonArea = document.querySelector('.post__actions'); const ButtonAreaArtist = document.querySelector('.user-header__actions'); const BlacklistButton = document.createElement("BUTTON"); BlacklistButton.classList.add("creator__blacklist"); BlacklistButton.type = "button"; if (HeadMetaID) { const isBlacklisted = Blacklisted.includes(HeadMetaID); BlacklistButton.innerHTML = isBlacklisted ? '<span class="creator__blacklist-icon">⛒</span><span>Blacklisted</span>' : '<span class="creator__blacklist-icon">⛔</span><span>Blacklist</span>'; BlacklistButton.onclick = () => { Blacklisted = getBlacklist(); if (isBlacklisted) { Blacklisted = Blacklisted.filter(id => id !== HeadMetaID); console.log("Creator Unblacklisted"); } else { Blacklisted.push(HeadMetaID); console.log("Creator Blacklisted"); } saveBlacklist(Blacklisted); history.back(); }; if (ButtonArea) { console.log("Post Page"); ButtonArea.appendChild(BlacklistButton); } } else { const isBlacklisted = Blacklisted.includes(HeadMetaArtistID); BlacklistButton.innerHTML = isBlacklisted ? '<span class="creator__blacklist-icon">⛒</span><span>Blacklisted</span>' : '<span class="creator__blacklist-icon">⛔</span><span>Blacklist</span>'; BlacklistButton.onclick = () => { Blacklisted = getBlacklist(); if (isBlacklisted) { Blacklisted = Blacklisted.filter(id => id !== HeadMetaArtistID); console.log("Creator Unblacklisted"); } else { Blacklisted.push(HeadMetaArtistID); console.log("Creator Blacklisted"); } saveBlacklist(Blacklisted); history.back(); }; if (ButtonAreaArtist) { console.log("Artist Page"); ButtonAreaArtist.appendChild(BlacklistButton); } } } function observeUrlChange(callback) { let lastUrl = location.href; new MutationObserver(() => { const currentUrl = location.href; if (currentUrl !== lastUrl) { lastUrl = currentUrl; callback(); } }).observe(document.body, { childList: true, subtree: true }); } function initializeScript() { setTimeout(() => { Blacklisted = getBlacklist(); applyBlacklist(); setupBlacklistButtons(); }, 333); } function donate() { window.open("https://ko-fi.com/meusartis", '_blank') } GM_registerMenuCommand("Donate", donate); window.addEventListener("DOMContentLoaded", initializeScript); observeUrlChange(initializeScript); })();