Reddit Comment Filter

Automatically hides annoying, repetitive, or meaningless Reddit comments

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

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

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name         Reddit Comment Filter
// @namespace    https://codeberg.org/cache_miss
// @version      1.3
// @description  Automatically hides annoying, repetitive, or meaningless Reddit comments
// @author       Logan Kirkland <[email protected]>
// @license      MIT
// @match        https://www.reddit.com/*/comments/*
// @match        https://old.reddit.com/*/comments/*
// @grant        none
// @homepageURL  https://codeberg.org/cache_miss/reddit-comment-filter
// @homepage     https://codeberg.org/cache_miss/reddit-comment-filter
// @supportURL   https://codeberg.org/cache_miss/reddit-comment-filter/issues
// ==/UserScript==

(function () {
    'use strict';

    // Regex patterns for comments to filter
    const FILTERED_PATTERNS = [
        /^.{0,50}laughed .{0,50} harder than .{0,50} should.{0,50}$/im,
        /^.{0,50}spit out .{0,50} coffee.{0,50}$/im,
        /^.{0,50}going to hell for this.{0,50}$/im,
        /^.{0,50}enough reddit for today.{0,50}$/im,
        /^.{0,50}comment right here.{0,50} officer.{0,50}$/im,
        /^.{0,50}how do .{0,50} delete someone else.{0,50} comment.{0,50}$/im,
        /^.{0,50}terrible day to have eyes.{0,50}$/im,
        /^.{0,50}terrible day to be literate.{0,50}$/im,
        /^.{0,50}take my up\w+.{0,50}$/im,
        /^.{0,50}sav(?:e|ing) this for later.{0,50}$/im,
        /^.{0,50}chef'*s kiss.{0,50}$/im,
        /^.{0,50}cutting onions.{0,50}$/im,
        /^.{0,50}who hurt you.{0,50}$/im,
        /^.{0,50}don’*t deserve dogs.{0,50}$/im,
        /^.{0,50}misread instructions.{0,50}now my.{0,50}$/im,
        /^.{0,50}tell me you.{0,50} without telling me.{0,50}$/im,
        /^.{0,50}not all heroe*s wear.{0,50}capes*.{0,50}$/im,
        /^.{0,50}sigh.{0,50}unzip.{0,50}pants.{0,50}$/im,
        /^.{0,50}not.{0,50}proudest.{0,50}$/im,
        /^.{0,50}downvoted for this.*$/im,
        /^.{0,50}will get downvoted.*$/im,
        /^.{0,10}this(?: one right)*.{0,10}$/im,
        /^.*(?:👏.*){5,}.*$/im,
        /^.{0,10}rip.{0,10}$/im,
        /^.{0,50}underrated \w+.{0,10}$/im,
        /^.{0,10}came here to \w+ this.{0,10}$/im,
        /^.{0,50}scroll(?:ed)* \w+ far.{0,50}$/im,
        /^.{0,10}beat\s*(?:me|meat|my meat)\s*to\s*it.{0,10}$/im,
        /^.{0,10}too poor.{0,10}give.{0,10}gold.{0,10}$/im,
        /^.{0,50}not crying.{0,10}you.{0,5}crying.{0,50}$/im,
        /^this \w+ \w+s.{0,10}$/im,
        /^.{0,50}am i the only one who.*$/im,
        /^.{0,50}is it just me.*$/im,
        /^f$/im,
        /^.{0,10}f in the.{0,50}$/im,
        /^.{0,10}must be fun at part.{0,50}$/im,
        /^chat.{0,10}is this real.{0,10}$/im,
        /^is this real.{0,10}chat.{0,10}$/im,
        /^.{0,50}don'*t \w+ (?:how|why) this (?:comment |post )*is so low.{0,50}$/im,
        /^(?:how|why) is this (?:comment |post )*so low.{0,10}$/im,
        /^i hate sand.{0,80}$/im,
        /^.{0,10}play \w+ \w+,* win \w+ \w+.{0,10}$/im,
        /^.{0,10}every \w*\s*thread.{0,10}$/im,
        /^thanks for the .{0,20} kind.{0,50}$/im,
        /^.{0,50}good (?:sir|lady|madam).{0,50}$/im,
        /^.{0,50}believe.{0,50}(top|most).{0,50}comment.{0,50}$/im,
        /^.{0,50}calm down satan.{0,50}$/im,
        /^.{0,50}repost{0,50}$/im,
        /^.{0,50}mom'*s spaghetti{0,50}$/im,
    ];

    function isOldReddit() {
        return document.URL.includes("old.reddit.com")
    }

    function shouldFilter(text) {
        return FILTERED_PATTERNS.some(pattern => pattern.test(text));
    }

    function processComments() {
        const oldReddit = isOldReddit();
        const comments = document.querySelectorAll(oldReddit ? 'div.comment' : 'shreddit-comment')

        for (const comment of comments) {
            const commentTextNode = comment.querySelector(oldReddit ? '.md' : 'div[slot="comment"]')

            // Comment text sometimes doesn't exist, such as when the comment
            // has been deleted
            if (commentTextNode === null) continue;

            const commentText = commentTextNode.textContent.trim().replace(/\n/g, ' ');
            if (shouldFilter(commentText)) {
                comment.remove();
                numFiltered++;
                console.debug("Filtered comment: " + commentText)
            }
        }
    }

    // Initial processing
    let numFiltered = 0;
    processComments();
    console.debug("Total comments filtered: " + numFiltered)


    // Monitor DOM changes for dynamically loaded comments
    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            if (mutation.addedNodes.length) {
                processComments();
                console.debug("Total comments filtered: " + numFiltered)
            }
        });
    });

    observer.observe(document.body, {
        childList: true, subtree: true
    });
})();