Discord customizer

Discord style

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Discord customizer
// @namespace    http://tampermonkey.net/
// @version      1.0.0
// @description  Discord style
// @author       _PeDeCoca
// @match        *://*.discord.com/*
// @license      @Mit
// ==/UserScript==

(function() {
    'use strict';

    // Estilos atualizados
    const customStyle = document.createElement('style');
    customStyle.innerHTML = `
        /* Cores personalizadas */
        :root {
            --background-primary: #350048;
            --background-secondary: #1a0024;
            --background-tertiary: #0d0012;
            --text-normal: #ffffff;
        }

        /* Background simples */
        .app-2rEoOp {
            background: linear-gradient(45deg, #12c2e9, #c471ed, #f64f59);
            background-size: 400% 400%;
            animation: gradientBG 15s ease infinite;
        }

        @keyframes gradientBG {
            0% { background-position: 0% 50%; }
            50% { background-position: 100% 50%; }
            100% { background-position: 0% 50%; }
        }

        /* Efeito avatar novo e otimizado */
        .avatar_f9f2ca, .avatar-f9f2ca {
            position: relative !important;
            z-index: 2 !important;
            border-radius: 50% !important;
            overflow: visible !important;
            box-shadow:
                0 0 10px #00ffff,
                0 0 20px #00ffff,
                0 0 30px #00ffff,
                inset 0 0 15px rgba(0, 255, 255, 0.5) !important;
            animation: avatarGlow 3s infinite !important;
        }

        /* Wrapper do avatar */
        .clickable_f9f2ca {
            position: relative !important;
            z-index: 2 !important;
            transform-style: preserve-3d !important;
            transition: transform 0.3s !important;
        }

        /* Efeito de borda gradiente */
        .clickable_f9f2ca::before {
            content: '';
            position: absolute;
            top: -3px;
            left: -3px;
            right: -3px;
            bottom: -3px;
            background: linear-gradient(45deg, #ff00ff, #00ffff);
            border-radius: 50%;
            z-index: -1;
            animation: borderRotate 3s linear infinite;
            opacity: 0.8;
        }

        /* Efeito de brilho */
        .clickable_f9f2ca::after {
            content: '';
            position: absolute;
            inset: -5px;
            background: radial-gradient(circle at center,
                rgba(255,255,255,0.8) 0%,
                rgba(255,255,255,0) 70%);
            border-radius: 50%;
            z-index: -1;
            opacity: 0;
            transition: opacity 0.3s;
        }

        /* Efeitos hover */
        .clickable_f9f2ca:hover {
            transform: scale(1.1) rotate(5deg);
        }

        .clickable_f9f2ca:hover::before {
            animation: borderRotate 1s linear infinite;
        }

        .clickable_f9f2ca:hover::after {
            opacity: 0.5;
        }

        /* Animações */
        @keyframes borderRotate {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }

        @keyframes pulseGlow {
            0% { filter: drop-shadow(0 0 5px #ff00ff); }
            50% { filter: drop-shadow(0 0 15px #00ffff); }
            100% { filter: drop-shadow(0 0 5px #ff00ff); }
        }

        /* Ajustes do chat */
        .chat-3bRxxu {
            background: rgba(0, 0, 0, 0.5);
            backdrop-filter: blur(10px);
        }

        /* Container de partículas ajustado */
        #particles-js {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 0;
            pointer-events: none;
            opacity: 0.5;
        }

        /* Efeitos épicos para o avatar */
        .avatar_f9f2ca, .avatar-f9f2ca {
            position: relative !important;
            z-index: 2 !important;
            border-radius: 50% !important;
            overflow: visible !important;
            box-shadow:
                0 0 10px #00ffff,
                0 0 20px #00ffff,
                0 0 30px #00ffff,
                inset 0 0 15px rgba(0, 255, 255, 0.5) !important;
            animation: avatarGlow 3s infinite !important;
        }

        /* Container do avatar com matrix effect */
        .clickable_f9f2ca {
            position: relative !important;
            z-index: 2 !important;
            transform-style: preserve-3d !important;
            transition: all 0.3s !important;
        }

        /* Efeito matrix no hover */
        .clickable_f9f2ca::before {
            content: '';
            position: absolute;
            inset: -5px;
            background:
                linear-gradient(90deg,
                    rgba(0, 255, 0, 0.5),
                    rgba(0, 255, 255, 0.5)
                ),
                repeating-linear-gradient(
                    0deg,
                    transparent,
                    transparent 2px,
                    rgba(0, 255, 0, 0.2) 2px,
                    rgba(0, 255, 0, 0.2) 4px
                );
            border-radius: 50%;
            z-index: -1;
            opacity: 0;
            transition: all 0.3s;
            animation: matrixFlow 20s linear infinite;
        }

        /* Anel de energia */
        .clickable_f9f2ca::after {
            content: '';
            position: absolute;
            inset: -8px;
            border: 2px solid transparent;
            border-radius: 50%;
            background: linear-gradient(45deg, #ff00ff, #00ffff, #00ff00, #ff00ff) border-box;
            -webkit-mask:
                linear-gradient(#fff 0 0) padding-box,
                linear-gradient(#fff 0 0);
            -webkit-mask-composite: xor;
            mask-composite: exclude;
            opacity: 0.8;
            animation: spinRing 3s linear infinite;
        }

        /* Efeitos hover aprimorados */
        .clickable_f9f2ca:hover {
            transform: scale(1.2) rotate(5deg);
        }

        .clickable_f9f2ca:hover::before {
            opacity: 1;
        }

        .clickable_f9f2ca:hover::after {
            inset: -12px;
            opacity: 1;
        }

        /* Nomes com efeito neon */
        .username-2b1r56,
        .username-3_PJ5r,
        .title-338goq {
            color: #00ffff !important;
            text-shadow:
                0 0 5px #00ffff,
                0 0 10px #00ffff,
                0 0 20px #00ffff !important;
            animation: textPulse 2s infinite;
        }

        /* Animações novas */
        @keyframes avatarGlow {
            0%, 100% { filter: brightness(1) hue-rotate(0deg); }
            50% { filter: brightness(1.5) hue-rotate(180deg); }
        }

        @keyframes matrixFlow {
            0% { background-position: 0 0; }
            100% { background-position: 0 1000px; }
        }

        @keyframes spinRing {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }

        @keyframes textPulse {
            0%, 100% { opacity: 1; text-shadow: 0 0 10px #00ffff; }
            50% { opacity: 0.8; text-shadow: 0 0 20px #00ffff; }
        }

        /* Efeito de energia ao clicar */
        .clickable_f9f2ca:active::after {
            animation: energyBurst 0.5s ease-out;
        }

        @keyframes energyBurst {
            0% { transform: scale(1); opacity: 1; }
            50% { transform: scale(1.5); opacity: 0.5; }
            100% { transform: scale(1); opacity: 0.8; }
        }
    `;

    // Adiciona canvas para Matrix
    function createMatrixBackground() {
        const canvas = document.createElement('canvas');
        canvas.id = 'matrix-bg';
        document.body.appendChild(canvas);

        const ctx = canvas.getContext('2d');
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;

        const matrix = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789@#$%^&*()*&^%";
        const fontSize = 10;
        const columns = canvas.width/fontSize;
        const drops = [];

        for(let x = 0; x < columns; x++)
            drops[x] = 1;

        function drawMatrix() {
            ctx.fillStyle = 'rgba(0, 0, 0, 0.04)';
            ctx.fillRect(0, 0, canvas.width, canvas.height);
            ctx.fillStyle = '#0F0';
            ctx.font = fontSize + 'px monospace';

            for(let i = 0; i < drops.length; i++) {
                const text = matrix[Math.floor(Math.random()*matrix.length)];
                ctx.fillText(text, i*fontSize, drops[i]*fontSize);
                if(drops[i]*fontSize > canvas.height && Math.random() > 0.975)
                    drops[i] = 0;
                drops[i]++;
            }
        }

        setInterval(drawMatrix, 33);
    }

    // Sistema de partículas
    function createParticleSystem() {
        const particlesContainer = document.createElement('div');
        particlesContainer.id = 'particles-js';
        document.body.appendChild(particlesContainer);

        const particles = [];
        const mouse = { x: null, y: null };

        class Particle {
            constructor(x, y) {
                this.x = x;
                this.y = y;
                this.size = Math.random() * 3 + 1; // Partículas menores
                this.baseX = x;
                this.baseY = y;
                this.density = Math.random() * 30 + 1;
                // Adiciona velocidade própria para movimento autônomo
                this.speedX = (Math.random() * 1 - 0.5) * 0.5; // Velocidade reduzida
                this.speedY = (Math.random() * 1 - 0.5) * 0.5; // Velocidade reduzida
                // Adiciona cor aleatória em tons de azul/roxo
                this.color = `rgba(${114 + Math.random() * 30}, ${137 + Math.random() * 30}, ${218 + Math.random() * 37}, ${0.6 + Math.random() * 0.4})`;
            }

            draw(ctx) {
                ctx.fillStyle = this.color;
                ctx.beginPath();
                ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
                ctx.closePath();
                ctx.fill();
            }

            update() {
                // Movimento autônomo
                this.x += this.speedX;
                this.y += this.speedY;

                // Verificar limites da tela
                if (this.x < 0 || this.x > window.innerWidth) this.speedX *= -1;
                if (this.y < 0 || this.y > window.innerHeight) this.speedY *= -1;

                // Interação com o mouse
                let dx = mouse.x - this.x;
                let dy = mouse.y - this.y;
                let distance = Math.sqrt(dx * dx + dy * dy);

                if (distance < 100) {
                    let forceDirectionX = dx / distance;
                    let forceDirectionY = dy / distance;
                    let force = (100 - distance) / 100;
                    let directionX = forceDirectionX * force * this.density;
                    let directionY = forceDirectionY * force * this.density;
                    this.x -= directionX * 0.5; // Reduzido o efeito do mouse
                    this.y -= directionY * 0.5;
                }

                // Efeito de ondulação suave
                this.x += Math.sin(this.y/50) * 0.3;
                this.y += Math.cos(this.x/50) * 0.3;
            }
        }

        const canvas = document.createElement('canvas');
        canvas.style = 'position: fixed; top: 0; left: 0; pointer-events: none;';
        document.body.appendChild(canvas);
        const ctx = canvas.getContext('2d');

        function initParticles() {
            canvas.width = window.innerWidth;
            canvas.height = window.innerHeight;
            particles.length = 0;

            // Reduzido o número de partículas
            for (let i = 0; i < 50; i++) { // Mudado de 150 para 50 partículas
                const x = Math.random() * canvas.width;
                const y = Math.random() * canvas.height;
                particles.push(new Particle(x, y));
            }
        }

        function animate() {
            ctx.clearRect(0, 0, canvas.width, canvas.height);

            for (const particle of particles) {
                particle.update();
                particle.draw(ctx);
            }

            // Desenha linhas entre partículas próximas com gradiente
            for (let i = 0; i < particles.length; i++) {
                for (let j = i; j < particles.length; j++) {
                    const dx = particles[i].x - particles[j].x;
                    const dy = particles[i].y - particles[j].y;
                    const distance = Math.sqrt(dx * dx + dy * dy);

                    if (distance < 100) {
                        const gradient = ctx.createLinearGradient(
                            particles[i].x, particles[i].y,
                            particles[j].x, particles[j].y
                        );
                        gradient.addColorStop(0, particles[i].color);
                        gradient.addColorStop(1, particles[j].color);

                        ctx.beginPath();
                        ctx.strokeStyle = gradient;
                        ctx.lineWidth = 0.5;
                        ctx.moveTo(particles[i].x, particles[i].y);
                        ctx.lineTo(particles[j].x, particles[j].y);
                        ctx.stroke();
                    }
                }
            }

            requestAnimationFrame(animate);
        }

        window.addEventListener('mousemove', (e) => {
            mouse.x = e.x;
            mouse.y = e.y;
        });

        window.addEventListener('resize', initParticles);
        initParticles();
        animate();
    }

    // Função para garantir que os efeitos do avatar sejam aplicados
    function ensureAvatarEffects() {
        const avatarSelectors = [
            '.avatar_f9f2ca',
            '.clickable_f9f2ca',
            '.avatar-f9f2ca'
        ];

        const avatars = document.querySelectorAll(avatarSelectors.join(','));
        avatars.forEach(avatar => {
            if (!avatar.dataset.enhanced) {
                avatar.dataset.enhanced = 'true';

                // Força o reflow do CSS
                requestAnimationFrame(() => {
                    avatar.style.position = 'relative';
                    avatar.style.zIndex = '2';
                    avatar.style.display = 'none';
                    avatar.offsetHeight;
                    avatar.style.display = '';
                });
            }
        });
    }

    // Adiciona observer específico para avatares
    function setupAvatarObserver() {
        const avatarObserver = new MutationObserver((mutations) => {
            mutations.forEach(mutation => {
                if (mutation.addedNodes.length) {
                    ensureAvatarEffects();
                }
            });
        });

        avatarObserver.observe(document.body, {
            childList: true,
            subtree: true
        });
    }

    // Função de inicialização atualizada
    function applyCustomizations() {
        document.head.appendChild(customStyle);
        createParticleSystem();
        ensureAvatarEffects();
        setupAvatarObserver();

        // Aplicação mais frequente dos efeitos
        setInterval(ensureAvatarEffects, 1000);

        console.log('Discord customizado com efeitos visuais aplicados!');
    }

    // Inicia quando o DOM estiver pronto
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', applyCustomizations);
    } else {
        applyCustomizations();
    }
})();