您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Tự động đăng nhập và mua máy trên UgPhone
// ==UserScript== // @name Tool UgPhone PRO MAX // @namespace https://ugphone.com/ // @version 2.3 // @description Tự động đăng nhập và mua máy trên UgPhone // @author Hieu Dep Zai // @match *://*.ugphone.com/toc-portal/* // @grant GM_getValue // @grant GM_setValue // ==/UserScript== (function () { 'use strict'; const isMobile = window.innerWidth < 600; // UI setup const menu = document.createElement('div'); menu.style.position = 'fixed'; menu.style.top = isMobile ? '50px' : '60px'; menu.style.right = isMobile ? '10px' : '20px'; menu.style.zIndex = '9999'; menu.style.background = 'white'; menu.style.border = '1px solid #ccc'; menu.style.padding = '10px'; menu.style.borderRadius = '10px'; menu.style.boxShadow = '0 0 10px rgba(0,0,0,0.3)'; menu.style.width = isMobile ? '90%' : '400px'; menu.style.maxWidth = '95vw'; menu.style.display = 'none'; menu.style.fontSize = isMobile ? '14px' : '16px'; const toggleBtn = document.createElement('button'); toggleBtn.textContent = '🧩 MENU'; toggleBtn.style.position = 'fixed'; toggleBtn.style.bottom = isMobile ? '100px' : '550px'; toggleBtn.style.right = isMobile ? '10px' : '20px'; toggleBtn.style.padding = isMobile ? '8px 12px' : '10px 15px'; toggleBtn.style.borderRadius = '20px'; toggleBtn.style.border = 'none'; toggleBtn.style.background = '#007bff'; toggleBtn.style.color = 'white'; toggleBtn.style.cursor = 'pointer'; toggleBtn.style.zIndex = '9999'; document.body.appendChild(toggleBtn); toggleBtn.onclick = () => { menu.style.display = (menu.style.display === 'none') ? 'block' : 'none'; }; const textarea = document.createElement('textarea'); textarea.placeholder = 'Dán localStorage JSON tại đây...'; textarea.rows = 6; textarea.style.width = '100%'; textarea.style.resize = 'vertical'; textarea.style.fontSize = isMobile ? '13px' : '14px'; textarea.value = GM_getValue('lastInput', ''); const btnLogin = document.createElement('button'); btnLogin.textContent = '✅ Đăng Nhập'; btnLogin.style.marginTop = '8px'; btnLogin.style.width = '100%'; btnLogin.style.background = '#28a745'; btnLogin.style.color = 'white'; const btnClearJson = document.createElement('button'); btnClearJson.textContent = '🗑️ Xoá JSON'; btnClearJson.style.marginTop = '6px'; btnClearJson.style.width = '100%'; btnClearJson.style.background = '#dc3545'; btnClearJson.style.color = 'white'; const countryLabel = document.createElement('label'); countryLabel.textContent = '🌐 Chọn Máy Chủ:'; const selectCountry = document.createElement('select'); selectCountry.style.width = '100%'; ['hk', 'sg', 'de', 'us', 'jp'].forEach(c => { const opt = document.createElement('option'); opt.value = c; opt.textContent = c.toUpperCase(); selectCountry.appendChild(opt); }); const btnBuy = document.createElement('button'); btnBuy.textContent = '🛒 Tự động Mua Máy'; btnBuy.style.marginTop = '10px'; btnBuy.style.width = '100%'; btnBuy.style.background = '#28a745'; btnBuy.style.color = 'white'; // === JSON FIX FUNCTION === function fixJsonInput(raw) { try { return JSON.parse(raw); } catch { try { const fixed = raw.replace( /"UGPHONE-MQTT":"({[^]*?})"/, (_, inner) => `"UGPHONE-MQTT":${JSON.stringify(inner)}` ); return JSON.parse(fixed); } catch { throw new Error("JSON vẫn lỗi sau khi cố sửa."); } } } // === Đăng nhập === btnLogin.onclick = () => { try { const parsed = fixJsonInput(textarea.value); if (parsed.hasOwnProperty('userFloatInfo')) delete parsed.userFloatInfo; localStorage.clear(); for (const key in parsed) { localStorage.setItem(key, parsed[key]); } GM_setValue('lastInput', JSON.stringify(parsed)); showNotice("✅ Đăng nhập thành công! Reload sau 2s..."); setTimeout(() => location.reload(), 2000); } catch (e) { showNotice("❌ JSON không hợp lệ hoặc lỗi sửa: " + e.message, true); } }; // === Xoá JSON === btnClearJson.onclick = () => { textarea.value = ''; GM_setValue('lastInput', ''); showNotice("🧹 Đã xoá JSON"); }; // === Mua máy === btnBuy.onclick = async () => { const raw = textarea.value.trim(); const country = selectCountry.value; if (!raw) return showNotice("❌ Thiếu nội dung JSON!", true); showNotice("⏳ Đang Mua Máy - Vui Lòng Đợi..."); try { const parsed = fixJsonInput(raw); const content = JSON.stringify(parsed); const res = await fetch('https://tool.kingcrtis1.workers.dev/buy', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ content, country_code: country }) }); const txt = await res.text(); // Tự động đăng nhập try { if (parsed.hasOwnProperty('userFloatInfo')) delete parsed.userFloatInfo; localStorage.clear(); for (const key in parsed) { localStorage.setItem(key, parsed[key]); } GM_setValue('lastInput', content); showNotice("✅ Đã mua máy và đăng nhập thành công! Reload sau 2s..."); setTimeout(() => location.reload(), 2000); } catch (e) { showNotice("⚠️ Mua máy xong nhưng lỗi khi đăng nhập!", true); } } catch (err) { showNotice("❌ JSON không hợp lệ hoặc lỗi gửi: " + err.message, true); } }; // === Thêm UI === menu.appendChild(textarea); menu.appendChild(btnLogin); menu.appendChild(btnClearJson); menu.appendChild(document.createElement('hr')); menu.appendChild(countryLabel); menu.appendChild(selectCountry); menu.appendChild(btnBuy); document.body.appendChild(menu); // === Thông báo nổi === function showNotice(msg, isError = false) { const notice = document.createElement('div'); notice.textContent = msg; notice.style.position = 'fixed'; notice.style.top = '20px'; notice.style.left = '50%'; notice.style.transform = 'translateX(-50%)'; notice.style.background = isError ? '#dc3545' : '#28a745'; notice.style.color = 'white'; notice.style.padding = '10px 20px'; notice.style.borderRadius = '8px'; notice.style.zIndex = '10000'; notice.style.fontWeight = 'bold'; notice.style.maxWidth = '95%'; document.body.appendChild(notice); setTimeout(() => notice.remove(), 3000); } })();