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.

Size

7.8 KB

Version

1.0

Created

Apr 7, 2026

Updated

8 days ago

1// ==UserScript==
2// @name         Merged Auto Click Bypass + Luarmor Delay + Ace Fullscreen Mobile GUI + OneTap Copy
3// @namespace    AutoClickBypassAceGUI
4// @version      1.0
5// @description  Auto click on bypass buttons with Luarmor delay logic, plus full-screen mobile GUI with one-tap copy on Ace sites.
6// @match        *://*/*
7// @run-at       document-start
8// @grant        GM_setClipboard
9// @downloadURL https://update.greasyfork.org/scripts/556272/Merged%20Auto%20Click%20Bypass%20%2B%20Luarmor%20Delay%20%2B%20Ace%20Fullscreen%20Mobile%20GUI%20%2B%20OneTap%20Copy.user.js
10// @updateURL https://update.greasyfork.org/scripts/556272/Merged%20Auto%20Click%20Bypass%20%2B%20Luarmor%20Delay%20%2B%20Ace%20Fullscreen%20Mobile%20GUI%20%2B%20OneTap%20Copy.meta.js
11// ==/UserScript==
12
13(function() {
14    'use strict';
15
16    // --- Code from Auto Click Bypass Buttons + Luarmor Delay ---
17
18    // --- LISTE DES MOTS-CLES ---
19    const keywords = [
20        "bypass now",
21        "bypass",
22        "skip",
23        "skip wait",
24        "skip anyway",
25        "next",
26        "continue",
27        "proceed"
28    ];
29
30    function matchText(text) {
31        if (!text) return false;
32        text = text.toLowerCase().trim();
33        return keywords.some(k => text.includes(k));
34    }
35
36    // Pour savoir si on doit retarder le bouton "Next"
37    let shouldDelayNext = false;
38
39    // Détection du clic sur "Skip anyway" + site Luarmor + historique proche
40    function handleLuarmorSpecialCase(text) {
41        const isLuarmor = location.hostname.includes("luarmor");
42        if (!isLuarmor) return;
43        text = text.toLowerCase();
44        if (text.includes("skip anyway")) {
45            // Vérifie que Luarmor n’est pas à plus de 3 pages derrière
46            if (window.history.length <= 3) {
47                console.log("[Luarmor Delay] Skip anyway détecté → activation du délai Next (7s)");
48                shouldDelayNext = true;
49            } else {
50                console.log("[Luarmor Delay] Historique trop long → pas de délai");
51            }
52        }
53    }
54
55    function delayedClickIfNeeded(el, text) {
56        text = text.toLowerCase();
57        if (shouldDelayNext && text.includes("next")) {
58            shouldDelayNext = false; // Réinitialisation
59            console.log("[Luarmor Delay] Attente de 7 secondes avant Next…");
60            setTimeout(() => {
61                console.log("[Luarmor Delay] Clic NEXT après délai !");
62                el.click();
63            }, 7000);
64            return true; // Ne pas faire un second clic
65        }
66        return false;
67    }
68
69    function processElement(el) {
70        const txt = el.innerText || el.value || "";
71        if (!matchText(txt)) return;
72        // Cas spécial Luarmor / Skip anyway / Next
73        handleLuarmorSpecialCase(txt);
74        if (delayedClickIfNeeded(el, txt)) {
75            return;
76        }
77        // Clic normal
78        console.log("[AutoClickBypass] Click:", txt, el);
79        el.click();
80    }
81
82    function scan(root=document) {
83        const elements = root.querySelectorAll("button, a, div, span, input[type='button'], input[type='submit']");
84        elements.forEach(processElement);
85    }
86
87    // MutationObserver pour éléments dynamiques
88    const observer = new MutationObserver(mutations => {
89        mutations.forEach(m => {
90            m.addedNodes.forEach(node => {
91                if (node.nodeType === 1) {
92                    scan(node);
93                }
94            });
95        });
96    });
97
98    observer.observe(document.documentElement, { childList: true, subtree: true });
99
100    // Premier scan
101    window.addEventListener("load", () => scan());
102
103    // --- Code from Ace Fullscreen Mobile GUI + OneTap Copy (conditional on 'ace' in hostname) ---
104
105    if (location.hostname.includes("ace")) {
106        //--------------------------------------
107        // 📱 GUI PLEIN ÉCRAN MOBILE + STYLE PROPRE
108        //--------------------------------------
109        const gui = document.createElement("div");
110        gui.id = "aceMobileGUI";
111        gui.innerHTML = `
112            <div id="aceContainer">
113                <div class="aceBlock">
114                    <div class="aceTitle">Message</div>
115                    <div id="aceMsg" class="aceBox copyable">(chargement...)</div>
116                </div>
117                <div class="aceBlock">
118                    <div class="aceTitle">Scroll Area (tap = copier)</div>
119                    <div id="aceScroll" class="aceBox copyable">(chargement...)</div>
120                </div>
121                <div class="aceBlock">
122                    <div class="aceTitle">Actions</div>
123                    <div id="aceActions" class="aceBox copyable">(chargement...)</div>
124                </div>
125            </div>
126        `;
127
128        //--------------------------------------
129        // 🎨 STYLE MODERNE SOLIDE (0 transparence)
130        //--------------------------------------
131        const styles = `
132            #aceMobileGUI {
133                position: fixed;
134                top: 0;
135                left: 0;
136                width: 100vw;
137                height: 100vh;
138                background: #1a1a1a;
139                color: #fff;
140                display: flex;
141                flex-direction: column;
142                overflow-y: auto;
143                padding: 15px;
144                font-family: Arial, sans-serif;
145                z-index: 999999999;
146            }
147            #aceContainer {
148                width: 100%;
149            }
150            .aceBlock {
151                margin-bottom: 28px;
152            }
153            .aceTitle {
154                font-size: 20px;
155                font-weight: bold;
156                margin-bottom: 8px;
157                color: #ddd;
158            }
159            .aceBox {
160                width: 100%;
161                background: #000;
162                border: 2px solid #333;
163                border-radius: 10px;
164                padding: 15px;
165                font-size: 17px;
166                line-height: 1.45;
167                min-height: 120px;
168                max-height: 350px;
169                overflow-y: auto;
170            }
171            .aceBox:active {
172                background: #111;
173            }
174        `;
175
176        const styleTag = document.createElement("style");
177        styleTag.innerText = styles;
178        document.head.appendChild(styleTag);
179        document.body.appendChild(gui);
180
181        //--------------------------------------
182        // 🔄 Mise à jour auto du contenu
183        //--------------------------------------
184        function update() {
185            const d1 = document.querySelector("#aceOverlayMessage");
186            const d2 = document.querySelector("#aceScrollArea");
187            const d3 = document.querySelector("#aceOverlayActions");
188            document.getElementById("aceMsg").innerText = d1 ? d1.innerText.trim() : "(introuvable)";
189            document.getElementById("aceScroll").innerText = d2 ? d2.innerText.trim() : "(introuvable)";
190            document.getElementById("aceActions").innerText = d3 ? d3.innerText.trim() : "(introuvable)";
191        }
192
193        setInterval(update, 300);
194
195        //--------------------------------------
196        // 📋 Copie instantanée : 1 tap = texte en clipboard
197        //--------------------------------------
198        function copyText(text) {
199            if (typeof GM_setClipboard !== "undefined") {
200                GM_setClipboard(text);
201            } else {
202                navigator.clipboard.writeText(text).catch(()=>{});
203            }
204        }
205
206        document.addEventListener("click", function(e) {
207            const box = e.target.closest(".copyable");
208            if (!box) return;
209            let content = box.innerText.trim();
210            if (content.length === 0) return;
211            copyText(content);
212            box.style.background = "#222";
213            setTimeout(() => {
214                box.style.background = "#000";
215            }, 120);
216        });
217    }
218
219})();