Hide Ad Profiles on OnlyFansSigns

Dynamically blocks fake profiles or ad profiles across multiple platforms, with specific handling for Fanscout ads.

// ==UserScript==
// @name         Hide Ad Profiles on OnlyFansSigns
// @namespace    http://tampermonkey.net/
// @version      2.2
// @icon         https://www.google.com/s2/favicons?domain=onlyfans.com
// @description  Dynamically blocks fake profiles or ad profiles across multiple platforms, with specific handling for Fanscout ads.
// @author       Cody JORDAN
// @match        https://fanscout.com/*
// @match        https://onlyselects.com/*
// @match        https://onlyfanssigns.com/*
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function () {
    'use strict';

    /**
     * Hides ad profiles based on attributes, classes, and keywords.
     */
    function blockAdProfiles() {
        const profiles = document.querySelectorAll('.swiper-slide, .slide-content, .profile-card, .account-card');

        profiles.forEach(profile => {
            const isPromo = profile.hasAttribute('data-promo'); // Promo marker
            const hasImptrc = profile.hasAttribute('data-imptrc'); // Impression tracking marker
            const hasClctrc = profile.hasAttribute('data-clctrc'); // Click tracking marker
            const adsElement = profile.querySelector('.ads'); // Ad-related class
            const usernameElement = profile.querySelector('a'); // Username or profile link

            const adTextMarkers = ['AD', 'Sponsored', 'Promo', 'Advertisement']; // Ad keywords

            // Identify fake or ad profiles
            const isFakeProfile =
                isPromo ||
                hasImptrc ||
                hasClctrc ||
                (adsElement && adTextMarkers.some(marker => adsElement.textContent.includes(marker))) ||
                (usernameElement && adTextMarkers.some(marker => usernameElement.textContent.includes(marker)));

            if (isFakeProfile) {
                console.log('Hiding fake profile:', profile);
                profile.style.display = 'none';
            }
        });
    }

    /**
     * Monitors the DOM for dynamically loaded content.
     */
    function observeDomChanges() {
        const observer = new MutationObserver(() => {
            blockAdProfiles();
        });

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

    /**
     * Initializes the script.
     */
    function init() {
        console.log('Universal Profile Ad Blocker Initialized.');
        blockAdProfiles();
        observeDomChanges();
    }

    // Execute the script
    init();
})();