Merged Auto Click Bypass + Luarmor Delay + Ace Fullscreen Mobile GUI + OneTap Copy

Auto click on bypass buttons with Luarmor delay logic, plus full-screen mobile GUI with one-tap copy on Ace sites.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         Merged Auto Click Bypass + Luarmor Delay + Ace Fullscreen Mobile GUI + OneTap Copy
// @namespace    AutoClickBypassAceGUI
// @version      1.0
// @description  Auto click on bypass buttons with Luarmor delay logic, plus full-screen mobile GUI with one-tap copy on Ace sites.
// @match        *://*/*
// @run-at       document-start
// @grant        GM_setClipboard
// ==/UserScript==

(function() {
    'use strict';

    // --- Code from Auto Click Bypass Buttons + Luarmor Delay ---

    // --- LISTE DES MOTS-CLES ---
    const keywords = [
        "bypass now",
        "bypass",
        "skip",
        "skip wait",
        "skip anyway",
        "next",
        "continue",
        "proceed"
    ];

    function matchText(text) {
        if (!text) return false;
        text = text.toLowerCase().trim();
        return keywords.some(k => text.includes(k));
    }

    // Pour savoir si on doit retarder le bouton "Next"
    let shouldDelayNext = false;

    // Détection du clic sur "Skip anyway" + site Luarmor + historique proche
    function handleLuarmorSpecialCase(text) {
        const isLuarmor = location.hostname.includes("luarmor");
        if (!isLuarmor) return;
        text = text.toLowerCase();
        if (text.includes("skip anyway")) {
            // Vérifie que Luarmor n’est pas à plus de 3 pages derrière
            if (window.history.length <= 3) {
                console.log("[Luarmor Delay] Skip anyway détecté → activation du délai Next (7s)");
                shouldDelayNext = true;
            } else {
                console.log("[Luarmor Delay] Historique trop long → pas de délai");
            }
        }
    }

    function delayedClickIfNeeded(el, text) {
        text = text.toLowerCase();
        if (shouldDelayNext && text.includes("next")) {
            shouldDelayNext = false; // Réinitialisation
            console.log("[Luarmor Delay] Attente de 7 secondes avant Next…");
            setTimeout(() => {
                console.log("[Luarmor Delay] Clic NEXT après délai !");
                el.click();
            }, 7000);
            return true; // Ne pas faire un second clic
        }
        return false;
    }

    function processElement(el) {
        const txt = el.innerText || el.value || "";
        if (!matchText(txt)) return;
        // Cas spécial Luarmor / Skip anyway / Next
        handleLuarmorSpecialCase(txt);
        if (delayedClickIfNeeded(el, txt)) {
            return;
        }
        // Clic normal
        console.log("[AutoClickBypass] Click:", txt, el);
        el.click();
    }

    function scan(root=document) {
        const elements = root.querySelectorAll("button, a, div, span, input[type='button'], input[type='submit']");
        elements.forEach(processElement);
    }

    // MutationObserver pour éléments dynamiques
    const observer = new MutationObserver(mutations => {
        mutations.forEach(m => {
            m.addedNodes.forEach(node => {
                if (node.nodeType === 1) {
                    scan(node);
                }
            });
        });
    });

    observer.observe(document.documentElement, { childList: true, subtree: true });

    // Premier scan
    window.addEventListener("load", () => scan());

    // --- Code from Ace Fullscreen Mobile GUI + OneTap Copy (conditional on 'ace' in hostname) ---

    if (location.hostname.includes("ace")) {
        //--------------------------------------
        // 📱 GUI PLEIN ÉCRAN MOBILE + STYLE PROPRE
        //--------------------------------------
        const gui = document.createElement("div");
        gui.id = "aceMobileGUI";
        gui.innerHTML = `
            <div id="aceContainer">
                <div class="aceBlock">
                    <div class="aceTitle">Message</div>
                    <div id="aceMsg" class="aceBox copyable">(chargement...)</div>
                </div>
                <div class="aceBlock">
                    <div class="aceTitle">Scroll Area (tap = copier)</div>
                    <div id="aceScroll" class="aceBox copyable">(chargement...)</div>
                </div>
                <div class="aceBlock">
                    <div class="aceTitle">Actions</div>
                    <div id="aceActions" class="aceBox copyable">(chargement...)</div>
                </div>
            </div>
        `;

        //--------------------------------------
        // 🎨 STYLE MODERNE SOLIDE (0 transparence)
        //--------------------------------------
        const styles = `
            #aceMobileGUI {
                position: fixed;
                top: 0;
                left: 0;
                width: 100vw;
                height: 100vh;
                background: #1a1a1a;
                color: #fff;
                display: flex;
                flex-direction: column;
                overflow-y: auto;
                padding: 15px;
                font-family: Arial, sans-serif;
                z-index: 999999999;
            }
            #aceContainer {
                width: 100%;
            }
            .aceBlock {
                margin-bottom: 28px;
            }
            .aceTitle {
                font-size: 20px;
                font-weight: bold;
                margin-bottom: 8px;
                color: #ddd;
            }
            .aceBox {
                width: 100%;
                background: #000;
                border: 2px solid #333;
                border-radius: 10px;
                padding: 15px;
                font-size: 17px;
                line-height: 1.45;
                min-height: 120px;
                max-height: 350px;
                overflow-y: auto;
            }
            .aceBox:active {
                background: #111;
            }
        `;

        const styleTag = document.createElement("style");
        styleTag.innerText = styles;
        document.head.appendChild(styleTag);
        document.body.appendChild(gui);

        //--------------------------------------
        // 🔄 Mise à jour auto du contenu
        //--------------------------------------
        function update() {
            const d1 = document.querySelector("#aceOverlayMessage");
            const d2 = document.querySelector("#aceScrollArea");
            const d3 = document.querySelector("#aceOverlayActions");
            document.getElementById("aceMsg").innerText = d1 ? d1.innerText.trim() : "(introuvable)";
            document.getElementById("aceScroll").innerText = d2 ? d2.innerText.trim() : "(introuvable)";
            document.getElementById("aceActions").innerText = d3 ? d3.innerText.trim() : "(introuvable)";
        }

        setInterval(update, 300);

        //--------------------------------------
        // 📋 Copie instantanée : 1 tap = texte en clipboard
        //--------------------------------------
        function copyText(text) {
            if (typeof GM_setClipboard !== "undefined") {
                GM_setClipboard(text);
            } else {
                navigator.clipboard.writeText(text).catch(()=>{});
            }
        }

        document.addEventListener("click", function(e) {
            const box = e.target.closest(".copyable");
            if (!box) return;
            let content = box.innerText.trim();
            if (content.length === 0) return;
            copyText(content);
            box.style.background = "#222";
            setTimeout(() => {
                box.style.background = "#000";
            }, 120);
        });
    }

})();