DropGalaxy Auto Skip

Auto skip ads and auto download on DropGalaxy

// ==UserScript==
// @name         DropGalaxy Auto Skip
// @namespace    http://tampermonkey.net/
// @version      1.4.1
// @description  Auto skip ads and auto download on DropGalaxy
// @author       kleptomaniac14
// @match        https://dropgalaxy.com/*
// @match        https://dropgalaxy.co/*
// @match        https://financemonk.net/*
// @icon         https://www.google.com/s2/favicons?domain=dropgalaxy.com
// @grant        none
// @license      GNU GPLv2
// ==/UserScript==

// Setting esversion to 11 to use optional chaining.
/* jshint esversion: 11 */

(function () {
    "use strict";

    // Constants
    const MAX_IDENTIFICATION_RETRIES = 100;
    const CAPTCHA_CONTAINER_ID = "cfcaptcha";
    const ENABLE_EXPT_CODE = false;

    // Global Variables
    let identificationRetries = 0;

    // Utils
    const log = (message) => console.log(`[DropGalaxy Auto Skip] ${message}`);

    // This code is used by the site to trigger the CAPTCHA
    const siteCaptchaCode = () => {
        turnstile.ready(function () {
            turnstile.render(`#${CAPTCHA_CONTAINER_ID}`, {
                sitekey: '0x4AAAAAAAYwfzxMEjmxM8RT',
                callback: function (token) {
                    $('#tokennstatus').html('<small>being verified pls wait..</small>');
                    bangbang(token);
                    console.log(`Challenge Success ${token}`);
                },
            });
        });
    }

    // One Time Setup
    log("DropGalaxy Script Loaded");

    // Page Handlers
    const handlePage1 = () => {
        log("Handling Page 1");

        // Click on Download Button
        const downloadBtn = document.getElementById("method_free");
        downloadBtn.click();
    };

    const handlePage3 = () => {
        log("Handling Page 3");

        // Click on Download Button
        const downloadForm = document.getElementById("dllink");
        const url = downloadForm.action;
        
        // Add element to show the DDL
        const ddlElement = document.createElement("a");
        ddlElement.href = url;
        ddlElement.innerText = "Direct Download Link";
        ddlElement.className = "btn btn-block btn-lg btn-primary";
        ddlElement.style = "background: #22a76d; color: white; margin-bottom: 20px; padding-inline: 0; border: none;";
        
        const loader = document.getElementById("load");
        loader.parentElement.insertBefore(ddlElement, loader)

        // Auto download by opening the link
        window.location.assign(url);
    };

    const handlePage2 = () => {
        log("Handling Page 2");

        const falseDownloadBtn = document.getElementById("downloadbtn");
        const tokenStatus = document.getElementById("tokennstatus");
        const countdown = document.getElementById("countdown");

        // Keep clicking until enabled
        const downloadIntervalId = setInterval(() => {
            if (tokenStatus.innerText === "click on- verify you are human..." &&
                countdown.style.display === 'none') {
                // In case CAPTCHA was not triggered by site, trigger it 
                // manually.
                // This is required when site does not trigger the CAPTCHA if
                // it is triggered too many times or a download is going on.
                if (ENABLE_EXPT_CODE) {
                    siteCaptchaCode();
                }
            } else if (
                // If download button is enabled and CAPTCHA is solved, submit the form
                tokenStatus.innerText === "ready! click on create download link" &&
                falseDownloadBtn.disabled === false
            ) {
                log("Download Button Enabled, submitting form");
                // downloadBtn.click();
                document.getElementById("ff1").submit();
                clearInterval(downloadIntervalId);
            }
        }, 500);
    };

    const handlePage = (pageWatcherIntervalId) => {
        const page1Identifier = document.getElementById("method_free");
        const page2Identifier = document.getElementById("countdown");
        const page3Identifier = document.getElementById("dllink");

        const adblockPageIdentifier = document.querySelector(
            "body > div.container.pt-5.page.message > div > div > div"
        );
        const isAdblockPage =
            adblockPageIdentifier?.innerText === "\nAdblock Detected!";

        // If page is recognized, clear the interval to stop checking
        if (
            pageWatcherIntervalId &&
            (page1Identifier ||
                page2Identifier ||
                page3Identifier ||
                isAdblockPage)
        ) {
            log("Page Identified, stopping page watcher");
            clearInterval(pageWatcherIntervalId);
            // identificationRetries = 0;
            // no need to reset retries, as it will be reset on next page load
        }

        if (page1Identifier) {
            handlePage1();
        } else if (page2Identifier) {
            handlePage2();
        } else if (page3Identifier) {
            handlePage3();
        } else if (isAdblockPage) {
            // handleAdblockPage();
            // Not implemented
        } else if (MAX_IDENTIFICATION_RETRIES > identificationRetries) {
            log("Unknown Page or Waiting for identification");
            identificationRetries++;
        } else {
            log("Max Identification Retries Reached, Stopping Page Watcher");
            clearInterval(pageWatcherIntervalId);
        }
    };

    // Keep checking the page as soon as it loads
    let intervalId = setInterval(() => {
        handlePage(intervalId);
    }, 500);
})();