diff --git a/GreaterGood CTG AutoClicker.js b/GreaterGood CTG AutoClicker.js index 1df361c202926127a6222558967368394a15b172..2dc04ec7629e25bb97c0d30bda5c325dfea79ea5 100644 --- a/GreaterGood CTG AutoClicker.js +++ b/GreaterGood CTG AutoClicker.js @@ -5,7 +5,7 @@ // @description Automatically clicks through all the buttons on all subsites of the GreaterGood ClickToGive program every two hours. // @description:de Klickt sich automatisch alle zwei Std. durch alle Buttons auf allen Seiten des GreaterGood-ClickToGive-Programms. -// @version 3.0.0 +// @version 3.1.0 // @copyright 2023+, Jan G. (Rsge) // @license Mozilla Public License 2.0 // @icon https://http-aws.greatergood.com/img/ggc/favicon-96x96.png @@ -13,6 +13,8 @@ // @namespace https://github.com/Rsge // @homepageURL https://github.com/Rsge/GreaterGood-CTG-AutoClicker // @supportURL https://github.com/Rsge/GreaterGood-CTG-AutoClicker/issues +// @downloadURL https://update.greasyfork.org/scripts/433055/GreaterGood%20CTG%20AutoClicker.user.js +// @updateURL https://update.greasyfork.org/scripts/433055/GreaterGood%20CTG%20AutoClicker.meta.js // @match https://greatergood.com/* // @match https://theanimalrescuesite.com/* @@ -25,56 +27,68 @@ 'use strict'; // Max amount of seconds to wait before clicking button - const MAX_RANDOM_TO_CLICK_SECONDS = 4; + const MAX_RANDOM_TO_CLICK_SECONDS = 3; // Amount of seconds to wait for site to load after click - const WAIT_SECONDS = 3 + const WAIT_SECONDS = 2 + // Max amount of tries to wait for buttons to load before giving up + const MAX_TRIES = 5 // Minutes between possible click-throughs const INTERVAL_MINUTES = 120; + // Warning for buttons not found + const BUTTONS_NOT_FOUND_WARNING = "Buttons could not be found after " + (MAX_TRIES * WAIT_SECONDS) + " s."; - // Basic function + // Basic functions function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } + function sToMs(s) { + return s * 1000; + } // Vars let i; - let progButtonsLeft = true; + let progButtonsLeft; do { - // On button site, click button. + // When a CTG-button is present, click it. let ctgButton = document.getElementById("ctg-click-box-button"); if (ctgButton !== null) { - let millisecondsToClick = (Math.floor(Math.random() * MAX_RANDOM_TO_CLICK_SECONDS) + 1) * 1000; + let millisecondsToClick = sToMs(WAIT_SECONDS + Math.floor(Math.random() * MAX_RANDOM_TO_CLICK_SECONDS)); await sleep(millisecondsToClick); ctgButton.click(); } + // Wait for alternate sites' buttons to load. + i = 0; let progButtons = []; - // Wait for buttons to load. do { - await sleep(WAIT_SECONDS * 1000) - progButtonsLeft = true; - // On thanks site, choose new site if not all are already clicked. + await sleep(sToMs(WAIT_SECONDS)) progButtons = document.getElementsByClassName("ctg-click-grid-button"); - let foundButton = false; - for (i = 0; i < progButtons.length; i++) { - let progButtonClass = progButtons[i].className; - //console.log(progButtonClass); - let progButtonValue = progButtons[i].attributes[0].value; - //console.log(progButtonValue); - if (!progButtonClass.includes("click-attempted") // Button clicked already - && !progButtonValue.startsWith("http")) { // Is external site - progButtons[i].click(); - foundButton = true; - break; - } + i += 1 + if (i > MAX_TRIES) { + console.warn(BUTTONS_NOT_FOUND_WARNING); + return; } - if (foundButton) { + } while (progButtons.length == 0); + // Choose next site if not all are already clicked. + progButtonsLeft = true; + let foundButton = false; + for (i = 0; i < progButtons.length; i++) { + let progButtonClass = progButtons[i].className; + //console.log(progButtonClass); + let progButtonValue = progButtons[i].attributes[0].value; + //console.log(progButtonValue); + if (!progButtonClass.includes("click-attempted") // Button clicked already + && !progButtonValue.startsWith("http")) { // Is external site + foundButton = true; + progButtons[i].click(); break; } + } + if (!foundButton) { progButtonsLeft = false; - } while (progButtons.length == 0) - } while (progButtonsLeft) + } + } while (progButtonsLeft); // Wait for specified time, then reload page to click through again. - let intervalMilliseconds = (INTERVAL_MINUTES + 1) * 60 * 1000; + let intervalMilliseconds = sToMs((INTERVAL_MINUTES + 1) * 60); setTimeout(function(){location.reload(true);}, intervalMilliseconds); })();