(() => { let cache = {timepoints: {}, banned:load_banned()}; function load_banned() { return JSON.parse(localStorage.getItem('bannedChannels')) || []; } function save_banned(banned) { localStorage.setItem('bannedChannels', JSON.stringify(banned)); } function edit_page() { for (const element of document.getElementById("related").querySelectorAll('ytd-compact-video-renderer')) { if (element.getAttribute('scanned')) continue; element.setAttribute('scanned', 'true'); const channel = extract_channel_id(element); if (is_banned(channel)) element.remove(); else add_button(element, channel); } } function add_button(element, channel) { const button = document.createElement('button'); button.textContent = 'Ban This Channel'; button.addEventListener('click', () => { ban(channel); element.parentNode.removeChild(element); }); element.appendChild(button); } function extract_channel_id(element) { return element.querySelector('.ytd-channel-name').innerText; } function last_ran(checkpoint) { if (!cache.timepoints[checkpoint]) { cache.timepoints[checkpoint] = Date.now(); return 0; } let difference = Date.now() - cache.timepoints[checkpoint]; cache.timepoints[checkpoint] = Date.now(); return difference; } function is_banned(channel) { if(last_ran("loading banned channels") > 1000) cache.banned = load_banned(); return cache.banned.includes(channel); } function ban(channel) { cache.banned.push(channel); save_banned(cache.banned); } setInterval(edit_page, 50); })();