Youtube block all, not interested in all, dismiss all

不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa

当前为 2024-08-29 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Youtube block all, not interested in all, dismiss all
// @name:zh-CN   Youtube block all, not interested in all, dismiss all
// @name:zh-TW   Youtube block all, not interested in all, dismiss all
// @name:ja   Youtube block all, not interested in all, dismiss all
// @name:ko   Youtube block all, not interested in all, dismiss all
// @name:de   Youtube block all, not interested in all, dismiss all
// @name:es   Youtube block all, not interested in all, dismiss all
// @name:eo   Youtube block all, not interested in all, dismiss all
// @name:fr   Youtube block all, not interested in all, dismiss all
// @name:it   Youtube block all, not interested in all, dismiss all
// @name:ru   Youtube block all, not interested in all, dismiss all
// @name:vi   Youtube block all, not interested in all, dismiss all
// @name:pt-BR   Youtube block all, not interested in all, dismiss all
// @name:id   Youtube block all, not interested in all, dismiss all
// @name:ar   Youtube block all, not interested in all, dismiss all
// @name:bg   Youtube block all, not interested in all, dismiss all
// @name:cs   Youtube block all, not interested in all, dismiss all
// @name:tr   Youtube block all, not interested in all, dismiss all
// @name:el   Youtube block all, not interested in all, dismiss all
// @name:hu   Youtube block all, not interested in all, dismiss all
// @name:th   Youtube block all, not interested in all, dismiss all
// @version      0.1
// @description  不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:zh-CN   不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:zh-TW   不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:ja      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:ko      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:de      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:es      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:eo      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:fr      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:it      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:ru      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:vi      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:pt-BR   不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:id      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:ar      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:bg      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:cs      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:tr      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:el      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:hu      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:th      不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @author       evanlai
// @match        https://www.youtube.com/*
// @require            https://openuserjs.org/src/libs/sizzle/GM_config.js
// @require            https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert.min.js
// @require            https://cdn.jsdelivr.net/npm/[email protected]/dist/cdn.min.js
// @grant              GM_getValue
// @grant              GM_setValue
// @grant              none
// @namespace https://greasyfork.org/users/732057
// ==/UserScript==
if (window.trustedTypes && window.trustedTypes.createPolicy) {
    window.trustedTypes.createPolicy('default', {
    createHTML: string => string,
    createScriptURL: string => string,
    createScript: string => string,
    });
}
function wait(ms) {
    return new Promise((resolve) => {
        setTimeout(resolve, ms);
    });
}
function inArray(array, element) {
  return array.indexOf(element) !== -1;
}


var runflag = true;
var firstEnterThisPage = true;
async function dismissCurrent() {
    let clickedSomething = false;
    let foundAusblenden = false;

    for (const item of document.querySelectorAll('ytd-menu-service-item-renderer')) {

        if (item.icon === (localStorage.getItem('videoOrCreator') === "video" ? "REMOVE" : "NOT_INTERESTED")) {
            clickedSomething = true;
            item.click();
        }
        // else if (item.icon === "__") {
        //     foundAusblenden = item;
        // }
    }
    if (!clickedSomething && foundAusblenden !== false) {
        foundAusblenden.click();
    }
    return true;
}
async function dismissAll() {
    let list = document.querySelectorAll('ytd-rich-grid-media button[aria-label]');

    while (firstEnterThisPage && list.length < 1) {
        await wait(1000);
        list = document.querySelectorAll('ytd-rich-grid-media button[aria-label]');
    }
    firstEnterThisPage = false;

    let i = 0;
    for (let item of list) {
        item.click();
        await wait(50);
        await dismissCurrent();
        await wait(100);
        i++;
        if (i >= parseInt(localStorage.getItem('maximumNumberOfBlocksPerSession'))) break;
    }
    if (runflag) {
        runflag = false;
        // await dismissAll();
    }
    window.location.reload();
}

window.dismissAll = function() {
    dismissAll();
}
window.openGmcSettings = function() {
    let settings = document.getElementById('J_settings');
    settings.style.display = '';

    swal({
        content: settings,
        buttons: {
            // confirm: {
            //     text: "save",
            //     value: 1
            // },
            cancel: "close",
        },
    }).then(async (value) => {
        settings.style.display = 'none';
        // if (value !== 1) return false

    });
}

