From d0c68afc4c84e2bc3aa36df6bceedb2c6ee160dd Mon Sep 17 00:00:00 2001 From: crappyrules Date: Wed, 27 Aug 2025 02:37:29 +0000 Subject: [PATCH] Add 'airraep.js' --- airraep.js | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 airraep.js diff --git a/airraep.js b/airraep.js new file mode 100644 index 0000000..ec1bf7a --- /dev/null +++ b/airraep.js @@ -0,0 +1,75 @@ +/** + * Clicks a button at a controlled rate over a specific duration, with randomized timing + * to better avoid rate-limiting and detection. + * + * @param {string} selector - The CSS selector for the button to click. + * @param {number} clicksPerSecond - The target average number of clicks per second. + * @param {number} durationSeconds - The total duration in seconds to run the clicker. + * @param {number} timingRandomnessPercent - The percentage of randomness to apply to the timing. + */ +async function controlledRateClicker(selector, clicksPerSecond, durationSeconds, timingRandomnessPercent) { + const buttonToClick = document.querySelector(selector); + + if (!buttonToClick) { + console.error(`Error: Button not found with selector "${selector}".`); + return; + } + + const startTime = Date.now(); + const endTime = startTime + durationSeconds * 1000; + const baseIntervalMs = 1000 / clicksPerSecond; + let clickCount = 0; + let successfulClicks = 0; + + console.log(`--- 🐢 Starting Controlled-Rate Clicker ---`); + console.log(` - Target Rate: ${clicksPerSecond} clicks/sec`); + console.log(` - Duration: ${durationSeconds / 60} minutes`); + console.log(` - Base Interval: ${baseIntervalMs.toFixed(2)}ms`); + console.log(` - Timing Randomness: ±${timingRandomnessPercent}%`); + + // A recursive function is more robust than setInterval for managing random delays. + const clickLoop = async () => { + // Stop if the duration has passed or the button is gone/disabled. + const currentButton = document.querySelector(selector); + if (Date.now() >= endTime || !currentButton || currentButton.disabled) { + const totalTime = (Date.now() - startTime) / 1000; + console.log(`\n--- 🏁 Clicker Finished ---`); + console.log(` - Total Clicks Attempted: ${clickCount}`); + console.log(` - Successful Clicks: ${successfulClicks}`); + console.log(` - Duration: ${totalTime.toFixed(2)} seconds`); + alert(`Controlled-Rate Clicker Finished!\nSuccessful clicks: ${successfulClicks}`); + return; + } + + // Perform the click + currentButton.click(); + clickCount++; + successfulClicks++; // Assuming success for this example + console.log(`Click #${clickCount}`); + + // Calculate the next delay with random jitter + const jitter = (Math.random() - 0.5) * 2 * baseIntervalMs * (timingRandomnessPercent / 100); + const nextDelay = Math.max(50, baseIntervalMs + jitter); // Ensure a minimum delay of 50ms + + // Schedule the next click + setTimeout(clickLoop, nextDelay); + }; + + // Start the first click + clickLoop(); +} + +// --- Configuration --- +const buttonSelector = 'button.n1vthr6p.n155pca5'; + +// Target an average of 10 clicks per second. +const clicksPerSecond = 4; + +// Run for 5 minutes (300 seconds) as requested. +const durationInSeconds = 300; + +// Add 25% randomness to the timing between clicks to seem more human. +const timingRandomness = 25; + +// --- Run the Clicker --- +controlledRateClicker(buttonSelector, clicksPerSecond, durationInSeconds, timingRandomness); \ No newline at end of file