您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Get those scenarios outta here!
// ==UserScript== // @name AIdungeon Tag Blacklist // @namespace AIDTagBlacklist // @version 1.1 // @description Get those scenarios outta here! // @author pitaden // @match https://play.aidungeon.io/main/* // @grant none // ==/UserScript== /* some ideas for me to implement later, maybe: add a "hard" blacklist, which replaces the desc with "This scenario was blocked due to hard blacklist" or removes the scenario from the list entirely sometimes, you don't even want to see what the tag is add a whitelist, if a scenario has a normal blacklisted tag and a whitelisted tag, it will stay unblocked. the scenario will still be blocked for hard blacklist tags. make an interface in-browser so you don't have to fuck with code to make this work the problem is... how the fuck does website design work. how do I do this. could try to copy AIdungeon's scenario tagging screen? somehow? now that I sorta know how javascript works: rewrite ALLLL of this code. */ (function() { 'use strict'; // full block means the scenario is removed entirely, as if it was never there // if it's false, it replaces the scenario with grey text that shows why it was blocked var fullBlock = true; var blockedTags = [ "smut", "femboy", "monstergirl", "monster girl", "monster girls", "monsterboy", "monster boy", "monster boys", "femdom", "meme", "incest", "nnn", "milf", "dilf", "gilf", "age gap", "age difference", "sugar daddy", "romance", "passionate", "impregnation", "bondage", "dating", "degenerate", "naked", "nude", "sex", "slut", "furry", "abuse", "yuri", "submission", "corruption", "feminization", "slavery", "watersports", "piss", "peeing", "horny", "lewd", "gay", // not nsfw on its own, but i've yet to see a gay scenario that isn't written to be NSFW "m/m", "waifu", "bimbo", "transformation", "yandere", "dick", "femsub", "petplay", "pet play", "sempai", "senpai", "slave", "herm", "futa", "blowjob", "edging", "porn", "arousal", "aroused", "teasing", "tomboy", "bestiality", "zoophilia", "femdom", "mommy", "succubus", "vanilla", "rule 34", "dumb idiot", " x ", "slime", "vore", "drowning", "cannibal", "pervert", "tentacle", "living suit", "weight", "feed", "stuffing", "bbw", "feet", "foot", "fetish", "maledom", "submissive", "hypnosis", "kidnapping" ]; // if I remember correctly, this doesn't actually work right now? var blockedAuthors = [ ]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // There's probably a better way to do this but interval seems to work fine setInterval(function() { var scenarios = document.getElementsByClassName("css-1dbjc4n r-18u37iz"); Array.from(scenarios).forEach(function(element, index, array) { if(element.checked != "true"){ blockedTags.forEach(function(a, b, c){ var tagText = element.childNodes[0].childNodes[0]; //console.log(tagText) if (tagText.innerHTML != undefined){ if(b%50 == 0){console.log(tagText)} var tagsHaveBlacklist = tagText.innerHTML.toLowerCase().indexOf(a)>=0 && element.getAttribute('style') == "border-color: rgb(153, 153, 153); border-radius: 20px; border-width: 0.5px; display: flex; margin: 4px; padding: 4px 8px;" if (tagsHaveBlacklist){ var scenarioBase = element.parentElement.parentElement.getElementsByClassName("css-18t94o4 css-1dbjc4n r-1loqt21 r-1otgn73 r-1i6wzkk r-lrvibr")[0]; var desc = scenarioBase.getElementsByClassName("css-901oao css-cens5h")[0]; var title = scenarioBase.childNodes[1]; var author = scenarioBase.getElementsByClassName("css-1dbjc4n r-18u37iz")[0].childNodes[0].childNodes[1]; if (fullBlock == true){ // contributed by thrwaway777 element.parentElement.parentElement.style.display = "none" }else{ if (element.parentElement.tagsFound == "true"){ desc.innerHTML = desc.innerHTML+", '"+tagText.innerHTML.slice(1,tagText.innerHTML.length)+"'"; } else{ element.parentElement.tagsFound = "true"; // To any javascript developers looking at this code: // sorry. title.innerHTML = "Blocked"; title.style.color = "rgb(128,128,128)"; title.style.fontSize = "18px"; title.style.marginBottom = "15px"; desc.innerHTML = "This scenario was blocked because of the tag(s) '"+tagText.innerHTML.slice(1,tagText.innerHTML.length)+"'"; desc.style.color = "rgb(128,128,128)" desc.style.fontSize = "15px" author.style.display = "none"; author.innerHTML = "[Blocked Author]"; author.style.color = "rgb(128,128,128)" author.style.fontSize = "15px" // because the profile picture and tag are still possibly recognizable, scrub those too scenarioBase.getElementsByClassName("css-1dbjc4n r-18u37iz")[0].childNodes[0].childNodes[0].style.display = "none"; // if there isn't a tag, pretend we don't see the undefined and carry on try{scenarioBase.getElementsByClassName("css-1dbjc4n r-18u37iz")[0].childNodes[0].childNodes[2].style.display = "none";}catch(err){} scenarioBase.parentElement.childNodes[1].style.display = 'none'; // hides tags scenarioBase.parentElement.childNodes[2].style.display = "none"; // hides upload/edit dates scenarioBase.parentElement.childNodes[3].style.display = "none"; } } } } }); element.checked = "true"; } }); var authors = document.getElementsByClassName("css-901oao css-bfa6kz"); Array.from(authors).forEach(function(element, index, array) { if(element.checked != "true"){ blockedAuthors.forEach(function(a, b, c){ if (element.innerHTML.toLowerCase().indexOf(a.toLowerCase())>=0 && element.getAttribute('style') == "color: rgb(224, 224, 224); font-family: HelveticaNeue-Light, Helvetica, sans-serif, Classic; font-size: 20px; margin-left: 8px;"){ var scenarioBase = element.parentElement.parentElement.parentElement.parentElement.getElementsByClassName("css-18t94o4 css-1dbjc4n r-1loqt21 r-1otgn73 r-1i6wzkk r-lrvibr")[0]; var desc = scenarioBase.getElementsByClassName("css-901oao css-cens5h")[0]; var title = scenarioBase.childNodes[1]; var author = scenarioBase.getElementsByClassName("css-1dbjc4n r-18u37iz")[0].childNodes[0].childNodes[1]; title.innerHTML = "Blocked"; title.style.color = "rgb(128,128,128)"; title.style.fontSize = "18px"; title.style.marginBottom = "15px"; desc.innerHTML = "This scenario was blocked because of the author."; desc.style.color = "rgb(128,128,128)" desc.style.fontSize = "15px" author.style.display = "none"; author.innerHTML = "[Blocked Author]"; author.style.color = "rgb(128,128,128)" author.style.fontSize = "15px" // because the profile picture and tag are still possibly recognizable, scrub those too scenarioBase.getElementsByClassName("css-1dbjc4n r-18u37iz")[0].childNodes[0].childNodes[0].style.display = "none"; // if there isn't a tag, pretend we don't see the undefined and carry on try{scenarioBase.getElementsByClassName("css-1dbjc4n r-18u37iz")[0].childNodes[0].childNodes[2].style.display = "none";}catch(err){} scenarioBase.parentElement.childNodes[1].style.display = "none"; // hides tags scenarioBase.parentElement.childNodes[2].style.display = "none"; // hides upload/edit dates scenarioBase.parentElement.childNodes[3].style.display = "none"; // I forgot what this hides } }); element.checked = "true"; } }); }, 200); })();