Bitfaucet.net/ Auto Everything

Auto login, auto emoji captcha, auto claim reward

Size

9.9 KB

Version

0.3

Created

Oct 24, 2025

Updated

about 1 month ago

1// ==UserScript==
2// @name                 Bitfaucet.net/ Auto Everything
3// @namespace            khusus untuk bitfaucet.net.io
4// @version              0.3
5// @description          Auto login, auto emoji captcha, auto claim reward
6// @author               Ojo Ngono
7// @match                https://bitfaucet.net/*
8// @grant                GM_getValue
9// @grant                GM_setValue
10// @grant                GM_addStyle
11// @grant                GM_registerMenuCommand
12// @require              https://cdn.jsdelivr.net/npm/sweetalert2@11
13// @require              https://update.greasyfork.org/scripts/439099/1203718/MonkeyConfig%20Modern%20Reloaded.js
14// @license              Copyright OjoNgono
15// @antifeature          referral-link Directs to a referral link when not logged in
16// @icon                 https://i.ibb.co/XJSPdz0/large.png
17// @downloadURL https://update.greasyfork.org/scripts/545918/Bitfaucetnet%20Auto%20Everything.user.js
18// @updateURL https://update.greasyfork.org/scripts/545918/Bitfaucetnet%20Auto%20Everything.meta.js
19// ==/UserScript==
20
21const cfg = new MonkeyConfig({
22  title: 'Pengaturan SatoshiFaucet',
23  menuCommand: '⚙️ Buka Pengaturan',
24  params: {
25    Email: { label: "Email FaucetPay", type: "text", default: "" },
26    cryptoChoice: {
27      label: "Pilih Crypto",
28      type: "select",
29      choices: {
30        doge: "DOGE", ltc: "LTC", sol: "SOL", trx: "TRX", usdt: "USDT",
31        pepe: "PEPE", dgb: "DGB", bnb: "BNB", eth: "ETH", dash: "DASH",
32        zec: "ZEC", fey: "FEY"
33      },
34      default: "LTC"
35    }
36  }
37});
38
39(function () {
40  'use strict';
41
42  const email = (cfg.get('Email') || '').trim();
43  const crypto = (cfg.get('cryptoChoice') || 'ltc').trim().toLowerCase();
44  const url = window.location.href;
45  const referralId = "17206";
46  const isLoggedIn = !document.querySelector('button.hero_form_btn');
47
48  if (!isLoggedIn && !url.includes(`?r=${referralId}`)) {
49    window.location.href = `https://bitfaucet.net/?r=${referralId}`;
50    return;
51  }
52
53  if (isLoggedIn && url.includes('/dashboard')) {
54    window.location.href = `https://bitfaucet.net/faucet/currency/${crypto}`;
55    return;
56  }
57
58  if (!email) {
59    Swal.fire({
60      icon: 'warning',
61      title: 'Email FaucetPay belum diisi!',
62      html: `Buka menu 🐵 <b>Pengaturan BitFaucet</b> lalu isi Email FaucetPay Anda.`,
63      confirmButtonText: 'OK'
64    });
65    return;
66  }
67
68 // === AUTO LOGIN: BitFaucet ===
69if (location.hostname.includes("bitfaucet.net") && document.querySelector('#InputEmail')) {
70  console.log("🧠 Login page terdeteksi... mulai auto-login.");
71
72  (async () => {
73    const waitForElm = (sel, timeout = 15000) =>
74      new Promise((res, rej) => {
75        const el = document.querySelector(sel);
76        if (el) return res(el);
77        const obs = new MutationObserver(() => {
78          const found = document.querySelector(sel);
79          if (found) {
80            obs.disconnect();
81            res(found);
82          }
83        });
84        obs.observe(document.body, { childList: true, subtree: true });
85        setTimeout(() => { obs.disconnect(); rej(); }, timeout);
86      });
87
88    try {
89      const emailInput = await waitForElm('#InputEmail');
90      const form = emailInput.closest('form');
91      const submitBtn = form?.querySelector('button[type="submit"]');
92
93      async function simulateTyping(el, text, delay = 80) {
94        el.focus();
95        el.value = "";
96        for (const ch of text) {
97          el.dispatchEvent(new KeyboardEvent('keydown', { key: ch, bubbles: true }));
98          el.value += ch;
99          el.dispatchEvent(new Event('input', { bubbles: true }));
100          el.dispatchEvent(new KeyboardEvent('keyup', { key: ch, bubbles: true }));
101          await new Promise(r => setTimeout(r, delay));
102        }
103        el.dispatchEvent(new Event('change', { bubbles: true }));
104        el.dispatchEvent(new Event('blur', { bubbles: true }));
105      }
106
107      await simulateTyping(emailInput, email);
108
109      function solveEmojiCaptcha() {
110        const q = document.querySelector('[data-id="question-text"]');
111        const icons = document.querySelectorAll('.captcha-item');
112        if (!q || !icons.length) return;
113
114        const match = q.textContent.match(/click on the\s*:\s*(\w+)/i);
115        if (!match) return;
116        const target = match[1].toLowerCase() + '.gif';
117
118        for (const icon of icons) {
119          if (icon.getAttribute('data-icon') === target) {
120            icon.scrollIntoView({ behavior: "smooth", block: "center" });
121            setTimeout(() => icon.click(), 400);
122            break;
123          }
124        }
125      }
126
127      const check = setInterval(() => {
128        solveEmojiCaptcha();
129
130        const captchaOK = document.querySelector('.secure-captcha.captcha-success') ||
131          document.querySelector('input[name="selected_icon"][value]:not([value=""])');
132        const noCaptcha = !document.querySelector('.secure-captcha');
133
134        if ((captchaOK || noCaptcha) && submitBtn) {
135          clearInterval(check);
136          setTimeout(() => submitBtn.click(), 1200);
137        }
138      }, 800);
139
140    } catch (err) {
141    }
142  })();
143}
144
145  // 🧩 1. MODE FAUCET
146  if (/faucet\/currency\//.test(url)) {
147    console.log("✅ Faucet Mode aktif");
148
149    function faucetAutomation() {
150
151      function solveEmojiCaptcha() {
152        const q = document.querySelector('[data-id="question-text"]');
153        const icons = document.querySelectorAll('.captcha-item');
154        if (!q || !icons.length) return;
155
156        const match = q.textContent.match(/click on the\s*:\s*(\w+)/i);
157        if (!match) return;
158
159        const target = match[1].toLowerCase() + '.gif';
160        for (const icon of icons) {
161          if (icon.getAttribute('data-icon') === target) {
162            icon.scrollIntoView({ behavior: "smooth", block: "center" });
163            setTimeout(() => icon.click(), 500);
164            break;
165          }
166        }
167      }
168
169      function autoScrollAndClaim() {
170        const captcha = document.querySelector('.secure-captcha');
171        if (captcha) captcha.scrollIntoView({ behavior: "smooth", block: "center" });
172
173        const interval = setInterval(() => {
174          solveEmojiCaptcha();
175
176          const solved = document.querySelector('.secure-captcha.captcha-success') ||
177            document.querySelector('input[name="selected_icon"][value]:not([value=""])');
178          if (solved) {
179            clearInterval(interval);
180
181            const claimBtn = document.querySelector('button[type="submit"].btn.sl_btn');
182            if (claimBtn) {
183              claimBtn.scrollIntoView({ behavior: "smooth", block: "center" });
184              setTimeout(() => claimBtn.click(), 2000);
185            }
186
187            const goBtn = document.querySelector('.modal-dialog .btn.btn_sl.link_form_bt');
188            if (goBtn) {
189              goBtn.scrollIntoView({ behavior: "smooth", block: "center" });
190              setTimeout(() => goBtn.click(), 2000);
191            }
192          }
193        }, 1500);
194      }
195
196      function detectSweetAlert() {
197        const selectors = ['.swal2-html-container', '.swal-text', '.swal-title'];
198        const keywords = ["after every", "faucet claims", "shortlink must be completed"];
199        for (const s of selectors) {
200          const els = document.querySelectorAll(s);
201          for (const el of els) {
202            const txt = el.innerText?.trim().toLowerCase();
203            if (keywords.some(k => txt.includes(k))) {
204              setTimeout(() => {
205                window.location.href = `https://bitfaucet.net/links/currency/${crypto}`;
206              }, 1500);
207              return;
208            }
209          }
210        }
211      }
212
213      // Jalankan periodik
214      setInterval(() => {
215        solveEmojiCaptcha();
216        autoScrollAndClaim();
217        detectSweetAlert();
218      }, 4000);
219    }
220
221    setTimeout(faucetAutomation, 3000);
222  }
223
224  // 🔗 2. MODE LINKS
225  if (/links\/currency\//.test(url)) {
226    console.log("✅ Links Mode aktif");
227
228    const TARGET_TITLES = [
229      'gplink', 'linkpay', 'mitly', 'fc', 'exe',
230      'shrinkme', 'clk', 'cuty', 'shrinkearn', 'linkzon', 'linkrex'
231    ];
232
233    function clickClaimButton() {
234      let clicked = false;
235      const headers = Array.from(document.querySelectorAll('h5'));
236
237      headers.forEach(header => {
238        const titleText = header.textContent.trim().toLowerCase();
239
240        if (TARGET_TITLES.includes(titleText)) {
241          const claimBtn = header.closest('.common_card')?.querySelector('button.link_bt');
242          if (claimBtn && claimBtn.textContent.toLowerCase().includes('claim')) {
243            claimBtn.click();
244            clicked = true;
245          }
246        }
247      });
248
249      if (clicked) {
250        clearInterval(checkInterval);
251      }
252    }
253
254    const checkInterval = setInterval(clickClaimButton, 1000);
255
256    function log(msg) {
257    }
258
259    function solveEmojiCaptchaLink() {
260      const questionText = document.querySelector('[data-id="question-text"]');
261      if (!questionText) {
262        return setTimeout(solveEmojiCaptchaLink, 1000);
263      }
264
265      const match = questionText.textContent.match(/:?\s*(\w+)\s*$/i);
266      if (!match) return log("Gagal membaca teks captcha.");
267
268      const target = match[1].toLowerCase() + ".gif";
269      log("Target emoji: " + target);
270
271      const icons = document.querySelectorAll('.captcha-item');
272      for (const icon of icons) {
273        const iconName = icon.getAttribute('data-icon');
274        if (iconName && iconName.toLowerCase() === target) {
275          log("Klik emoji benar: " + iconName);
276          icon.click();
277
278          const inputIcon = document.querySelector('[data-id="selected-icon"]');
279          if (inputIcon) inputIcon.value = iconName;
280
281          setTimeout(() => {
282            const form = document.querySelector('#link_security_form');
283            if (form) {
284              log("Submit form...");
285              form.removeAttribute('target');
286              form.submit();
287            }
288          }, 1000);
289          return;
290        }
291      }
292
293      setTimeout(solveEmojiCaptchaLink, 1000);
294    }
295
296    window.addEventListener('load', () => {
297      setTimeout(solveEmojiCaptchaLink, 1500);
298    });
299  }
300
301})();
302
Bitfaucet.net/ Auto Everything | Robomonkey