ArtificialInput / Soundcloud Anti Repost

// ==UserScript==
// @name         Soundcloud Anti Repost
// @version      1.0
// @author       Redcrafter
// @description  Remove reposts from soundcloud
// @license      MIT
// @include      https://soundcloud.com/stream
// @run-at       document-end
// @namespace    https://github.com/Redcrafter/
// ==/UserScript==

function removeReposts() {
    for (const item of document.querySelectorAll(".soundList__item")) {
        if (item.querySelector(".soundContext__repost")) {
            item.remove();
        }
    }
}

let playManager;

// Partly taken from https://github.com/web-scrobbler/web-scrobbler/blob/master/src/connectors/soundcloud-dom-inject.js
// Searches for the playerManager module
unsafeWindow.webpackJsonp([], {
    0: function (e, t, _require) {
        let modules = _require.c;

        for (let moduleid in modules) {
            if (modules.hasOwnProperty(moduleid)) {
                let el = _require(moduleid);

                if (typeof el.playCurrent === 'function') {
                    playManager = el;
                    return;
                }
            }
        }
    }
});

if (!playManager) {
    throw new Error("Unable to find playManager.");
} else {
    // Inject a function to check for reposts
    let oldSet = playManager.setCurrentItem;
    playManager.setCurrentItem = (e) => {
        let r = false;
        try {
            // Not sure if this safe
            r = e._submodels[0]._events["change:user"][1].context.options.actionType === "repost";
        } catch (error) {
            console.error("An Exception occoured while trying to determine repost status");
        }
        
        if (r) {
            playManager.removeItem(e);
            playManager.playNext();
        } else {
            oldSet(e);
        }
    };

    setInterval(removeReposts, 500);
}