Block all Twitch ads and automatically claim bonus points
当前为
// ==UserScript==
// @name Enhanced Twitch Ad Blocker with Auto Claim Bonus
// @namespace https://github.com/Brembo19
// @version 1.1
// @description Block all Twitch ads and automatically claim bonus points
// @author Brembo19
// @match *://*.twitch.tv/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
const blockAdsInVideo = () => {
const video = document.querySelector('video');
if (video && video.src.includes('ad_')) {
video.src = '';
}
};
const removeAdBanners = () => {
const adSelectors = [
'[aria-label="Advertisement"]',
'.ad-banner',
'.ad-slot',
'.tw-ad-container',
'[data-ad="true"]'
];
adSelectors.forEach(selector => {
document.querySelectorAll(selector).forEach(ad => ad.remove());
});
};
const observeDynamicContent = () => {
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
if (mutation.type === 'childList') {
removeAdBanners();
}
});
});
observer.observe(document.body, { childList: true, subtree: true });
};
const autoClaimBonus = () => {
let MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
let claiming = false;
if (MutationObserver) console.log('Auto claimer is enabled.');
let observer = new MutationObserver(e => {
let bonus = document.querySelector('.claimable-bonus__icon');
if (bonus && !claiming) {
bonus.click();
let date = new Date();
claiming = true;
setTimeout(() => {
console.log('Claimed at ' + date);
claiming = false;
}, Math.random() * 1000 + 2000);
}
});
observer.observe(document.body, { childList: true, subtree: true });
};
blockAdsInVideo();
removeAdBanners();
observeDynamicContent();
autoClaimBonus();
setInterval(blockAdsInVideo, 1000);
setInterval(removeAdBanners, 2000);
})();