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})();