Advertisement
GroggyOtter

Remove AdBlock Thing v5.3 Script Source

Jun 3rd, 2024
4,734
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         Remove Adblock Thing
  3. // @namespace    http://tampermonkey.net/
  4. // @version      5.3
  5. // @description  Removes Adblock Thing
  6. // @author       JoelMatic
  7. // @match        https://www.youtube.com/*
  8. // @icon         https://www.google.com/s2/favicons?sz=64&domain=youtube.com
  9. // @updateURL    https://github.com/TheRealJoelmatic/RemoveAdblockThing/raw/main/Youtube-Ad-blocker-Reminder-Remover.user.js
  10. // @downloadURL  https://github.com/TheRealJoelmatic/RemoveAdblockThing/raw/main/Youtube-Ad-blocker-Reminder-Remover.user.js
  11. // @grant        none
  12. // ==/UserScript==
  13.  
  14. (function()
  15.  {
  16.     //
  17.     //      Config
  18.     //
  19.  
  20.     // Enable The Undetected Adblocker
  21.     const adblocker = true;
  22.  
  23.     // Enable The Popup remover (pointless if you have the Undetected Adblocker)
  24.     const removePopup = false;
  25.  
  26.     // Checks for updates (Removes the popup)
  27.     const updateCheck = true;
  28.  
  29.     // Enable debug messages into the console
  30.     const debugMessages = true;
  31.  
  32.     // Enable custom modal
  33.     // Uses SweetAlert2 library (https://cdn.jsdelivr.net/npm/sweetalert2@11) for the update version modal.
  34.     // When set to false, the default window popup will be used. And the library will not be loaded.
  35.     const updateModal = {
  36.         enable: true, // if true, replaces default window popup with a custom modal
  37.         timer: 5000, // timer: number | false
  38.     };
  39.  
  40.  
  41.     //
  42.     //      CODE
  43.     //
  44.     // If you have any suggestions, bug reports,
  45.     // or want to contribute to this userscript,
  46.     // feel free to create issues or pull requests in the GitHub repository.
  47.     //
  48.     // GITHUB: https://github.com/TheRealJoelmatic/RemoveAdblockThing
  49.  
  50.     //
  51.     // Varables used for adblock
  52.     //
  53.  
  54.     // Store the initial URL
  55.     let currentUrl = window.location.href;
  56.  
  57.     // Used for if there is ad found
  58.     let isAdFound = false;
  59.  
  60.     //used to see how meny times we have loopped with a ad active
  61.     let adLoop = 0;
  62.  
  63.     //
  64.     // Button click
  65.     //
  66.  
  67.     const event = new PointerEvent('click', {
  68.         pointerId: 1,
  69.         bubbles: true,
  70.         cancelable: true,
  71.         view: window,
  72.         detail: 1,
  73.         screenX: 0,
  74.         screenY: 0,
  75.         clientX: 0,
  76.         clientY: 0,
  77.         ctrlKey: false,
  78.         altKey: false,
  79.         shiftKey: false,
  80.         metaKey: false,
  81.         button: 0,
  82.         buttons: 1,
  83.         width: 1,
  84.         height: 1,
  85.         pressure: 0.5,
  86.         tiltX: 0,
  87.         tiltY: 0,
  88.         pointerType: 'mouse',
  89.         isPrimary: true
  90.     });
  91.  
  92.     //
  93.     // Variables used for updater
  94.     //
  95.  
  96.     let hasIgnoredUpdate = false;
  97.  
  98.     //
  99.     // Setup
  100.     //
  101.  
  102.     //Set everything up here
  103.     log("Script started");
  104.  
  105.     if (adblocker) removeAds();
  106.     if (removePopup) popupRemover();
  107.     if (updateCheck) checkForUpdate();
  108.  
  109.     // Remove Them pesski popups
  110.     function popupRemover() {
  111.  
  112.         setInterval(() => {
  113.             const modalOverlay = document.querySelector("tp-yt-iron-overlay-backdrop");
  114.             const popup = document.querySelector(".style-scope ytd-enforcement-message-view-model");
  115.             const popupButton = document.getElementById("dismiss-button");
  116.  
  117.             var video = document.querySelector('video');
  118.  
  119.             const bodyStyle = document.body.style;
  120.             bodyStyle.setProperty('overflow-y', 'auto', 'important');
  121.  
  122.             if (modalOverlay) {
  123.                 modalOverlay.removeAttribute("opened");
  124.                 modalOverlay.remove();
  125.             }
  126.  
  127.             if (popup) {
  128.                 log("Popup detected, removing...");
  129.  
  130.                 if(popupButton) popupButton.click();
  131.  
  132.                 popup.remove();
  133.                 video.play();
  134.  
  135.                 setTimeout(() => {
  136.                     video.play();
  137.                 }, 500);
  138.  
  139.                 log("Popup removed");
  140.             }
  141.             // Check if the video is paused after removing the popup
  142.             if (!video.paused) return;
  143.             // UnPause The Video
  144.             video.play();
  145.  
  146.         }, 1000);
  147.     }
  148.     // undetected adblocker method
  149.     function removeAds()
  150.     {
  151.  
  152.         log("removeAds()");
  153.  
  154.         var videoPlayback = 1;
  155.  
  156.         setInterval(() =>{
  157.  
  158.             var video = document.querySelector('video');
  159.             const ad = [...document.querySelectorAll('.ad-showing')][0];
  160.  
  161.  
  162.             //remove page ads
  163.             if (window.location.href !== currentUrl) {
  164.                 currentUrl = window.location.href;
  165.                 removePageAds();
  166.             }
  167.  
  168.             if (ad)
  169.             {
  170.                 isAdFound = true;
  171.                 adLoop = adLoop + 1;
  172.  
  173.                 log("adLoop: " + adLoop);
  174.  
  175.                 // If we tried 15 times we can assume it won't work this time (This stops the weird pause/freeze on the ads)
  176.  
  177.  
  178.                 if(adLoop >= 5){
  179.                     //set the add to half to press the skip button
  180.                     if (video.currentTime != undefined || video.currentTime > 0.10){
  181.                         if(video.currentTime < (video.duration / 2)){
  182.                             let randomNumber = Math.floor(Math.random() * 2) + 1;
  183.                             //video.currentTime = (video.duration / 2) + randomNumber || 0;
  184.                             video.playbackRate = 10 - randomNumber;
  185.                         }
  186.                     }
  187.                 }
  188.  
  189.                 //
  190.                 // ad center method
  191.                 //
  192.  
  193.                 if(adLoop <= 5){
  194.                     if (video) video.pause();
  195.  
  196.                     const openAdCenterButton = document.querySelector('.ytp-ad-button-icon');
  197.                     openAdCenterButton?.dispatchEvent(event);
  198.  
  199.                     const blockAdButton = document.querySelector('[label="Block ad"]');
  200.                     blockAdButton?.dispatchEvent(event);
  201.  
  202.                     const blockAdButtonConfirm = document.querySelector('.Eddif [label="CONTINUE"] button');
  203.                     blockAdButtonConfirm?.dispatchEvent(event);
  204.  
  205.                     const closeAdCenterButton = document.querySelector('.zBmRhe-Bz112c');
  206.                     closeAdCenterButton?.dispatchEvent(event);
  207.  
  208.                     if (video) video.play();
  209.                 }
  210.  
  211.  
  212.                 var popupContainer = document.querySelector('body > ytd-app > ytd-popup-container > tp-yt-paper-dialog');
  213.                 if (popupContainer){
  214.                     // popupContainer persists, lets not spam
  215.                     if (popupContainer.style.display == "")
  216.                         popupContainer.style.display = 'none';
  217.                 }
  218.  
  219.                 //
  220.                 // Speed Skip Method
  221.                 //
  222.                 log("Found Ad");
  223.  
  224.  
  225.                 //This is beacuse youtube keeps changing the class of the skip button for what ever reason
  226.                 let skipButtons = [
  227.                 'ytp-ad-skip-button-container',
  228.                 'ytp-ad-skip-button-modern',
  229.                 '.videoAdUiSkipButton',
  230.                 '.ytp-ad-skip-button',
  231.                 '.ytp-ad-skip-button-modern',
  232.                 '.ytp-ad-skip-button',
  233.                 '.ytp-ad-skip-button-slot',
  234.                 'ytp-skip-ad-button',
  235.                 'skip-button'
  236.                 ];
  237.                 const elementsWithSkipButton = document.querySelectorAll('[class*="skip-button"]');
  238.  
  239.                 const classesFromElements = Array.from(elementsWithSkipButton).map(element => element.className.split(' ')).flat();
  240.                 const uniqueClassesFromElements = [...new Set(classesFromElements)];
  241.                
  242.                 skipButtons = [...new Set([...skipButtons, ...uniqueClassesFromElements])];
  243.  
  244.                 if (video){
  245.  
  246.                     //Seems to beh patched and gets dectected
  247.                     //video.playbackRate = 10;
  248.                     video.volume = 0;
  249.  
  250.                     // Iterate through the array of selectors
  251.                     skipButtons.forEach(selector => {
  252.                         // Select all elements matching the current selector
  253.                         const elements = document.querySelectorAll(selector);
  254.  
  255.                         // Check if any elements were found
  256.                         if (elements && elements.length > 0) {
  257.                           // Iterate through the selected elements and click
  258.                           elements.forEach(element => {
  259.                             element?.dispatchEvent(event);
  260.                           });
  261.                         }
  262.                     });
  263.                     video.play();
  264.  
  265.                     //Seems to beh patched and gets dectected
  266.                 }
  267.  
  268.                 log("skipped Ad (✔️)");
  269.  
  270.             } else {
  271.  
  272.                 //check for unreasonale playback speed
  273.                 if(video && video?.playbackRate == 10){
  274.                     video.playbackRate = videoPlayback;
  275.                 }
  276.  
  277.                 if (isAdFound){
  278.                     isAdFound = false;
  279.  
  280.                     // this is right after the ad is skipped
  281.                     // fixes if you set the speed to 2x and an ad plays, it sets it back to the default 1x
  282.  
  283.  
  284.                     //somthing bugged out default to 1x then
  285.                     if (videoPlayback == 10) videoPlayback = 1;
  286.                     if(video && isFinite(videoPlayback)) video.playbackRate = videoPlayback;
  287.  
  288.                     //set ad loop back to the defualt
  289.                     adLoop = 0;
  290.                 }
  291.                 else{
  292.                     if(video) videoPlayback = video.playbackRate;
  293.                 }
  294.             }
  295.  
  296.         }, 50)
  297.  
  298.         removePageAds();
  299.     }
  300.  
  301.     //removes ads on the page (not video player ads)
  302.     function removePageAds(){
  303.  
  304.         const sponsor = document.querySelectorAll("div#player-ads.style-scope.ytd-watch-flexy, div#panels.style-scope.ytd-watch-flexy");
  305.         const style = document.createElement('style');
  306.  
  307.         style.textContent = `
  308.             ytd-action-companion-ad-renderer,
  309.             ytd-display-ad-renderer,
  310.             ytd-video-masthead-ad-advertiser-info-renderer,
  311.             ytd-video-masthead-ad-primary-video-renderer,
  312.             ytd-in-feed-ad-layout-renderer,
  313.             ytd-ad-slot-renderer,
  314.             yt-about-this-ad-renderer,
  315.             yt-mealbar-promo-renderer,
  316.             ytd-statement-banner-renderer,
  317.             ytd-ad-slot-renderer,
  318.             ytd-in-feed-ad-layout-renderer,
  319.             ytd-banner-promo-renderer-background
  320.             statement-banner-style-type-compact,
  321.             .ytd-video-masthead-ad-v3-renderer,
  322.             div#root.style-scope.ytd-display-ad-renderer.yt-simple-endpoint,
  323.             div#sparkles-container.style-scope.ytd-promoted-sparkles-web-renderer,
  324.             div#main-container.style-scope.ytd-promoted-video-renderer,
  325.             div#player-ads.style-scope.ytd-watch-flexy,
  326.             ad-slot-renderer,
  327.             ytm-promoted-sparkles-web-renderer,
  328.             masthead-ad,
  329.             tp-yt-iron-overlay-backdrop,
  330.  
  331.             #masthead-ad {
  332.                 display: none !important;
  333.             }
  334.         `;
  335.  
  336.         document.head.appendChild(style);
  337.  
  338.         sponsor?.forEach((element) => {
  339.              if (element.getAttribute("id") === "rendering-content") {
  340.                 element.childNodes?.forEach((childElement) => {
  341.                   if (childElement?.data.targetId && childElement?.data.targetId !=="engagement-panel-macro-markers-description-chapters"){
  342.                       //Skipping the Chapters section
  343.                         element.style.display = 'none';
  344.                     }
  345.                    });
  346.             }
  347.          });
  348.  
  349.         log("Removed page ads (✔️)");
  350.     }
  351.  
  352.     //
  353.     // Update check
  354.     //
  355.  
  356.     function checkForUpdate(){
  357.  
  358.         if (window.top !== window.self && !(window.location.href.includes("youtube.com"))){
  359.             return;
  360.         }
  361.  
  362.         if (hasIgnoredUpdate){
  363.             return;
  364.         }
  365.  
  366.         const scriptUrl = 'https://raw.githubusercontent.com/TheRealJoelmatic/RemoveAdblockThing/main/Youtube-Ad-blocker-Reminder-Remover.user.js';
  367.  
  368.         fetch(scriptUrl)
  369.         .then(response => response.text())
  370.         .then(data => {
  371.             // Extract version from the script on GitHub
  372.             const match = data.match(/@version\s+(\d+\.\d+)/);
  373.             if (!match) {
  374.                 log("Unable to extract version from the GitHub script.", "e")
  375.                 return;
  376.             }
  377.  
  378.             const githubVersion = parseFloat(match[1]);
  379.             const currentVersion = parseFloat(GM_info.script.version);
  380.  
  381.             if (githubVersion <= currentVersion) {
  382.                 log('You have the latest version of the script. ' + githubVersion + " : " + currentVersion);
  383.                 return;
  384.             }
  385.  
  386.             console.log('Remove Adblock Thing: A new version is available. Please update your script. ' + githubVersion + " : " + currentVersion);
  387.  
  388.             if(updateModal.enable){
  389.                 // if a version is skipped, don't show the update message again until the next version
  390.                 if (parseFloat(localStorage.getItem('skipRemoveAdblockThingVersion')) === githubVersion) {
  391.                     return;
  392.                 }
  393.                 // If enabled, include the SweetAlert2 library
  394.                 const script = document.createElement('script');
  395.                 script.src = 'https://cdn.jsdelivr.net/npm/sweetalert2@11';
  396.                 document.head.appendChild(script);
  397.  
  398.                 const style = document.createElement('style');
  399.                 style.textContent = '.swal2-container { z-index: 2400; }';
  400.                 document.head.appendChild(style);
  401.  
  402.                 // Wait for SweetAlert to be fully loaded
  403.                 script.onload = function () {
  404.  
  405.                     Swal.fire({
  406.                         position: "top-end",
  407.                         backdrop: false,
  408.                         title: 'Remove Adblock Thing: New version is available.',
  409.                         text: 'Do you want to update?',
  410.                         showCancelButton: true,
  411.                         showDenyButton: true,
  412.                         confirmButtonText: 'Update',
  413.                         denyButtonText:'Skip',
  414.                         cancelButtonText: 'Close',
  415.                         timer: updateModal.timer ?? 5000,
  416.                         timerProgressBar: true,
  417.                         didOpen: (modal) => {
  418.                             modal.onmouseenter = Swal.stopTimer;
  419.                             modal.onmouseleave = Swal.resumeTimer;
  420.                         }
  421.                     }).then((result) => {
  422.                         if (result.isConfirmed) {
  423.                             window.location.replace(scriptUrl);
  424.                         } else if(result.isDenied) {
  425.                             localStorage.setItem('skipRemoveAdblockThingVersion', githubVersion);
  426.                         }
  427.                     });
  428.                 };
  429.  
  430.                 script.onerror = function () {
  431.                     var result = window.confirm("Remove Adblock Thing: A new version is available. Please update your script.");
  432.                     if (result) {
  433.                         window.location.replace(scriptUrl);
  434.                     }
  435.                 }
  436.             } else {
  437.                 var result = window.confirm("Remove Adblock Thing: A new version is available. Please update your script.");
  438.  
  439.                 if (result) {
  440.                     window.location.replace(scriptUrl);
  441.                 }
  442.             }
  443.         })
  444.         .catch(error => {
  445.             hasIgnoredUpdate = true;
  446.             log("Error checking for updates:", "e", error)
  447.         });
  448.         hasIgnoredUpdate = true;
  449.     }
  450.  
  451.     // Used for debug messages
  452.     function log(log, level = 'l', ...args) {
  453.         if (!debugMessages) return;
  454.  
  455.         const prefix = 'Remove Adblock Thing:'
  456.         const message = `${prefix} ${log}`;
  457.         switch (level) {
  458.             case 'e':
  459.             case 'err':
  460.             case 'error':
  461.                 console.error(message, ...args);
  462.                 break;
  463.             case 'l':
  464.             case 'log':
  465.                 console.log(message, ...args);
  466.                 break;
  467.             case 'w':
  468.             case 'warn':
  469.             case 'warning':
  470.                 console.warn(message, ...args);
  471.                 break;
  472.             case 'i':
  473.             case 'info':
  474.             default:
  475.         console.info(message, ...args);
  476.         break
  477.     }
  478.     }
  479.  
  480. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement