TriX Verification Library

Handles the user verification, CAPTCHA, and pre-loading sequence for TriX Executor.

Script này sẽ không được không được cài đặt trực tiếp. Nó là một thư viện cho các script khác để bao gồm các chỉ thị meta // @require https://update.greasyfork.org/scripts/542307/1622891/TriX%20Verification%20Library.js

// ==UserScript==
// @name        TriX Verification Library
// @namespace   https://github.com/YourUsername/TriX-Executor
// @version     1.1.1
// @description Handles the user verification and pre-loading sequence for TriX Executor.
// @author      You
// @license     MIT
// ==/UserScript==

const TriX_Verification = (function() {
    'use strict';
    let _GM; 
    const VerificationSystem={
        validUsers:{'795354688':"Dr. Yes",'000000000':"Painsel"},currentUserID:null,
        showModal(e){let t=document.getElementById("trix-verify-modal");t||(_GM.GM_addStyle("@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&family=Fira+Code&display=swap');#trix-verify-modal{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(26,27,38,.9);z-index:2000000;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(5px);font-family:'Poppins',sans-serif}.trix-verify-container{background:#2a2d3d;padding:30px;border-radius:10px;text-align:center;color:#e0e0e0;box-shadow:0 8px 32px rgba(0,0,0,.4);width:400px}.trix-verify-container h3{margin-top:0;color:#00bfff}.trix-captcha-code{background:#1e202b;padding:10px 20px;border-radius:5px;font-family:'Fira Code',monospace;font-size:24px;letter-spacing:10px;margin:20px 0;user-select:none}.trix-verify-input{padding:10px;font-size:16px;width:90%;text-align:center;border-radius:5px;border:1px solid #353952;background:#1e202b;color:#e0e0e0;margin-bottom:20px}.trix-verify-btn{padding:10px 20px;border:none;border-radius:5px;cursor:pointer;background:#00bfff;color:#fff;font-weight:700;transition:background-color .2s}.trix-verify-btn:hover{background-color:#00a0d8}.trix-verify-btn.secondary{background-color:#414868}.trix-verify-btn.secondary:hover{background-color:#565f89}.trix-remember-me{display:flex;justify-content:center;align-items:center;gap:8px;font-size:14px;color:#8c8c8c;margin-bottom:20px}"),t=document.createElement("div"),t.id="trix-verify-modal",document.body.appendChild(t)),t.innerHTML=`<div class="trix-verify-container">${e}</div>`},
        async run(gmFunctions) {
            _GM = gmFunctions;
            const rememberedId = await _GM.GM_getValue('trix_verified_user_id', null);
            const rememberedTs = await _GM.GM_getValue('trix_verified_timestamp', 0);
            if (rememberedId && (Date.now() - rememberedTs < 864e5) && this.validUsers[rememberedId]) {
                console.log(`[TriX] Welcome back, ${this.validUsers[rememberedId]}. Verification skipped.`);
                this.onVerificationSuccess(); return;
            }
            this.showInitialChoice();
        },
        showInitialChoice(){this.showModal(`<h3>TriX Executor Access</h3><p>Please log in or sign up as a guest.</p><input type="text" class="trix-verify-input" id="trix-id-input" placeholder="Enter User ID"><div class="trix-remember-me"><input type="checkbox" id="trix-remember-checkbox"><label for="trix-remember-checkbox">Remember me for 24 hours</label></div><button class="trix-verify-btn" id="trix-id-submit">Login with ID</button><p style="margin: 20px 0 10px;">or</p><button class="trix-verify-btn secondary" id="trix-guest-signup">Sign Up as Guest</button>`);document.getElementById("trix-id-submit").addEventListener("click",()=>this.handleLogin()),document.getElementById("trix-id-input").addEventListener("keydown",e=>{"Enter"===e.key&&this.handleLogin()}),document.getElementById("trix-guest-signup").addEventListener("click",()=>this.handleGuestSignup())},
        async handleLogin(){const e=document.getElementById("trix-id-input"),t=e.value.trim();if(this.validUsers[t]){this.currentUserID=t;const i=document.getElementById("trix-remember-checkbox").checked;i&&(await _GM.GM_setValue("trix_verified_user_id",t),await _GM.GM_setValue("trix_verified_timestamp",Date.now())),this.showTabUserConfirm()}else e.style.border="1px solid #f7768e",e.value="Invalid ID",setTimeout(()=>{e.style.border="1px solid #353952",e.value=""},1500)},
        async handleGuestSignup(){const e=`GUEST-${Date.now().toString(36).slice(-4).toUpperCase()}${Math.random().toString(36).slice(-2).toUpperCase()}`;await _GM.GM_setValue("trix_guest_user_id",e),this.currentUserID=e,this.validUsers[e]="Guest",this.showModal(`<h3>Guest ID Created!</h3><p>Your permanent Guest ID is:</p><div class="trix-captcha-code" style="cursor:text;" title="Save this ID!">${e}</div><p>Please save this ID. You will be automatically logged in on this browser.</p>`),setTimeout(()=>this.showTabUserConfirm(),4e3)},
        showTabUserConfirm(){const e=document.querySelector("#input0").value.trim(),t=this.validUsers[this.currentUserID]||"User";this.showModal(`<h3>Confirm Tab User</h3><p>Welcome, ${t}.<br>Please confirm your current in-game username to proceed.</p><input type="text" class="trix-verify-input" id="trix-user-confirm" placeholder="Current in-game username"><button class="trix-verify-btn" id="trix-user-submit">Confirm User</button>`);const i=document.getElementById("trix-user-confirm"),s=document.getElementById("trix-user-submit");i.focus();const o=()=>{i.value.trim()===e?this.runCaptcha():(i.style.border="1px solid #f7768e",i.value="Username does not match tab",setTimeout(()=>{i.style.border="1px solid #353952",i.value=""},2e3))};s.addEventListener("click",o),i.addEventListener("keydown",e=>{"Enter"===e.key&&o()})},
        async runCaptcha(){const e=this.validUsers[this.currentUserID],t=Math.random().toString(36).substring(2,8).toUpperCase();this.showModal(`<h3>Identity Confirmed</h3><p>Please complete the final CAPTCHA.</p><div class="trix-captcha-code">${t}</div><input type="text" class="trix-verify-input" id="trix-captcha-input" maxlength="6" autocomplete="off"><button class="trix-verify-btn" id="trix-captcha-submit">Continue</button>`);const i=document.getElementById("trix-captcha-input"),s=document.getElementById("trix-captcha-submit");i.focus();const o=()=>{i.value.toUpperCase()===t?this.runLoader():i.style.border="1px solid #f7768e"};s.addEventListener("click",o),i.addEventListener("keydown",e=>{"Enter"===e.key&&o()})},
        runLoader(){this.showModal(`<h3>Finalizing...</h3><p>Preparing the TriX environment.</p>`),setTimeout(()=>this.onVerificationSuccess(),1500)},
        onVerificationSuccess(){
            document.getElementById("trix-verify-modal")?.remove();
            const username = document.querySelector("#input0").value.trim() || "Guest_temp";
            console.log(`[TriX] Verification successful. Initializing core for user: ${username}`);
            TriX_Core.init(username, _GM);
        }
    };
    return VerificationSystem;
})();