Twitch Turbo + Updated

Block all Twitch ads, auto-claim bonus points, auto-join raids, add clip download link, and promote Discord server

// ==UserScript==
// @name         Twitch Turbo + Updated
// @namespace    https://github.com/Brembo19
// @version      1.6.0
// @description  Block all Twitch ads, auto-claim bonus points, auto-join raids, add clip download link, and promote Discord server
// @author       Brembo19
// @match        *://*.twitch.tv/*
// @grant        none
// ==/UserScript==

(async () => {
    'use strict';

    const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

    const blockAdsInVideo = () => {
        const videoElements = document.querySelectorAll('video');
        videoElements.forEach(video => {
            if (video.src.includes('ad_')) {
                video.src = '';
                console.info('Ad blocked in video stream');
            }
        });
    };

    const removeAdBanners = () => {
        const adSelectors = [
            '[aria-label="Advertisement"]',
            '.ad-banner',
            '.ad-slot',
            '.tw-ad-container',
            '[data-a-target="video-ad-banner"]',
            '[data-ad="true"]',
            'div[class*="ad-"]',
            'div[class*="sponsored"]',
            'iframe[src*="doubleclick"]'
        ];

        adSelectors.forEach(selector =>
            document.querySelectorAll(selector).forEach(ad => ad.remove())
        );
    };

    const observeDynamicContent = () => {
        const observer = new MutationObserver(() => removeAdBanners());
        observer.observe(document.body, { childList: true, subtree: true });
    };

    const autoClaimBonus = () => {
        const bonusObserver = new MutationObserver(() => {
            const bonus = document.querySelector('.community-points-summary .claimable-bonus__icon');
            if (bonus) {
                bonus.click();
                console.info('Bonus claimed');
            }
        });
        bonusObserver.observe(document.body, { childList: true, subtree: true });
    };

    const autoJoinRaid = () => {
        const raidObserver = new MutationObserver(() => {
            const raidButton = document.querySelector('button[data-test-selector="raid-banner__join-button"]');
            if (raidButton) {
                raidButton.click();
                console.info('Automatically joined the raid');
            }
        });
        raidObserver.observe(document.body, { childList: true, subtree: true });
    };

    const addClipDownloadLink = async () => {
        let attempts = 0;
        const tryAddingLink = async () => {
            const video = document.querySelector('.video-player__container video');
            if (video && video.src) {
                const downloadDiv = document.createElement('div');
                downloadDiv.innerHTML = `<a href="${video.src}" download>Download Clip</a>`;
                const fullButton = document.querySelector('[data-test-selector="clips-watch-full-button"]');
                if (fullButton && !document.querySelector('.clip-download-link')) {
                    downloadDiv.classList.add('clip-download-link');
                    fullButton.insertAdjacentElement("afterend", downloadDiv);
                    console.info('Clip download link added');
                }
            } else if (attempts < 5) {
                attempts++;
                await delay(1000);
                tryAddingLink();
            }
        };
        await tryAddingLink();
    };

    window.addEventListener('load', () => {
        blockAdsInVideo();
        removeAdBanners();
        observeDynamicContent();
        autoClaimBonus();
        autoJoinRaid();
        addClipDownloadLink();
    });

    setInterval(blockAdsInVideo, 1000);
    setInterval(removeAdBanners, 2000);

    console.info('Join our Discord: https://discord.gg/Cwm8fwknKC');

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址