function createButton() {
    var elementForInsertNewButton = document.querySelector('#start') || document.querySelector('#logo-icon') || document.querySelector('#country-code');

    var dismissAllLink = document.createElement('a');
    dismissAllLink.id = 'J_dismiss_all';
    dismissAllLink.href = 'javascript:';
    dismissAllLink.style.display = 'inline-flex';
    dismissAllLink.style.marginLeft = '2em';
    dismissAllLink.style.alignItems = 'center';
    dismissAllLink.style.verticalAlign = 'middle';
    dismissAllLink.style.color = 'gray';
    dismissAllLink.style.fontSize = '2em';
    dismissAllLink.style.lineHeight = '2em';
    dismissAllLink.style.textDecoration = 'none';
    dismissAllLink.onclick = window.dismissAll;
    dismissAllLink.textContent = '⟳';

    var openGmcSettingsLink = document.createElement('a');
    openGmcSettingsLink.id = 'J_open_settings';
    openGmcSettingsLink.href = 'javascript:';
    openGmcSettingsLink.style.display = 'inline-flex';
    openGmcSettingsLink.style.marginTop = '1px';
    openGmcSettingsLink.style.marginLeft = '16px';
    openGmcSettingsLink.style.alignItems = 'center';
    openGmcSettingsLink.style.verticalAlign = 'middle';
    openGmcSettingsLink.style.color = 'gray';
    openGmcSettingsLink.style.fontSize = '2em';
    openGmcSettingsLink.style.lineHeight = '2em';
    openGmcSettingsLink.style.textDecoration = 'none';
    openGmcSettingsLink.onclick = window.openGmcSettings;
    openGmcSettingsLink.textContent = '⋮';

    elementForInsertNewButton.appendChild(dismissAllLink);
    elementForInsertNewButton.appendChild(openGmcSettingsLink);
}

createButton();

// settings
document.addEventListener('alpine:init', () => {
    var maximumNumberOfBlocksPerSession = localStorage.getItem('maximumNumberOfBlocksPerSession');
    if(typeof maximumNumberOfBlocksPerSession === 'undefined') {
        maximumNumberOfBlocksPerSession = 12;
        localStorage.setItem('maximumNumberOfBlocksPerSession', maximumNumberOfBlocksPerSession);
    }
    Alpine.store('maximumNumberOfBlocksPerSession', {
        value: maximumNumberOfBlocksPerSession,
        valueHasChanged(){
            localStorage.setItem('maximumNumberOfBlocksPerSession', this.value);
        }
    })


    var autoMode = localStorage.getItem('autoMode');
    if(typeof autoMode === 'undefined') {
        autoMode = false;
        localStorage.setItem('autoMode', autoMode);
    }
    Alpine.store('autoMode', {
        on: autoMode,
        toggle() {
            this.on = ! this.on
            localStorage.setItem('autoMode', this.on);
        }
    })


    var videoOrCreator = localStorage.getItem('videoOrCreator');
    if(typeof videoOrCreator === 'undefined') {
        videoOrCreator = 'video';
        localStorage.setItem('videoOrCreator', videoOrCreator);
    }
    Alpine.store('videoOrCreator', {
        value: videoOrCreator,

        toggle() {
            this.value = this.value === "creator" ? "video" : "creator";
            localStorage.setItem('videoOrCreator', this.value);
        }
    })

     if(localStorage.getItem('autoMode') && localStorage.getItem('autoMode') !== 'false') window.dismissAll()
});

var gmcSettings = document.createElement('div');
gmcSettings.id = 'J_settings';

gmcSettings.innerHTML = `
    <span>Maximum number of blocks per session:<input type="text" x-data="$store.maximumNumberOfBlocksPerSession" x-model="value" x-init="$watch('value', value => $store.maximumNumberOfBlocksPerSession.valueHasChanged())"></span>
    <button x-data @click="$store.autoMode.toggle()">Automatically refresh the page and process all</button> ---> <span x-data="$store.autoMode" x-text="on"></span>
    <button x-data @click="$store.videoOrCreator.toggle()">Block video or creator</button> ---> <span x-data="$store.videoOrCreator" x-text="value"></span>

`;
document.querySelector('body').appendChild(gmcSettings);