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.

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==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);
        });
    }

})();