- // ==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);
- })();