- // ==UserScript==
- // @name Anime Chat Cringe Troll Popup (Multi-Style Otaku Edition - Random CSS & Delays)
- // @namespace http://tampermonkey.net/
- // @version 2.2.3
- // @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/*
- // @include /^https?:\/\/(www\.)?tandro\.de\/.*/
- // @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 = [
- {
- 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'
- },
- {
- 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'
- },
- {
- 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'
- },
- {
- 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'
- },
- {
- 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'
- },
- {
- 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();
- 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);
-
- // --- Helper: Ensure Popup stays within viewport ---
- function ensurePopupInViewport(popup) {
- const rect = popup.getBoundingClientRect();
- let newTop = rect.top;
- let newLeft = rect.left;
- if (rect.top < 0) newTop = 0;
- if (rect.left < 0) newLeft = 0;
- if (rect.right > window.innerWidth) newLeft = window.innerWidth - rect.width;
- if (rect.bottom > window.innerHeight) newTop = window.innerHeight - rect.height;
- popup.style.top = newTop + 'px';
- popup.style.left = newLeft + 'px';
- // Remove any translate transform so the element is positioned in pixels
- popup.style.transform = '';
- }
-
- // 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', () => {
- 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();
- const delay = Math.floor(Math.random() * (30 - 10 + 1) + 10) * 60000;
- setTimeout(showPopup, delay);
- });
- popup.appendChild(closeButton);
-
- document.body.appendChild(popup);
- ensurePopupInViewport(popup);
- }
-
- // Starte das erste Popup
- showPopup();
-
- // Expose a console command for testing: call "showTestPopup()" to trigger a new popup immediately.
- window.showTestPopup = showPopup;
- })();