Anime Chat Cringe Troll Popup (Multi-Style Otaku Edition - Random CSS & Delays)

Zeigt im Anime-Chat ein einzelnes, nerviges Popup an – mit dynamischen Textwechseln, diversen Popup-Styles, einem flüssig fliehenden Close-Button, zufälligen CSS-Änderungen an der gesamten Website und verzögerten Popup-/Sound-Intervallen (10-30 Minuten) sowie CSS-Änderungen (5-10 Minuten).

当前为 2025-03-17 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Anime Chat Cringe Troll Popup (Multi-Style Otaku Edition - Random CSS & Delays)
// @namespace    http://tampermonkey.net/
// @version      2.2.1
// @description  Zeigt im Anime-Chat ein einzelnes, nerviges Popup an – mit dynamischen Textwechseln, diversen Popup-Styles, einem flüssig fliehenden Close-Button, zufälligen CSS-Änderungen an der gesamten Website und verzögerten Popup-/Sound-Intervallen (10-30 Minuten) sowie CSS-Änderungen (5-10 Minuten).
// @author
// @license      MIT
// @match        https://anime.academy/chat*
// @match        https://anime.academy/profile/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    // CSS-Animationen injizieren
    const style = document.createElement('style');
    style.textContent = `
    @keyframes blink {
        0% { opacity: 1; }
        50% { opacity: 0.5; }
        100% { opacity: 1; }
    }
    @keyframes shake {
        0% { transform: translate(-50%, -50%) translate(0, 0); }
        25% { transform: translate(-50%, -50%) translate(5px, -5px); }
        50% { transform: translate(-50%, -50%) translate(0, 0); }
        75% { transform: translate(-50%, -50%) translate(-5px, 5px); }
        100% { transform: translate(-50%, -50%) translate(0, 0); }
    }
    @keyframes floatAround {
        0% { top: 10%; left: 10%; }
        25% { top: 10%; left: 80%; }
        50% { top: 80%; left: 80%; }
        75% { top: 80%; left: 10%; }
        100% { top: 10%; left: 10%; }
    }
    @keyframes spin {
        from { transform: translate(-50%, -50%) rotate(0deg); }
        to { transform: translate(-50%, -50%) rotate(360deg); }
    }
    @keyframes pulse {
        0% { transform: translate(-50%, -50%) scale(1); }
        50% { transform: translate(-50%, -50%) scale(1.2); }
        100% { transform: translate(-50%, -50%) scale(1); }
    }
    @keyframes bounce {
        0% { transform: translate(-50%, -50%) translateY(0); }
        50% { transform: translate(-50%, -50%) translateY(-30px); }
        100% { transform: translate(-50%, -50%) translateY(0); }
    }
    @keyframes wobble {
        0% { transform: translate(-50%, -50%) rotate(0deg) scale(1); }
        25% { transform: translate(-50%, -50%) rotate(3deg) scale(1.1); }
        50% { transform: translate(-50%, -50%) rotate(0deg) scale(1); }
        75% { transform: translate(-50%, -50%) rotate(-3deg) scale(0.9); }
        100% { transform: translate(-50%, -50%) rotate(0deg) scale(1); }
    }
    `;
    document.head.appendChild(style);

    // Verschiedene Popup-Styles mit unterschiedlichen Bewegungsmustern
    const popupStyles = [
        // Style 1: Klassisch zentriert, blink & shake
        {
            position: 'fixed',
            top: '50%',
            left: '50%',
            transform: 'translate(-50%, -50%)',
            backgroundColor: '#1e1e1e',
            color: '#f0f0f0',
            padding: '30px',
            border: '3px solid hotpink',
            borderRadius: '10px',
            textAlign: 'center',
            fontSize: '22px',
            fontWeight: 'bold',
            boxShadow: '0 0 20px hotpink',
            animation: 'blink 0.5s infinite alternate, shake 0.5s infinite'
        },
        // Style 2: Float Around – bewegt sich über den gesamten Bildschirm
        {
            position: 'fixed',
            top: '10%',
            left: '10%',
            backgroundColor: '#000',
            color: '#ff0',
            padding: '40px',
            border: '5px dotted lime',
            borderRadius: '5px',
            textAlign: 'center',
            fontSize: '24px',
            fontWeight: '900',
            boxShadow: '0 0 30px lime',
            animation: 'floatAround 12s linear infinite'
        },
        // Style 3: Spin – dreht sich kontinuierlich
        {
            position: 'fixed',
            top: '50%',
            left: '50%',
            transform: 'translate(-50%, -50%)',
            backgroundColor: '#ff00ff',
            color: '#000',
            padding: '20px',
            border: '4px double #00f',
            borderRadius: '15px',
            textAlign: 'center',
            fontSize: '20px',
            fontWeight: 'bold',
            boxShadow: '0 0 25px #00f',
            animation: 'spin 4s linear infinite'
        },
        // Style 4: Pulse – pulsiert (wächst und schrumpft)
        {
            position: 'fixed',
            top: '50%',
            left: '50%',
            transform: 'translate(-50%, -50%)',
            backgroundColor: '#ff6347',
            color: '#fff',
            padding: '35px',
            border: '3px solid #000',
            borderRadius: '8px',
            textAlign: 'center',
            fontSize: '23px',
            fontWeight: 'bold',
            boxShadow: '0 0 25px #ff6347',
            animation: 'pulse 1.5s ease-in-out infinite'
        },
        // Style 5: Bounce – hüpft vertikal
        {
            position: 'fixed',
            top: '50%',
            left: '50%',
            transform: 'translate(-50%, -50%)',
            backgroundColor: '#ff1493',
            color: '#000',
            padding: '40px',
            border: '4px dashed #fff',
            borderRadius: '20px',
            textAlign: 'center',
            fontSize: '26px',
            fontWeight: 'bold',
            boxShadow: '0 0 30px #ff1493',
            animation: 'bounce 1s ease-in-out infinite'
        },
        // Style 6: Wobble – wackelt und rotiert leicht
        {
            position: 'fixed',
            top: '50%',
            left: '50%',
            transform: 'translate(-50%, -50%)',
            backgroundColor: '#222',
            color: '#39ff14',
            padding: '35px',
            border: '3px solid #39ff14',
            borderRadius: '8px',
            textAlign: 'center',
            fontSize: '22px',
            fontWeight: 'bold',
            boxShadow: '0 0 25px #39ff14',
            animation: 'wobble 2s ease-in-out infinite'
        }
    ];

    // Erweiterte Sound-Arrays
    const openSounds = [
        'https://www.myinstants.com/media/sounds/vine-boom.mp3',
        'https://www.myinstants.com/media/sounds/airhorn.mp3',
        'https://www.myinstants.com/media/sounds/anime-scream.mp3',
        'https://www.myinstants.com/media/sounds/otaku-alert.mp3',
        'https://www.myinstants.com/media/sounds/anime-wow.mp3',
        'https://www.myinstants.com/media/sounds/nani.mp3',
        'https://www.myinstants.com/media/sounds/anime-laugh.mp3',
        'https://www.myinstants.com/media/sounds/chibi-beep.mp3'
    ];
    const closeSounds = [
        'https://www.myinstants.com/media/sounds/metal-pipe.mp3',
        'https://www.myinstants.com/media/sounds/sad-trombone.mp3',
        'https://www.myinstants.com/media/sounds/anime-magic.mp3',
        'https://www.myinstants.com/media/sounds/anime-fail.mp3',
        'https://www.myinstants.com/media/sounds/anime-disappoint.mp3',
        'https://www.myinstants.com/media/sounds/boing.mp3',
        'https://www.myinstants.com/media/sounds/anime-cry.mp3',
        'https://www.myinstants.com/media/sounds/otaku-shrug.mp3'
    ];
    const annoyingSounds = [
        'https://www.myinstants.com/media/sounds/airhorn.mp3',
        'https://www.myinstants.com/media/sounds/sad-trombone.mp3',
        'https://www.myinstants.com/media/sounds/vine-boom.mp3',
        'https://www.myinstants.com/media/sounds/anime-scream.mp3',
        'https://www.myinstants.com/media/sounds/anime-alert.mp3',
        'https://www.myinstants.com/media/sounds/boing.mp3',
        'https://www.myinstants.com/media/sounds/nani.mp3',
        'https://www.myinstants.com/media/sounds/chibi-beep.mp3',
        'https://www.myinstants.com/media/sounds/anime-laugh.mp3'
    ];

    // Cringe Otaku Nachrichten
    const messages = [
        { text: 'OMG, dein Chat ist so cringe – total otaku, total kawaii, Senpai approved!', buttonText: 'LOL, genug!' },
        { text: 'Onii-chan, dein Style ist mega weird und cringe – pure Otaku-Power, aber bitte stopp das!', buttonText: 'Ich kann nicht mehr!' },
        { text: 'Konnichiwa, cringe-otaku! Dein Chat-Vibe ist der absolute Shit – so weird, so fresh, so cringe!', buttonText: 'Stoppt den Wahnsinn!' },
        { text: 'Sugoi! Dein Chat ist cringe AF – ein totaler Anime-Fail, aber wir feiern den Vibe!', buttonText: 'Enough already!' },
        { text: 'Baka! Dein Vibe ist so cringe, dass sogar die Chibi-Charaktere erröten – total otaku!', buttonText: 'Cut it out!' },
        { text: 'Watashi wa cringe desu! Dein Chat ist der absolute Overload an Otaku-Cringe!', buttonText: 'I can’t even!' },
        { text: 'Hentai? Nein, es ist nur dein ultra-cringe, over-the-top Otaku-Style – einfach next level!', buttonText: 'Genug jetzt!' }
    ];

    // Hilfsfunktion: Spielt zufällig einen Sound
    function playRandomSound(soundArray) {
        const soundUrl = soundArray[Math.floor(Math.random() * soundArray.length)];
        new Audio(soundUrl).play();
    }
    function playOpenSound() { playRandomSound(openSounds); }
    function playCloseSound() { playRandomSound(closeSounds); }

    let annoyingSoundInterval;
    function startAnnoyingSounds() {
        annoyingSoundInterval = setInterval(() => {
            playRandomSound(annoyingSounds);
        }, 3000);
    }
    function stopAnnoyingSounds() {
        clearInterval(annoyingSoundInterval);
    }

    // Zufällige CSS-Änderungen an der gesamten Seite (alle 5-10 Minuten)
    function randomizeSiteCSS() {
        const option = Math.floor(Math.random() * 5);
        switch(option) {
            case 0:
                document.body.style.filter = `hue-rotate(${Math.floor(Math.random() * 360)}deg)`;
                break;
            case 1:
                document.body.style.fontSize = (Math.floor(Math.random() * 9) + 16) + 'px';
                break;
            case 2:
                document.body.style.letterSpacing = Math.floor(Math.random() * 6) + 'px';
                break;
            case 3:
                document.body.style.backgroundColor = '#' + Math.floor(Math.random() * 16777215).toString(16);
                break;
            case 4:
                document.body.style.opacity = (Math.random() * 0.5 + 0.5).toFixed(2);
                break;
        }
    }
    function scheduleRandomizeSiteCSS() {
        randomizeSiteCSS();
        // Zufälliger Delay zwischen 5 und 10 Minuten (in Millisekunden)
        const delay = Math.floor(Math.random() * (10 - 5 + 1) + 5) * 60000;
        setTimeout(scheduleRandomizeSiteCSS, delay);
    }
    scheduleRandomizeSiteCSS();

    // Zusätzliche Textinjektion in die Website
    function injectRandomText() {
        const injected = document.createElement('div');
        const textOptions = [
            "Extra cringe Nachricht!",
            "Otaku takeover!",
            "Nani? WTF!",
            "Senpai, notice me!",
            "Kawaii but cringe!",
            "Baka, so annoying!"
        ];
        injected.innerText = textOptions[Math.floor(Math.random() * textOptions.length)];
        injected.style.position = 'fixed';
        injected.style.top = Math.floor(Math.random() * 100) + '%';
        injected.style.left = Math.floor(Math.random() * 100) + '%';
        injected.style.zIndex = '10002';
        injected.style.color = '#' + Math.floor(Math.random() * 16777215).toString(16);
        injected.style.fontSize = (Math.floor(Math.random() * 10) + 16) + 'px';
        injected.style.pointerEvents = 'none';
        document.body.appendChild(injected);
        injected.style.transition = 'opacity 2s';
        setTimeout(() => { injected.style.opacity = '0'; }, 3000);
        setTimeout(() => { if(document.body.contains(injected)) { injected.remove(); } }, 5000);
    }
    setInterval(injectRandomText, 7000);

    // Funktion zum Erstellen eines Popups
    function showPopup() {
        playOpenSound();
        startAnnoyingSounds();

        // Overlay erstellen
        const overlay = document.createElement('div');
        overlay.style.position = 'fixed';
        overlay.style.top = '0';
        overlay.style.left = '0';
        overlay.style.width = '100%';
        overlay.style.height = '100%';
        overlay.style.backgroundColor = 'rgba(255, 0, 0, 0.3)';
        overlay.style.zIndex = '9999';
        overlay.style.animation = 'blink 0.5s infinite alternate';
        document.body.appendChild(overlay);

        // Zufällig eine Nachricht und einen Style auswählen
        const selectedMessage = messages[Math.floor(Math.random() * messages.length)];
        const selectedStyle = popupStyles[Math.floor(Math.random() * popupStyles.length)];

        // Popup erstellen und Style anwenden
        const popup = document.createElement('div');
        if (!selectedStyle.transform) {
            popup.style.transform = 'translate(-50%, -50%)';
        }
        if (!selectedStyle.animation.includes('floatAround')) {
            popup.style.top = '50%';
            popup.style.left = '50%';
        }
        for (const prop in selectedStyle) {
            popup.style[prop] = selectedStyle[prop];
        }
        popup.style.overflow = 'visible';
        popup.style.zIndex = '10000';

        // Nachricht mit dynamischem Text
        const messageElem = document.createElement('p');
        messageElem.innerText = selectedMessage.text;
        popup.appendChild(messageElem);
        const textInterval = setInterval(() => {
            messageElem.innerText = messages[Math.floor(Math.random() * messages.length)].text;
        }, 3000);
        popup.dataset.textInterval = textInterval;

        // Close-Button mit dynamisch fließendem Verhalten
        const closeButton = document.createElement('button');
        closeButton.innerText = selectedMessage.buttonText;
        closeButton.style.marginTop = '20px';
        closeButton.style.padding = '12px 25px';
        closeButton.style.border = 'none';
        closeButton.style.backgroundColor = 'hotpink';
        closeButton.style.color = '#fff';
        closeButton.style.cursor = 'pointer';
        closeButton.style.borderRadius = '5px';
        closeButton.style.fontSize = '20px';
        closeButton.style.position = 'absolute';
        closeButton.style.left = '50%';
        closeButton.style.top = '70%';
        closeButton.addEventListener('mouseover', () => {
            // Dynamisch fließende Bewegung mit zufälliger Geschwindigkeit zwischen 0.3 und 1.0 Sekunden
            const randomSpeed = (Math.random() * 0.7 + 0.3).toFixed(2);
            closeButton.style.transition = `transform ${randomSpeed}s ease-out`;
            const offsetX = Math.floor(Math.random() * 300) - 150;
            const offsetY = Math.floor(Math.random() * 300) - 150;
            closeButton.style.transform = `translate(${offsetX}px, ${offsetY}px)`;
        });
        closeButton.addEventListener('click', () => {
            clearInterval(textInterval);
            popup.remove();
            overlay.remove();
            stopAnnoyingSounds();
            playCloseSound();
            // Nach einem zufälligen Delay zwischen 10 und 30 Minuten wird ein neues Popup erzeugt
            const delay = Math.floor(Math.random() * (30 - 10 + 1) + 10) * 60000;
            setTimeout(showPopup, delay);
        });
        popup.appendChild(closeButton);

        document.body.appendChild(popup);
    }

    // Starte das erste Popup
    showPopup();
})();