Remove Bad SA Posts

Hides bad SA posts

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Remove Bad SA Posts
// @namespace    LWPDWyfub
// @version      0.3
// @description  Hides bad SA posts
// @author       LWPDWyfub
// @match        https://forums.somethingawful.com/*
// @grant        none
// @license MIT
// @run-at document-end
// ==/UserScript==

(function() {
    'use strict';
    //Delete posts containing tweets from these accounts
    const badTweeters=["realDonaldTrump","elonmusk","StephenM", "djbaskin","tedcruz","DineshDSouza", "SenTedCruz", "RudyGiuliani","OhNoSheTwitnt","TeamTrump",
                       "timcast","mtracey","DonaldJTrumpJr","SebGorka","mtgreenee","prageru", "ggreenwald","disclosetv","CawthorneforNC", "HawleyMO","schmoyoho",
                       "parlertakes","erictrump","IvankaTrump","LLinWood","NilesGApol","USA_Polling","lwriteOK","deanna4congress","PpollingNumbers","Politics_Polls",
                       "seanhannity","mattgaetz","LindseyGrahamSC","benshapiro","ddale8","charliekirk11","FirstSquawk","stella_immanuel","stillgray","raheemkassam",
                       "parscale","mikepompeo","MrAndyNgo","RealAlexRubi","fitterhappierAJ","Jim_Jordan","TrumpWarRoom","HouseGOP","seanspicer","demswatchdog","jimmy_dore",
                       "RepMTG","themaxburns","EricTopol","PolicemanMeme","joerogan",
                       "RonnyJacksonTX","JackPosobiec","RNCResearch","FalconryFinance","GregAbbott_TX","RealCandaceO","newtgingrich","ScottAdamsSays","FoxNews",
                       "Deltaone","thehill","DrEricDing","patriottakes","FxHedgers","CawthornforNC","nypost"]
    //Delete posts containing these words or [combination of words]
    const badWords=["succdem","Greenwald", "NFT",
                    ["shark","smooth"],
                    ["battery","ocean"],
                    ["batteries","ocean"],
                    ["kids","cages"],
                    ["go","brandon"],
                    ["children", "border","camps"],
                    "Tara Reade",
                    "Trump",
                    "Musk","elon",
                    "shitlib","cuck"," simp "," simping "," GME ","Gamestop", "MTG"," succ "]
    //Delete these words or posts by these posters only in certain threads
    const inconsistentWords= [ {threadid: 1234567, word: "PosterName"}
        ]
    const targetNodes=document.getElementsByClassName("postbody")
    console.log("Found "+targetNodes.lenght+" posts")
    const url = new URL(document.URL);
    const urlsp = url.searchParams;
    const badPosts=[
        {text:"Deleted white noise post ",test:function(e){
            for(let obj of badWords.concat(inconsistentWords)){
                if(typeof obj=="string" && e.includes(obj.toLowerCase()))
                {
                    console.log("Deleted post with "+obj);
                    return obj
                }
                else if(typeof obj=="object")
                {
                    if(obj instanceof Array)
                    {
                        var found=[]
                        for(let o of obj)
                        {
                            if(e.includes(o.toLowerCase()))
                            {
                                found.push(o)
                            }
                        }
                        //Only return true if all words found
                        if(found.length==obj.length)
                        {
                            console.log("Deleting post containing "+found.join(" "))
                            return found.join("+")
                        }
                    }
                    else if('threadid' in obj && urlsp.get("threadid")==obj.threadid && e.includes(obj.word.toLowerCase())){
                        console.log("Deleting post containing "+obj.word+" in thread "+urlsp.get("threadid"))
                        return obj.word
                    }
                    else{
                        console.log("Skipping post not containing "+obj.word+" in thread "+urlsp.get("threadid")+" not in "+obj.threadid)
                    }
                }
            }
            return false
        }}
    ]

    const config = { attributes: true, childList: true, subtree: true };

    // Callback function to execute when mutations are observed
    const callback = function(mutationsList, observer) {
        for(let mutation of mutationsList) {
            if (mutation.type === 'childList') {
                if(mutation.target.className==="tweet")
                {
                    var tweetObj=mutation.target.children[0].children[1]
                    if(tweetObj)
                    {
                        for(let badTweeter of badTweeters)
                        {
                            if(tweetObj.href.toLowerCase().includes(badTweeter.toLowerCase()))
                            {
                                console.log("Removing bad tweet from idiot named "+badTweeter)
                                mutation.target.innerText="--->Removed bad tweet from idiot named "+badTweeter+"<---"
                            }
                        }
                    }
                }

            }
        }
    };
    const observer = new MutationObserver(callback);

    // Start observing the target node for configured mutations
    for(var i=0;i<targetNodes.length;i++)
    {
        var targetNode=targetNodes[i]
        var tval=targetNode.innerText.toLowerCase()
        for(let testCase of badPosts)
        {
            var res=testCase.test(tval)
            if(res != false)
            {
                targetNode.innerText=testCase.text
            }
        }

        observer.observe(targetNode, config);
    }


})();