您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
free crypto + Dice roll
- // ==UserScript==
- // @name FLBOT_NO1
- // @namespace http://tampermonkey.net/
- // @version 1.4
- // @description free crypto + Dice roll
- // @author Peckovic
- // @license MIT
- // @match *://*.suipick.io/*
- // @match *://*.tonpick.game/*
- // @match *://*.polpick.io/*
- // @match *://*.solpick.io/*
- // @match *://*.tronpick.io/*
- // @match *://*.dogepick.io/*
- // @match *://*.bnbpick.io/*
- // @match *://*.litepick.io/*
- // @match *://*.freetron.in/*
- // @match *://*.freebnb.in/*
- // @match *://*.freexrp.in/*
- // @match *://*.freetoncoin.in/*
- // @match *://*.usdpick.io/*
- // @match *://*.freeshib.in/*
- // @match *://*.freebitco.in/*
- // @match *://*.freetrump.in/*
- // @grant none
- // ==/UserScript==
- (function () {
- // Debug log za proveru pokretanja
- console.log("[FLBOT] SKRIPTA POKRENUTA!");
- if (window.top !== window.self || window.FLBOTv5_started) {
- console.log("[FLBOT] Skripta se već izvršava ili je u iframe-u");
- return;
- }
- window.FLBOTv5_started = true;
- console.log("[FLBOT] Inicijalizujem bot...");
- // Tab focus management
- document.addEventListener('visibilitychange', function() {
- if (document.hidden) {
- window.focus();
- if (!window.flbotAudio) {
- window.flbotAudio = new Audio();
- window.flbotAudio.src = "data:audio/wav;base64,UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQoGAACBhYqFbF1fdJivrJBhNjVgodDbq2EcBj+a2/LDciUFLIHO8tiJNwgZaLvt559NEAxQp+PwtmMcBjiR1/LMeSwFJHfH8N2QQAoUXrTp66hVFApGn+DyvmEgBTGH0fPTgDAFJnrC7+ONQQ0PVqzn77BdGAU+ltryxnkpBSl+zPLZgTMIGWq+8OShUgwLU6fj8LhjHgg2jdXzzn0vBSF0xe/eizELDlOq5O+zYBoGPJPY88p9KwUme8rx2oQ2Bylt1O3Nhx4FO5Pz8x1eHgMvecGCa5BGMZVGrGFt1xGj7OBkOhKfbU6I1KLh7eSr1bvq";
- window.flbotAudio.loop = true;
- window.flbotAudio.volume = 0;
- }
- window.flbotAudio.play().catch(e => console.log("[FLBOT] Audio play prevented:", e));
- }
- });
- // Funkcije za čuvanje dice bot stanja
- function getDiceBotStateKey() {
- return `flbot_dicebot_states`;
- }
- function loadDiceBotStates() {
- const stateKey = getDiceBotStateKey();
- const saved = localStorage.getItem(stateKey);
- if (saved) {
- try {
- return JSON.parse(saved);
- } catch (e) {
- console.log("[FLBOT] Greška pri učitavanju dice bot stanja:", e);
- return {};
- }
- }
- return {};
- }
- function saveDiceBotState(hostname, isEnabled) {
- const stateKey = getDiceBotStateKey();
- const states = loadDiceBotStates();
- states[hostname] = isEnabled;
- localStorage.setItem(stateKey, JSON.stringify(states));
- console.log(`[FLBOT] Dice bot stanje za ${hostname}:`, isEnabled ? 'ON' : 'OFF');
- }
- function isDiceBotEnabled(hostname) {
- const states = loadDiceBotStates();
- // Ako nema sačuvano stanje, default je ON
- return states[hostname] !== false;
- }
- // Poboljšane funkcije za čuvanje statistika
- function getStatsKey() {
- return `flbot_stats_${location.hostname}`;
- }
- function loadStats() {
- const statsKey = getStatsKey();
- const saved = localStorage.getItem(statsKey);
- if (saved) {
- try {
- return JSON.parse(saved);
- } catch (e) {
- console.log("[FLBOT] Greška pri učitavanju statistika:", e);
- return { profit: 0, totalBet: 0, rolls: 0, wins: 0, losses: 0, lastUpdate: Date.now() };
- }
- }
- return { profit: 0, totalBet: 0, rolls: 0, wins: 0, losses: 0, lastUpdate: Date.now() };
- }
- function saveStats(stats) {
- const statsKey = getStatsKey();
- stats.lastUpdate = Date.now();
- localStorage.setItem(statsKey, JSON.stringify(stats));
- }
- function resetStats() {
- const statsKey = getStatsKey();
- localStorage.removeItem(statsKey);
- console.log("[FLBOT] Statistike resetovane za", location.hostname);
- }
- function mergeStats(oldStats, newStats) {
- // Spaja stare i nove statistike, uzimajući veće vrednosti za ključne metrike
- return {
- profit: Math.max(oldStats.profit || 0, newStats.profit || 0),
- totalBet: Math.max(oldStats.totalBet || 0, newStats.totalBet || 0),
- rolls: Math.max(oldStats.rolls || 0, newStats.rolls || 0),
- wins: Math.max(oldStats.wins || 0, newStats.wins || 0),
- losses: Math.max(oldStats.losses || 0, newStats.losses || 0),
- lastUpdate: Date.now()
- };
- }
- const sites = [
- { host: "suipick.io", aff: "https://suipick.io/?ref=peckovic", dice: "https://suipick.io/dice.php", minBet: 0.000010000, usesIframe: false },
- { host: "tonpick.game", aff: "https://tonpick.game/?ref=ba1tazar666", dice: "https://tonpick.game/dice.php", minBet: 0.00001000, usesIframe: false },
- { host: "polpick.io", aff: "https://polpick.io/?ref=ba1tazar666", dice: "https://polpick.io/dice.php", minBet: 0.00001000, usesIframe: false },
- { host: "solpick.io", aff: "https://solpick.io/?ref=ba1tazar666", dice: "https://solpick.io/dice.php", minBet: 0.00000010, usesIframe: false },
- { host: "tronpick.io", aff: "https://tronpick.io/?ref=ba1tazar666", dice: "https://tronpick.io/dice.php", minBet: 0.000100, usesIframe: false },
- { host: "dogepick.io", aff: "https://dogepick.io/?ref=ba1tazar666", dice: "https://dogepick.io/dice.php", minBet: 0.00010000, usesIframe: false },
- { host: "bnbpick.io", aff: "https://bnbpick.io/?ref=ba1tazar666", dice: "https://bnbpick.io/dice.php", minBet: 0.00000001, usesIframe: false },
- { host: "litepick.io", aff: "https://litepick.io/?ref=ba1tazar666", dice: "https://litepick.io/dice.php", minBet: 0.00000010, usesIframe: false },
- { host: "freetron.in", aff: "https://freetron.in/faucet", dice: "https://freetron.in/games/dice", minBet: 0.0005, usesIframe: true },
- { host: "freebnb.in", aff: "https://freebnb.in/faucet", dice: "https://freebnb.in/games/dice", minBet: 0.00000010, usesIframe: true },
- { host: "freexrp.in", aff: "https://freexrp.in/faucet", dice: "https://freexrp.in/games/dice", minBet: 0.000050, usesIframe: true },
- { host: "freetoncoin.in", aff: "https://freetoncoin.in/faucet", dice: "https://freetoncoin.in/games/dice", minBet: 0.00001000, usesIframe: true },
- { host: "usdpick.io", aff: "https://usdpick.io/faucet", dice: "https://usdpick.io/games/dice", minBet: 0.00005, usesIframe: false },
- { host: "freeshib.in", aff: "https://freeshib.in/faucet", dice: "https://freeshib.in/games/dice", minBet: 10.00000000, usesIframe: true },
- { host: "freebitco.in", aff: "https://freebitco.in/?op=home#", dice: "https://freebitco.in/?op=home#", minBet: 0.00000001, usesIframe: false },
- { host: "freetrump.in", aff: "https://freetrump.in?ref=5fsHx6sPFX", dice: "https://freetrump.in/games/dice", minBet: 0.00003, usesIframe: true, mainUrl: "https://freetrump.in/faucet" }
- ];
- console.log("[FLBOT] Lista sajtova učitana, ukupno:", sites.length);
- const ROTATE_IN = 60;
- let countdown = ROTATE_IN;
- let wentToDice = false;
- let index = parseInt(localStorage.getItem("flbot_index") || "0");
- let botIsPlaying = false;
- let diceBotActive = false;
- let currentBet = 0;
- let baseBet = 0;
- let winChance = 49.5;
- let high = true;
- let autoMode = true;
- let dicePanel = null;
- let togglePanel = null;
- function nextSite() {
- let nextIndex = (index + 1) % sites.length;
- let attempts = 0;
- const maxAttempts = sites.length;
- // Proverava da li je dice bot uključen za sledeći sajt
- while (attempts < maxAttempts) {
- const nextSite = sites[nextIndex];
- // Ako je freebitco.in, uvek preskači dice bot proveru
- if (nextSite.host === "freebitco.in" || isDiceBotEnabled(nextSite.host)) {
- index = nextIndex;
- localStorage.setItem("flbot_index", index);
- console.log("[FLBOT] Prelazim na sajt:", nextSite.host,
- nextSite.host === "freebitco.in" ? "(freebitco.in - nema dice)" :
- isDiceBotEnabled(nextSite.host) ? "(dice bot ON)" : "");
- return nextSite;
- } else {
- console.log(`[FLBOT] Preskačem sajt ${nextSite.host} (dice bot OFF)`);
- nextIndex = (nextIndex + 1) % sites.length;
- attempts++;
- }
- }
- // Fallback - ako su svi sajti OFF, idi na sledeći u nizu
- index = (index + 1) % sites.length;
- localStorage.setItem("flbot_index", index);
- console.log("[FLBOT] Svi dice bot-ovi su OFF, prelazim na:", sites[index].host);
- return sites[index];
- }
- function getCurrentIndex() {
- const currentSite = getCurrentSite();
- if (!currentSite) return 0;
- return sites.findIndex(site => site.host === currentSite.host);
- }
- function getCurrentSite() {
- const site = sites.find(site => location.hostname.includes(site.host));
- if (site) {
- console.log("[FLBOT] Trenutni sajt:", site.host);
- } else {
- console.log("[FLBOT] Sajt nije prepoznat:", location.hostname);
- }
- return site;
- }
- function getCurrentBalance() {
- const balanceSelectors = [
- 'span.balance',
- '.balance',
- '#balance',
- 'span[id*="balance"]',
- 'div[id*="balance"]',
- '.user-balance',
- 'span.text-xs.font-bold',
- '#user_balance',
- 'span.user-balance',
- '.wallet-balance',
- '#wallet_balance',
- 'span.amount',
- '.amount',
- '#amount',
- 'span[class*="balance"]',
- 'div[class*="balance"]',
- ];
- // Prvo proveri glavni dokument
- for (const selector of balanceSelectors) {
- const element = document.querySelector(selector);
- if (element) {
- const balanceText = element.textContent || element.innerText || '';
- const balanceMatch = balanceText.match(/[\d,.]+/);
- if (balanceMatch) {
- const balance = parseFloat(balanceMatch[0].replace(/,/g, ''));
- if (!isNaN(balance)) {
- console.log(`[FLBOT] Pronađen balans: ${balance} (selektor: ${selector})`);
- return balance;
- }
- }
- }
- }
- // Ako nije pronađeno u glavnom dokumentu, proveri iframe
- const iframe = document.querySelector('iframe');
- if (iframe && iframe.contentDocument) {
- for (const selector of balanceSelectors) {
- const element = iframe.contentDocument.querySelector(selector);
- if (element) {
- const balanceText = element.textContent || element.innerText || '';
- const balanceMatch = balanceText.match(/[\d,.]+/);
- if (balanceMatch) {
- const balance = parseFloat(balanceMatch[0].replace(/,/g, ''));
- if (!isNaN(balance)) {
- console.log(`[FLBOT] Pronađen balans u iframe-u: ${balance} (selektor: ${selector})`);
- return balance;
- }
- }
- }
- }
- }
- console.log("[FLBOT] Balans nije pronađen ili je 0");
- return 0;
- }
- function isBalanceSufficient(currentBalance, requiredBet) {
- const bufferMultiplier = 10;
- const requiredBalance = requiredBet * bufferMultiplier;
- return currentBalance >= requiredBalance;
- }
- function switchToNextSiteDueToBalance() {
- if (diceBotActive) {
- console.log("[FLBOT] ⚠️ Dice bot je aktivan - neću prebaciti na sljedeći sajt zbog balansa");
- return;
- }
- console.log("[FLBOT] ⚠️ Nedovoljan balans - prebacujem na sljedeći sajt");
- botIsPlaying = false;
- updatePanel();
- setTimeout(() => {
- const next = nextSite();
- location.href = next.mainUrl || next.aff;
- }, 3000);
- }
- function getMainPanelHeight() {
- const mainPanel = document.getElementById("flbotPanel");
- if (mainPanel) {
- return mainPanel.offsetHeight;
- }
- return 0;
- }
- function getTogglePanelHeight() {
- if (togglePanel) {
- return togglePanel.offsetHeight;
- }
- return 0;
- }
- function updateDicePanelPosition() {
- if (dicePanel) {
- const mainPanelHeight = getMainPanelHeight();
- const togglePanelHeight = getTogglePanelHeight();
- dicePanel.style.bottom = `${mainPanelHeight + togglePanelHeight + 30}px`;
- dicePanel.style.right = '10px';
- }
- }
- function updateTogglePanelPosition() {
- if (togglePanel) {
- const mainPanelHeight = getMainPanelHeight();
- togglePanel.style.bottom = `${mainPanelHeight + 10}px`;
- togglePanel.style.right = '10px';
- }
- }
- function createTogglePanel() {
- if (togglePanel) return togglePanel;
- const currentSite = getCurrentSite();
- if (!currentSite) return null;
- // Ne prikazuj toggle panel za freebitco.in
- if (currentSite.host === "freebitco.in") return null;
- const isEnabled = isDiceBotEnabled(currentSite.host);
- togglePanel = document.createElement('div');
- togglePanel.id = 'flbotTogglePanel';
- togglePanel.style.cssText = `
- position: fixed;
- bottom: 280px;
- right: 10px;
- background: rgba(25, 25, 25, 0.95);
- color: #fff;
- font-family: monospace;
- font-size: 12px;
- padding: 10px;
- border-radius: 8px;
- width: 260px;
- z-index: 9999997;
- box-shadow: 0 0 10px #000;
- border: 2px solid ${isEnabled ? '#4a9' : '#a94'};
- `;
- togglePanel.innerHTML = `
- <div style="font-weight: bold; margin-bottom: 8px; text-align: center; color: #fff;">
- 🎮 DICE BOT CONTROL - ${currentSite.host}
- </div>
- <div style="display: flex; gap: 5px; margin-bottom: 8px;">
- <button id="flbot-toggle-on" style="
- flex: 1;
- background: ${isEnabled ? '#4a9' : '#444'};
- color: #fff;
- border: none;
- padding: 6px;
- border-radius: 4px;
- cursor: pointer;
- font-weight: bold;
- font-size: 12px;
- transition: all 0.2s ease;
- ">ON</button>
- <button id="flbot-toggle-off" style="
- flex: 1;
- background: ${!isEnabled ? '#a94' : '#444'};
- color: #fff;
- border: none;
- padding: 6px;
- border-radius: 4px;
- cursor: pointer;
- font-weight: bold;
- font-size: 12px;
- transition: all 0.2s ease;
- ">OFF</button>
- </div>
- <div style="text-align: center; font-size: 11px; color: #ccc;">
- Current: <span id="flbot-toggle-status" style="color: ${isEnabled ? '#4a9' : '#a94'}; font-weight: bold;">
- ${isEnabled ? 'ON' : 'OFF'}
- </span>
- </div>
- `;
- document.body.appendChild(togglePanel);
- updateTogglePanelPosition();
- // Event listeners za toggle dugmad
- const onBtn = document.getElementById('flbot-toggle-on');
- const offBtn = document.getElementById('flbot-toggle-off');
- const toggleStatus = document.getElementById('flbot-toggle-status');
- if (onBtn) {
- onBtn.addEventListener('click', () => {
- saveDiceBotState(currentSite.host, true);
- // Ažuriraj UI
- onBtn.style.background = '#4a9';
- offBtn.style.background = '#444';
- toggleStatus.textContent = 'ON';
- toggleStatus.style.color = '#4a9';
- togglePanel.style.border = '2px solid #4a9';
- console.log(`[FLBOT] Dice bot za ${currentSite.host} UKLJUČEN`);
- updatePanel();
- });
- }
- if (offBtn) {
- offBtn.addEventListener('click', () => {
- saveDiceBotState(currentSite.host, false);
- // Ažuriraj UI
- offBtn.style.background = '#a94';
- onBtn.style.background = '#444';
- toggleStatus.textContent = 'OFF';
- toggleStatus.style.color = '#a94';
- togglePanel.style.border = '2px solid #a94';
- console.log(`[FLBOT] Dice bot za ${currentSite.host} ISKLJUČEN`);
- updatePanel();
- });
- }
- return togglePanel;
- }
- function createDicePanel() {
- if (dicePanel) return dicePanel;
- const site = getCurrentSite();
- if (!site) return null;
- const currentBalance = getCurrentBalance();
- let stats = loadStats();
- let { profit, totalBet, rolls, wins, losses } = stats;
- dicePanel = document.createElement('div');
- dicePanel.id = 'flbotDicePanel';
- dicePanel.style.cssText = `
- position: fixed;
- bottom: 360px;
- right: 10px;
- background: rgba(17, 17, 17, 0.95);
- color: #4a9;
- font-family: monospace;
- font-size: 12px;
- padding: 10px;
- border-radius: 8px;
- width: 260px;
- z-index: 9999998;
- box-shadow: 0 0 10px #000;
- border: 2px solid #4a9;
- `;
- dicePanel.innerHTML = `
- <div style="font-weight: bold; margin-bottom: 6px; text-align: center; color: #4a9;">🎲 DICE BOT - ${site.host}</div>
- <div>Balance: <span id="flbot-balance-display">${currentBalance.toFixed(8)}</span></div>
- <div>Rolls: <span id="flbot-rolls">${rolls}</span></div>
- <div>Wins: <span id="flbot-wins">${wins}</span></div>
- <div>Losses: <span id="flbot-losses">${losses}</span></div>
- <div>Profit: <span id="flbot-profit">${profit.toFixed(8)}</span></div>
- <div>Total Bet: <span id="flbot-total">${totalBet.toFixed(8)}</span></div>
- <button id="flbot-reset" style="background:#a94;color:#fff;border:none;padding:5px;margin-top:5px;border-radius:4px;cursor:pointer;width:100%;">Reset Stats</button>
- `;
- document.body.appendChild(dicePanel);
- updateDicePanelPosition();
- return dicePanel;
- }
- function createPanel() {
- console.log("[FLBOT] Kreiram glavni panel...");
- const panel = document.createElement("div");
- panel.id = "flbotPanel";
- panel.style.cssText = `
- position: fixed;
- bottom: 10px;
- right: 10px;
- background: rgba(0,0,0,0.8);
- color: #fff;
- font-family: Arial, sans-serif;
- font-size: 12px;
- padding: 10px;
- border-radius: 8px;
- width: auto;
- min-width: 260px;
- max-width: 100%;
- max-height: none;
- overflow-y: visible;
- z-index: 9999999;
- box-shadow: 0 0 10px #000;
- `;
- panel.innerHTML = `
- <div style="font-weight: bold; margin-bottom: 6px; text-align: center;">FLBOT Panel v1.2.3</div>
- <div>Tab Status: <span id="flbotFocusStatus" style="color: #4a9;">Active</span></div>
- <div>Countdown: <span id="flbotCountdown">${countdown}</span>s</div>
- <div>Status: <span id="flbotStatus">Čekam...</span></div>
- <div>Balance: <span id="flbotBalance">Provjeram...</span></div>
- <div style="margin-top: 8px; font-weight: bold;">Sajtovi:</div>
- <ul id="flbotSiteList" style="padding-left: 18px; margin: 4px 0 0 0; white-space: nowrap;"></ul>
- <div id="flbot-step1" style="
- position: absolute;
- top: 90px;
- left: 170px;
- color: white;
- font-size: 14px;
- font-weight: bold;
- text-align: center;
- line-height: 1.2;
- ">
- Step 1<br>
- <span style="font-size: 20px; color: #4a9;">↓</span>
- </div>
- <button id="flbot-play" disabled style="
- margin-top: 10px;
- background: gray;
- color: white;
- border: none;
- padding: 6px 50px;
- font-size: 14px;
- font-weight: bold;
- border-radius: 4px;
- cursor: not-allowed;
- display: block;
- margin-left:auto;
- margin-right: 0;
- ">Auto Play</button>
- <div id="flbot-Step2" style="
- position: absolute;
- bottom: 10px;
- left: 20%;
- transform: translateX(-50%);
- color: white;
- font-size: 14px;
- font-weight: bold;
- text-align: center;
- line-height: 1.2;
- ">
- <span style="font-size: 12px; font-weight: bold;">Step 2</span>
- <span style="font-size: 20px; margin-left: 5px; color: #4a9;">→</span>
- </div>
- `;
- document.body.appendChild(panel);
- console.log("[FLBOT] Panel kreiran i dodat na stranicu");
- if (window.ResizeObserver) {
- const resizeObserver = new ResizeObserver(() => {
- updateDicePanelPosition();
- updateTogglePanelPosition();
- });
- resizeObserver.observe(panel);
- }
- }
- function updatePanel() {
- const countdownEl = document.getElementById("flbotCountdown");
- if (countdownEl) countdownEl.textContent = countdown;
- const statusEl = document.getElementById("flbotStatus");
- if (statusEl) {
- statusEl.textContent = botIsPlaying ? "Bot igra..." : "Čekam...";
- statusEl.style.color = botIsPlaying ? "#4a9" : "#fff";
- }
- const focusStatusEl = document.getElementById("flbotFocusStatus");
- if (focusStatusEl) {
- focusStatusEl.textContent = document.hidden ? "Inactive" : "Active";
- focusStatusEl.style.color = document.hidden ? "#a94" : "#4a9";
- }
- const balanceEl = document.getElementById("flbotBalance");
- if (balanceEl) {
- const currentBalance = getCurrentBalance();
- if (currentBalance > 0) {
- balanceEl.textContent = currentBalance.toFixed(8);
- balanceEl.style.color = "#4a9";
- } else {
- balanceEl.textContent = "0 ili N/A";
- balanceEl.style.color = "#a94";
- }
- }
- const siteListEl = document.getElementById("flbotSiteList");
- if (!siteListEl) return;
- siteListEl.innerHTML = "";
- const currentSite = getCurrentSite();
- // Dodajemo sve postojeće sajtove
- sites.forEach((site, i) => {
- const li = document.createElement("li");
- li.style.cssText = `
- cursor: default;
- padding: 2px 6px;
- border-radius: 4px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- `;
- li.title = site.mainUrl || site.aff;
- const siteText = document.createElement("span");
- const diceBotStatus = site.host === "freebitco.in" ? "" : (isDiceBotEnabled(site.host) ? " ON" : " OFF");
- const statusColor = site.host === "freebitco.in" ? "" : (isDiceBotEnabled(site.host) ? "color: #4a9;" : "color: #a94;");
- siteText.innerHTML = `${i + 1}. ${site.host}<span style="${statusColor} font-weight: bold;">${diceBotStatus}</span>`;
- const regBtn = document.createElement("button");
- regBtn.textContent = "REG";
- regBtn.style.cssText = `
- background: #333;
- color: #fff;
- border: 1px solid #555;
- padding: 2px 8px;
- border-radius: 4px;
- cursor: pointer;
- font-size: 10px;
- margin-left: 5px;
- min-width: 105px;
- height: 20px;
- transition: transform 0.2s ease;
- `;
- regBtn.onmouseover = () => regBtn.style.transform = "scale(1.1)";
- regBtn.onmouseout = () => regBtn.style.transform = "scale(1)";
- regBtn.onclick = () => location.href = site.aff;
- li.appendChild(siteText);
- li.appendChild(regBtn);
- if (site === currentSite) {
- li.style.backgroundColor = "#4a9";
- li.style.fontWeight = "bold";
- li.style.color = "#fff";
- } else {
- li.style.backgroundColor = "transparent";
- li.style.color = "#ccc";
- }
- siteListEl.appendChild(li);
- });
- // Dodajemo "soon" sajt na kraju liste
- const soonLi = document.createElement("li");
- soonLi.style.cssText = `
- cursor: default;
- padding: 2px 6px;
- border-radius: 4px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- color: #ccc;
- `;
- const soonText = document.createElement("span");
- soonText.innerHTML = `17. soon`;
- const disabledRegBtn = document.createElement("button");
- disabledRegBtn.textContent = "REG";
- disabledRegBtn.style.cssText = `
- background: #222;
- color: #666;
- border: 1px solid #333;
- padding: 2px 8px;
- border-radius: 4px;
- font-size: 10px;
- margin-left: 5px;
- min-width: 105px;
- height: 20px;
- cursor: not-allowed;
- `;
- disabledRegBtn.disabled = true;
- soonLi.appendChild(soonText);
- soonLi.appendChild(disabledRegBtn);
- siteListEl.appendChild(soonLi);
- updateDicePanelPosition();
- updateTogglePanelPosition();
- }
- function startCountdown() {
- console.log("[FLBOT] Pokrećem countdown timer...");
- const timer = setInterval(() => {
- countdown--;
- updatePanel();
- if (countdown <= 10 && !wentToDice) {
- const site = getCurrentSite();
- if (site) {
- if (site.host === "freebitco.in") {
- wentToDice = true;
- const next = nextSite();
- location.href = next.mainUrl || next.aff;
- clearInterval(timer);
- } else if (!location.href.includes("/dice") && !location.href.includes("/games/dice")) {
- // Proverava da li je dice bot uključen pre prelaska na dice stranicu
- if (isDiceBotEnabled(site.host)) {
- wentToDice = true;
- console.log(`[FLBOT] Idem na dice stranicu: ${site.dice} (dice bot ON)`);
- location.href = site.dice;
- clearInterval(timer);
- } else {
- console.log(`[FLBOT] Dice bot je OFF za ${site.host}, prelazim na sledeći sajt`);
- wentToDice = true;
- const next = nextSite();
- location.href = next.mainUrl || next.aff;
- clearInterval(timer);
- }
- }
- }
- }
- if (countdown <= 0) {
- if (diceBotActive) {
- console.log("[FLBOT] ⚠️ Dice bot je aktivan - neću prebaciti na sljedeći sajt zbog timeout-a");
- return;
- }
- const next = nextSite();
- location.href = next.mainUrl || next.aff;
- clearInterval(timer);
- }
- }, 1000);
- }
- function startDiceTimeout() {
- console.log('[FLBOT] Pokrećem 10-sekundni timeout za dice...');
- setTimeout(() => {
- if (!botIsPlaying) {
- console.log('[FLBOT] ⏰ Timeout - bot ne igra, prelazim na sledeći sajt');
- const next = nextSite();
- location.href = next.mainUrl || next.aff;
- } else {
- console.log('[FLBOT] Bot igra, ne prekidam...');
- }
- }, 10000);
- }
- const TURNSTILE_RESPONSE_SELECTOR = 'input[name="cf-turnstile-response"]';
- const CLAIM_BUTTON_TEXT = 'claim';
- let isClaimClicked = false;
- function isVerificationComplete() {
- const input = document.querySelector(TURNSTILE_RESPONSE_SELECTOR);
- return input && input.value.trim() !== '';
- }
- function clickClaimButton() {
- if (isClaimClicked) return;
- const buttons = Array.from(document.querySelectorAll('button, input[type="submit"], input[type="button"]'));
- for (const btn of buttons) {
- const text = (btn.textContent || btn.value || "").trim().toLowerCase();
- if (text === CLAIM_BUTTON_TEXT) {
- console.log("[FLBOT] Verifikacija ok, klik na Claim dugme");
- btn.click();
- isClaimClicked = true;
- break;
- }
- }
- }
- function checkClaimLoop() {
- if (isVerificationComplete()) {
- clickClaimButton();
- } else {
- console.log("[FLBOT] Čekam turnstile verifikaciju...");
- }
- }
- function waitForEl(selector, callback, maxAttempts = 20) {
- let attempts = 0;
- const checkElement = () => {
- const el = document.querySelector(selector);
- if (el) return callback(el);
- attempts++;
- if (attempts < maxAttempts) setTimeout(checkElement, 500);
- else console.warn(`[FLBOT] Element ${selector} nije pronađen nakon ${maxAttempts} pokušaja`);
- };
- checkElement();
- }
- function getIframeDocument(iframe) {
- try {
- return iframe.contentDocument || iframe.contentWindow.document;
- } catch (e) {
- console.error("[FLBOT] Greška pri pristupu iframe dokumentu:", e);
- return null;
- }
- }
- function getDiceElements() {
- const currentSite = getCurrentSite();
- if (!currentSite) return null;
- if (currentSite.usesIframe) {
- const iframe = document.querySelector('iframe');
- if (!iframe) return null;
- const iframeDoc = getIframeDocument(iframe);
- if (!iframeDoc) return null;
- return {
- betInput: iframeDoc.querySelector('#bet_amount'),
- rollBtn: iframeDoc.querySelector('#roll_dice'),
- resultSpan: iframeDoc.querySelector('.result_maker span')
- };
- } else {
- return {
- betInput: document.querySelector('#bet_amount'),
- rollBtn: document.querySelector('#roll_dice'),
- resultSpan: document.querySelector('.result_maker span')
- };
- }
- }
- function startDiceBot() {
- console.log('[FLBOT] Pokrećem dice bot...');
- const site = getCurrentSite();
- if (!site) return;
- // Proverava da li je dice bot uključen za trenutni sajt
- if (!isDiceBotEnabled(site.host)) {
- console.log(`[FLBOT] ⚠️ Dice bot je isključen za ${site.host}, prelazim na sledeći sajt`);
- setTimeout(() => {
- const next = nextSite();
- location.href = next.mainUrl || next.aff;
- }, 3000);
- return;
- }
- const currentBalance = getCurrentBalance();
- const requiredBet = site.minBet;
- if (!isBalanceSufficient(currentBalance, requiredBet)) {
- console.log(`[FLBOT] ⚠️ Nedovoljan balans! Trenutni: ${currentBalance}, Potreban: ${requiredBet * 10}`);
- switchToNextSiteDueToBalance();
- return;
- }
- botIsPlaying = true;
- diceBotActive = true;
- updatePanel();
- baseBet = site.minBet;
- currentBet = baseBet;
- winChance = 49.5;
- high = true;
- autoMode = true;
- let stats = loadStats();
- let { profit, totalBet, rolls, wins, losses } = stats;
- createDicePanel();
- const resetBtn = document.getElementById('flbot-reset');
- if (resetBtn) {
- resetBtn.addEventListener('click', () => {
- resetStats();
- profit = 0;
- totalBet = 0;
- rolls = 0;
- wins = 0;
- losses = 0;
- updateDisplay();
- console.log('[FLBOT] Statistike resetovane');
- });
- }
- const updateDisplay = () => {
- const currentStats = loadStats();
- const rollsEl = document.getElementById('flbot-rolls');
- const winsEl = document.getElementById('flbot-wins');
- const lossesEl = document.getElementById('flbot-losses');
- const profitEl = document.getElementById('flbot-profit');
- const totalEl = document.getElementById('flbot-total');
- const balanceDisplayEl = document.getElementById('flbot-balance-display');
- if (rollsEl) rollsEl.textContent = currentStats.rolls;
- if (winsEl) winsEl.textContent = currentStats.wins;
- if (lossesEl) lossesEl.textContent = currentStats.losses;
- if (profitEl) profitEl.textContent = currentStats.profit.toFixed(8);
- if (totalEl) totalEl.textContent = currentStats.totalBet.toFixed(8);
- const newBalance = getCurrentBalance();
- if (balanceDisplayEl) {
- balanceDisplayEl.textContent = newBalance.toFixed(8);
- }
- };
- const play = () => {
- if (!autoMode) return;
- // Proverava ponovo da li je dice bot još uvek uključen
- if (!isDiceBotEnabled(site.host)) {
- console.log(`[FLBOT] ⚠️ Dice bot je isključen tokom igre za ${site.host}, prekidam`);
- botIsPlaying = false;
- diceBotActive = false;
- autoMode = false;
- setTimeout(() => {
- const next = nextSite();
- location.href = next.mainUrl || next.aff;
- }, 3000);
- return;
- }
- const diceElements = getDiceElements();
- if (!diceElements || !diceElements.betInput || !diceElements.rollBtn || !diceElements.resultSpan) {
- console.warn('[FLBOT] Nedostaju elementi za dice igru');
- setTimeout(play, 5000);
- return;
- }
- const currentBalance = getCurrentBalance();
- if (!isBalanceSufficient(currentBalance, currentBet)) {
- console.log(`[FLBOT] ⚠️ Nedovoljan balans za bet ${currentBet}! Trenutni balans: ${currentBalance}`);
- botIsPlaying = false;
- diceBotActive = false;
- setTimeout(() => {
- const next = nextSite();
- location.href = next.mainUrl || next.aff;
- }, 10000);
- return;
- }
- try {
- diceElements.betInput.value = currentBet.toFixed(8);
- } catch (e) {
- console.error('[FLBOT] Greška pri postavljanju vrednosti bet-a:', e);
- setTimeout(play, 5000);
- return;
- }
- console.log("[FLBOT] ⏳ Čekam 10 sekundi prije klika na ROLL DICE...");
- setTimeout(() => {
- const balanceBeforeRoll = getCurrentBalance();
- if (!isBalanceSufficient(balanceBeforeRoll, currentBet)) {
- console.log(`[FLBOT] ⚠️ Balans se promijenio! Čekam 10s...`);
- setTimeout(play, 10000);
- return;
- }
- try {
- diceElements.rollBtn.click();
- console.log("[FLBOT] 🎲 Kliknuo ROLL DICE");
- setTimeout(() => {
- try {
- const resultText = diceElements.resultSpan.textContent;
- const result = parseFloat(resultText);
- if (isNaN(result)) {
- console.warn('[FLBOT] Nevalidan rezultat:', resultText);
- setTimeout(play, 5000);
- return;
- }
- totalBet += currentBet;
- const isWin = (high && result > 100 - winChance) || (!high && result < winChance);
- if (isWin) {
- wins++;
- profit += currentBet * (100 / winChance - 1);
- currentBet = baseBet;
- rolls++;
- const newStats = { profit, totalBet, rolls, wins, losses };
- const mergedStats = mergeStats(loadStats(), newStats);
- saveStats(mergedStats);
- updateDisplay();
- console.log('[FLBOT] ✅ WIN - Čekam 10s i rotiram sajt');
- botIsPlaying = false;
- diceBotActive = false;
- autoMode = false;
- setTimeout(() => {
- const next = nextSite();
- location.href = next.mainUrl || next.aff;
- }, 10000);
- return;
- } else {
- losses++;
- currentBet *= 2;
- const nextBalance = getCurrentBalance();
- if (!isBalanceSufficient(nextBalance, currentBet)) {
- console.log(`[FLBOT] ⚠️ Sljedeći bet prevelik. Čekam 10s i rotiram`);
- const newStats = { profit, totalBet, rolls, wins, losses };
- const mergedStats = mergeStats(loadStats(), newStats);
- saveStats(mergedStats);
- botIsPlaying = false;
- diceBotActive = false;
- autoMode = false;
- setTimeout(() => {
- const next = nextSite();
- location.href = next.mainUrl || next.aff;
- }, 10000);
- return;
- }
- }
- rolls++;
- const newStats = { profit, totalBet, rolls, wins, losses };
- const mergedStats = mergeStats(loadStats(), newStats);
- saveStats(mergedStats);
- updateDisplay();
- if (autoMode) setTimeout(play, 10000);
- } catch (e) {
- console.error('[FLBOT] Greška pri obradi rezultata:', e);
- setTimeout(play, 10000);
- }
- }, 1500);
- } catch (e) {
- console.error('[FLBOT] Greška pri kliku na roll dugme:', e);
- setTimeout(play, 10000);
- }
- }, 10000);
- };
- play();
- }
- function handleFreeBitcoin() {
- function clickFreeBtcAfterDelay() {
- const freePlayBtn = document.getElementById("free_play_form_button");
- if (freePlayBtn && !freePlayBtn.disabled) {
- console.log("[FLBOT] Čekam 30 sekundi pre klika FREE BTC dugmeta na freebitco.in");
- setTimeout(() => {
- console.log("[FLBOT] Klikćem FREE BTC dugme na freebitco.in");
- freePlayBtn.click();
- }, 30000);
- } else {
- setTimeout(clickFreeBtcAfterDelay, 1000);
- }
- }
- clickFreeBtcAfterDelay();
- }
- // Glavna inicijalizacija
- try {
- console.log("[FLBOT] Pokrećem glavnu inicijalizaciju...");
- // Kreiraj panel
- createPanel();
- const currentIndex = getCurrentIndex();
- if (currentIndex !== -1) {
- index = currentIndex;
- localStorage.setItem("flbot_index", index);
- }
- const currentSite = getCurrentSite();
- console.log("[FLBOT] Trenutna lokacija:", location.href);
- // For freetrump.in, always use the faucet URL as main page
- if (currentSite && currentSite.host === "freetrump.in" && !location.href.includes("/faucet") && !location.href.includes("/games/dice")) {
- console.log("[FLBOT] Redirecting freetrump.in to faucet page");
- location.href = currentSite.mainUrl;
- return;
- }
- // Kreiraj toggle panel
- createTogglePanel();
- if (currentSite && (location.href.includes("/dice") || location.href.includes("/games/dice"))) {
- console.log("[FLBOT] Detektovana dice stranica");
- // Proverava da li je dice bot uključen pre pokretanja
- if (!isDiceBotEnabled(currentSite.host)) {
- console.log(`[FLBOT] ⚠️ Dice bot je isključen za ${currentSite.host}, prelazim na sledeći sajt`);
- setTimeout(() => {
- const next = nextSite();
- location.href = next.mainUrl || next.aff;
- }, 3000);
- return;
- }
- startDiceTimeout();
- if (currentSite.usesIframe) {
- console.log('[FLBOT] Detektovana dice stranica sa iframe-om');
- const waitForIframe = setInterval(() => {
- const iframe = document.querySelector("iframe");
- if (iframe) {
- clearInterval(waitForIframe);
- console.log("[FLBOT] Iframe pronađen, pokrećem dice bot");
- setTimeout(() => {
- startDiceBot();
- }, 3000);
- }
- }, 1000);
- } else {
- console.log('[FLBOT] Detektovana dice stranica bez iframe-a');
- waitForEl("#bet_amount", () => {
- waitForEl("#roll_dice", () => {
- waitForEl(".result_maker span", startDiceBot);
- });
- });
- }
- } else {
- console.log("[FLBOT] Pokrećem countdown na glavnoj stranici");
- startCountdown();
- setInterval(checkClaimLoop, 3000);
- if (location.hostname.includes("freebitco.in")) {
- handleFreeBitcoin();
- }
- }
- updatePanel();
- setInterval(updatePanel, 5000);
- setInterval(() => {
- if (document.hidden) {
- window.focus();
- }
- }, 5000);
- console.log("[FLBOT] ✅ Skripta uspešno pokrenuta!");
- } catch (error) {
- console.error("[FLBOT] ❌ Greška pri pokretanju skripte:", error);
- }
- })();