Space Theme for StumbleChat (Stealth)

Space theme with anti-detection measures

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         Space Theme for StumbleChat (Stealth)
// @namespace    http://tampermonkey.net/
// @version      3.0
// @description  Space theme with anti-detection measures
// @author       You
// @match        https://stumblechat.com/room/*
// @grant        GM_addStyle
// @grant        GM_xmlhttpRequest
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    // Randomize function and variable names to avoid detection
    const randomString = (length = 10) => {
        const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        let result = '';
        for (let i = 0; i < length; i++) {
            result += chars.charAt(Math.floor(Math.random() * chars.length));
        }
        return result;
    };

    // Create a random namespace for our functions
    const namespace = randomString(8);
    window[namespace] = {};

    // Obfuscate the CSS injection
    const injectStyles = function() {
        try {
            const styleElement = document.createElement('style');
            styleElement.id = randomString(12);
            styleElement.textContent = `
                /* Space Theme CSS */
                body {
                    background: linear-gradient(135deg, #0a0a2e 0%, #16213e 50%, #0f3460 100%) !important;
                    color: #e0e0e0 !important;
                }

                #room {
                    background: rgba(10, 10, 46, 0.8) !important;
                    border-radius: 10px !important;
                    box-shadow: 0 0 20px rgba(138, 43, 226, 0.3) !important;
                }

                #userlist {
                    background: rgba(15, 52, 96, 0.7) !important;
                    border-right: 1px solid rgba(138, 43, 226, 0.3) !important;
                }

                .room-name {
                    color: #a78bfa !important;
                    text-shadow: 0 0 10px rgba(167, 139, 250, 0.5) !important;
                }

                #chat-wrapper {
                    background: rgba(15, 52, 96, 0.7) !important;
                    border-left: 1px solid rgba(138, 43, 226, 0.3) !important;
                }

                #chat-content {
                    background: rgba(10, 10, 46, 0.5) !important;
                    border-radius: 8px !important;
                    margin: 5px !important;
                    padding: 10px !important;
                }

                #textarea {
                    background: rgba(10, 10, 46, 0.7) !important;
                    border: 1px solid rgba(138, 43, 226, 0.5) !important;
                    color: #e0e0e0 !important;
                    border-radius: 5px !important;
                }

                #videos {
                    background: rgba(10, 10, 46, 0.5) !important;
                }

                .header {
                    background: rgba(15, 52, 96, 0.7) !important;
                    border-bottom: 1px solid rgba(138, 43, 226, 0.3) !important;
                }

                button, .dropbtn {
                    background: linear-gradient(135deg, #3a1c71, #d76d77, #ffaf7b) !important;
                    border: none !important;
                    color: white !important;
                    border-radius: 5px !important;
                    transition: all 0.3s ease !important;
                }

                button:hover, .dropbtn:hover {
                    background: linear-gradient(135deg, #d76d77, #ffaf7b, #3a1c71) !important;
                    box-shadow: 0 0 10px rgba(255, 175, 123, 0.5) !important;
                }

                .list li {
                    background: rgba(15, 52, 96, 0.5) !important;
                    border-radius: 5px !important;
                    margin: 3px 0 !important;
                    padding: 5px !important;
                    transition: all 0.3s ease !important;
                }

                .list li:hover {
                    background: rgba(58, 28, 113, 0.5) !important;
                    transform: translateX(5px) !important;
                }

                #chat-content > div {
                    background: rgba(10, 10, 46, 0.3) !important;
                    border-radius: 5px !important;
                    padding: 5px !important;
                    margin: 3px 0 !important;
                    border-left: 3px solid #8a2be2 !important;
                }

                .user-menu, .video-menu {
                    background: linear-gradient(135deg, #16213e, #0f3460) !important;
                    border: 1px solid rgba(138, 43, 226, 0.5) !important;
                    border-radius: 10px !important;
                    box-shadow: 0 0 15px rgba(138, 43, 226, 0.3) !important;
                }

                .user-menu-item, .video-menu-item {
                    border-bottom: 1px solid rgba(138, 43, 226, 0.2) !important;
                }

                .user-menu-item:hover, .video-menu-item:hover {
                    background: rgba(58, 28, 113, 0.3) !important;
                }

                .on-white-scroll::-webkit-scrollbar {
                    width: 8px !important;
                }

                .on-white-scroll::-webkit-scrollbar-track {
                    background: rgba(10, 10, 46, 0.3) !important;
                    border-radius: 4px !important;
                }

                .on-white-scroll::-webkit-scrollbar-thumb {
                    background: linear-gradient(135deg, #8a2be2, #ffaf7b) !important;
                    border-radius: 4px !important;
                }
            `;

            // Hide the style element to avoid detection
            styleElement.style.display = 'none';

            // Add the style to head in a stealthy way
            const head = document.head || document.getElementsByTagName('head')[0];
            if (head) {
                head.appendChild(styleElement);
            }

            return styleElement.id;
        } catch (e) {
            console.error('Style injection failed:', e);
            return null;
        }
    };

    // Create starfield with stealth techniques
    window[namespace].createStarfield = function() {
        try {
            const containerId = randomString(10);
            const starsContainer = document.createElement('div');
            starsContainer.id = containerId;
            starsContainer.className = 'stars-container';
            starsContainer.style.position = 'fixed';
            starsContainer.style.top = '0';
            starsContainer.style.left = '0';
            starsContainer.style.width = '100%';
            starsContainer.style.height = '100%';
            starsContainer.style.pointerEvents = 'none';
            starsContainer.style.zIndex = '-1';

            // Create stars
            for (let i = 0; i < 200; i++) {
                const star = document.createElement('div');
                star.className = 'star';
                star.style.position = 'absolute';
                star.style.backgroundColor = 'white';
                star.style.borderRadius = '50%';
                star.style.left = Math.random() * 100 + '%';
                star.style.top = Math.random() * 100 + '%';

                const size = Math.random() * 3;
                star.style.width = size + 'px';
                star.style.height = size + 'px';
                star.style.animation = `twinkle ${3 + Math.random() * 2}s infinite`;
                star.style.animationDelay = Math.random() * 3 + 's';

                starsContainer.appendChild(star);
            }

            // Create planets
            for (let i = 0; i < 3; i++) {
                const planet = document.createElement('div');
                planet.className = 'planet';
                planet.style.position = 'absolute';
                planet.style.borderRadius = '50%';
                planet.style.opacity = '0.7';
                planet.style.left = Math.random() * 100 + '%';
                planet.style.top = Math.random() * 100 + '%';

                const size = 30 + Math.random() * 50;
                planet.style.width = size + 'px';
                planet.style.height = size + 'px';

                const colors = [
                    'linear-gradient(135deg, #ff6b6b, #4ecdc4)',
                    'linear-gradient(135deg, #8a2be2, #ffaf7b)',
                    'linear-gradient(135deg, #ff9a00, #ff00ff)'
                ];
                planet.style.background = colors[Math.floor(Math.random() * colors.length)];
                planet.style.animation = `float ${15 + Math.random() * 10}s infinite linear`;

                starsContainer.appendChild(planet);
            }

            // Add animation keyframes if not already added
            if (!document.getElementById('space-animations')) {
                const animStyle = document.createElement('style');
                animStyle.id = 'space-animations';
                animStyle.textContent = `
                    @keyframes twinkle {
                        0% { opacity: 0.3; }
                        50% { opacity: 1; }
                        100% { opacity: 0.3; }
                    }
                    @keyframes float {
                        0% { transform: translateY(0) rotate(0deg); }
                        50% { transform: translateY(-20px) rotate(180deg); }
                        100% { transform: translateY(0) rotate(360deg); }
                    }
                `;
                document.head.appendChild(animStyle);
            }

            document.body.appendChild(starsContainer);
            return containerId;
        } catch (e) {
            console.error('Starfield creation failed:', e);
            return null;
        }
    };

    // Add space emoji button with stealth
    window[namespace].addSpaceEmojis = function() {
        try {
            const textarea = document.getElementById('textarea');
            if (!textarea) return false;

            const emojiButtonId = randomString(10);
            const emojiButton = document.createElement('button');
            emojiButton.id = emojiButtonId;
            emojiButton.textContent = '🪐';
            emojiButton.style.position = 'absolute';
            emojiButton.style.right = '10px';
            emojiButton.style.top = '5px';
            emojiButton.style.background = 'transparent';
            emojiButton.style.border = 'none';
            emojiButton.style.fontSize = '20px';
            emojiButton.style.cursor = 'pointer';
            emojiButton.style.zIndex = '10';

            const spaceEmojis = ['🚀', '🪐', '🌌', '⭐', '🌟', '🌠', '🌙', '🛸', '👽', '🛰️', '🌍', '🌎', '🌏', '☄️'];

            emojiButton.addEventListener('click', function() {
                const randomEmoji = spaceEmojis[Math.floor(Math.random() * spaceEmojis.length)];
                textarea.value += randomEmoji;
                textarea.focus();
            });

            textarea.parentElement.style.position = 'relative';
            textarea.parentElement.appendChild(emojiButton);
            return emojiButtonId;
        } catch (e) {
            console.error('Space emoji button creation failed:', e);
            return false;
        }
    };

    // Main initialization function with stealth
    window[namespace].initTheme = function() {
        try {
            // Inject styles
            const styleId = injectStyles();

            // Create starfield
            const starsId = window[namespace].createStarfield();

            // Add space emojis after a delay
            setTimeout(function() {
                window[namespace].addSpaceEmojis();
            }, 1000);

            // Store references for potential cleanup
            window[namespace].elements = {
                style: styleId,
                stars: starsId
            };

            return true;
        } catch (e) {
            console.error('Theme initialization failed:', e);
            return false;
        }
    };

    // Override common detection methods
    const originalQuerySelector = document.querySelector;
    document.querySelector = function(selector) {
        if (selector && selector.includes('userscript') && selector.includes('tampermonkey')) {
            return null;
        }
        return originalQuerySelector.call(this, selector);
    };

    // Override console methods to hide our traces
    const originalLog = console.log;
    console.log = function() {
        if (arguments[0] && typeof arguments[0] === 'string' &&
            (arguments[0].includes('tampermonkey') || arguments[0].includes('userscript'))) {
            return;
        }
        return originalLog.apply(console, arguments);
    };

    // Initialize with a delay to avoid detection
    setTimeout(function() {
        if (document.readyState === 'complete' || document.readyState === 'interactive') {
            window[namespace].initTheme();
        } else {
            window.addEventListener('load', function() {
                window[namespace].initTheme();
            });
        }
    }, Math.random() * 1000 + 500);
})();