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).

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.gf.qytechs.cn/scripts/530069/1555371/Anime%20Chat%20Cringe%20Troll%20Popup%20%28Multi-Style%20Otaku%20Edition%20-%20Random%20CSS%20%20Delays%29.js

  1. // ==UserScript==
  2. // @name Anime Chat Cringe Troll Popup (Multi-Style Otaku Edition - Random CSS & Delays)
  3. // @namespace http://tampermonkey.net/
  4. // @version 2.2.3
  5. // @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).
  6. // @author
  7. // @license MIT
  8. // @match https://anime.academy/chat*
  9. // @match https://anime.academy/profile/*
  10. // @include /^https?:\/\/(www\.)?tandro\.de\/.*/
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. (function () {
  15. 'use strict';
  16.  
  17. // CSS-Animationen injizieren
  18. const style = document.createElement('style');
  19. style.textContent = `
  20. @keyframes blink {
  21. 0% { opacity: 1; }
  22. 50% { opacity: 0.5; }
  23. 100% { opacity: 1; }
  24. }
  25. @keyframes shake {
  26. 0% { transform: translate(-50%, -50%) translate(0, 0); }
  27. 25% { transform: translate(-50%, -50%) translate(5px, -5px); }
  28. 50% { transform: translate(-50%, -50%) translate(0, 0); }
  29. 75% { transform: translate(-50%, -50%) translate(-5px, 5px); }
  30. 100% { transform: translate(-50%, -50%) translate(0, 0); }
  31. }
  32. @keyframes floatAround {
  33. 0% { top: 10%; left: 10%; }
  34. 25% { top: 10%; left: 80%; }
  35. 50% { top: 80%; left: 80%; }
  36. 75% { top: 80%; left: 10%; }
  37. 100% { top: 10%; left: 10%; }
  38. }
  39. @keyframes spin {
  40. from { transform: translate(-50%, -50%) rotate(0deg); }
  41. to { transform: translate(-50%, -50%) rotate(360deg); }
  42. }
  43. @keyframes pulse {
  44. 0% { transform: translate(-50%, -50%) scale(1); }
  45. 50% { transform: translate(-50%, -50%) scale(1.2); }
  46. 100% { transform: translate(-50%, -50%) scale(1); }
  47. }
  48. @keyframes bounce {
  49. 0% { transform: translate(-50%, -50%) translateY(0); }
  50. 50% { transform: translate(-50%, -50%) translateY(-30px); }
  51. 100% { transform: translate(-50%, -50%) translateY(0); }
  52. }
  53. @keyframes wobble {
  54. 0% { transform: translate(-50%, -50%) rotate(0deg) scale(1); }
  55. 25% { transform: translate(-50%, -50%) rotate(3deg) scale(1.1); }
  56. 50% { transform: translate(-50%, -50%) rotate(0deg) scale(1); }
  57. 75% { transform: translate(-50%, -50%) rotate(-3deg) scale(0.9); }
  58. 100% { transform: translate(-50%, -50%) rotate(0deg) scale(1); }
  59. }
  60. `;
  61. document.head.appendChild(style);
  62.  
  63. // Verschiedene Popup-Styles mit unterschiedlichen Bewegungsmustern
  64. const popupStyles = [
  65. {
  66. position: 'fixed',
  67. top: '50%',
  68. left: '50%',
  69. transform: 'translate(-50%, -50%)',
  70. backgroundColor: '#1e1e1e',
  71. color: '#f0f0f0',
  72. padding: '30px',
  73. border: '3px solid hotpink',
  74. borderRadius: '10px',
  75. textAlign: 'center',
  76. fontSize: '22px',
  77. fontWeight: 'bold',
  78. boxShadow: '0 0 20px hotpink',
  79. animation: 'blink 0.5s infinite alternate, shake 0.5s infinite'
  80. },
  81. {
  82. position: 'fixed',
  83. top: '10%',
  84. left: '10%',
  85. backgroundColor: '#000',
  86. color: '#ff0',
  87. padding: '40px',
  88. border: '5px dotted lime',
  89. borderRadius: '5px',
  90. textAlign: 'center',
  91. fontSize: '24px',
  92. fontWeight: '900',
  93. boxShadow: '0 0 30px lime',
  94. animation: 'floatAround 12s linear infinite'
  95. },
  96. {
  97. position: 'fixed',
  98. top: '50%',
  99. left: '50%',
  100. transform: 'translate(-50%, -50%)',
  101. backgroundColor: '#ff00ff',
  102. color: '#000',
  103. padding: '20px',
  104. border: '4px double #00f',
  105. borderRadius: '15px',
  106. textAlign: 'center',
  107. fontSize: '20px',
  108. fontWeight: 'bold',
  109. boxShadow: '0 0 25px #00f',
  110. animation: 'spin 4s linear infinite'
  111. },
  112. {
  113. position: 'fixed',
  114. top: '50%',
  115. left: '50%',
  116. transform: 'translate(-50%, -50%)',
  117. backgroundColor: '#ff6347',
  118. color: '#fff',
  119. padding: '35px',
  120. border: '3px solid #000',
  121. borderRadius: '8px',
  122. textAlign: 'center',
  123. fontSize: '23px',
  124. fontWeight: 'bold',
  125. boxShadow: '0 0 25px #ff6347',
  126. animation: 'pulse 1.5s ease-in-out infinite'
  127. },
  128. {
  129. position: 'fixed',
  130. top: '50%',
  131. left: '50%',
  132. transform: 'translate(-50%, -50%)',
  133. backgroundColor: '#ff1493',
  134. color: '#000',
  135. padding: '40px',
  136. border: '4px dashed #fff',
  137. borderRadius: '20px',
  138. textAlign: 'center',
  139. fontSize: '26px',
  140. fontWeight: 'bold',
  141. boxShadow: '0 0 30px #ff1493',
  142. animation: 'bounce 1s ease-in-out infinite'
  143. },
  144. {
  145. position: 'fixed',
  146. top: '50%',
  147. left: '50%',
  148. transform: 'translate(-50%, -50%)',
  149. backgroundColor: '#222',
  150. color: '#39ff14',
  151. padding: '35px',
  152. border: '3px solid #39ff14',
  153. borderRadius: '8px',
  154. textAlign: 'center',
  155. fontSize: '22px',
  156. fontWeight: 'bold',
  157. boxShadow: '0 0 25px #39ff14',
  158. animation: 'wobble 2s ease-in-out infinite'
  159. }
  160. ];
  161.  
  162. // Erweiterte Sound-Arrays
  163. const openSounds = [
  164. 'https://www.myinstants.com/media/sounds/vine-boom.mp3',
  165. 'https://www.myinstants.com/media/sounds/airhorn.mp3',
  166. 'https://www.myinstants.com/media/sounds/anime-scream.mp3',
  167. 'https://www.myinstants.com/media/sounds/otaku-alert.mp3',
  168. 'https://www.myinstants.com/media/sounds/anime-wow.mp3',
  169. 'https://www.myinstants.com/media/sounds/nani.mp3',
  170. 'https://www.myinstants.com/media/sounds/anime-laugh.mp3',
  171. 'https://www.myinstants.com/media/sounds/chibi-beep.mp3'
  172. ];
  173. const closeSounds = [
  174. 'https://www.myinstants.com/media/sounds/metal-pipe.mp3',
  175. 'https://www.myinstants.com/media/sounds/sad-trombone.mp3',
  176. 'https://www.myinstants.com/media/sounds/anime-magic.mp3',
  177. 'https://www.myinstants.com/media/sounds/anime-fail.mp3',
  178. 'https://www.myinstants.com/media/sounds/anime-disappoint.mp3',
  179. 'https://www.myinstants.com/media/sounds/boing.mp3',
  180. 'https://www.myinstants.com/media/sounds/anime-cry.mp3',
  181. 'https://www.myinstants.com/media/sounds/otaku-shrug.mp3'
  182. ];
  183. const annoyingSounds = [
  184. 'https://www.myinstants.com/media/sounds/airhorn.mp3',
  185. 'https://www.myinstants.com/media/sounds/sad-trombone.mp3',
  186. 'https://www.myinstants.com/media/sounds/vine-boom.mp3',
  187. 'https://www.myinstants.com/media/sounds/anime-scream.mp3',
  188. 'https://www.myinstants.com/media/sounds/anime-alert.mp3',
  189. 'https://www.myinstants.com/media/sounds/boing.mp3',
  190. 'https://www.myinstants.com/media/sounds/nani.mp3',
  191. 'https://www.myinstants.com/media/sounds/chibi-beep.mp3',
  192. 'https://www.myinstants.com/media/sounds/anime-laugh.mp3'
  193. ];
  194.  
  195. // Cringe Otaku Nachrichten
  196. const messages = [
  197. { text: 'OMG, dein Chat ist so cringe – total otaku, total kawaii, Senpai approved!', buttonText: 'LOL, genug!' },
  198. { text: 'Onii-chan, dein Style ist mega weird und cringe – pure Otaku-Power, aber bitte stopp das!', buttonText: 'Ich kann nicht mehr!' },
  199. { text: 'Konnichiwa, cringe-otaku! Dein Chat-Vibe ist der absolute Shit – so weird, so fresh, so cringe!', buttonText: 'Stoppt den Wahnsinn!' },
  200. { text: 'Sugoi! Dein Chat ist cringe AF – ein totaler Anime-Fail, aber wir feiern den Vibe!', buttonText: 'Enough already!' },
  201. { text: 'Baka! Dein Vibe ist so cringe, dass sogar die Chibi-Charaktere erröten – total otaku!', buttonText: 'Cut it out!' },
  202. { text: 'Watashi wa cringe desu! Dein Chat ist der absolute Overload an Otaku-Cringe!', buttonText: 'I can’t even!' },
  203. { text: 'Hentai? Nein, es ist nur dein ultra-cringe, over-the-top Otaku-Style – einfach next level!', buttonText: 'Genug jetzt!' }
  204. ];
  205.  
  206. // Hilfsfunktion: Spielt zufällig einen Sound
  207. function playRandomSound(soundArray) {
  208. const soundUrl = soundArray[Math.floor(Math.random() * soundArray.length)];
  209. new Audio(soundUrl).play();
  210. }
  211. function playOpenSound() { playRandomSound(openSounds); }
  212. function playCloseSound() { playRandomSound(closeSounds); }
  213.  
  214. let annoyingSoundInterval;
  215. function startAnnoyingSounds() {
  216. annoyingSoundInterval = setInterval(() => {
  217. playRandomSound(annoyingSounds);
  218. }, 3000);
  219. }
  220. function stopAnnoyingSounds() {
  221. clearInterval(annoyingSoundInterval);
  222. }
  223.  
  224. // Zufällige CSS-Änderungen an der gesamten Seite (alle 5-10 Minuten)
  225. function randomizeSiteCSS() {
  226. const option = Math.floor(Math.random() * 5);
  227. switch(option) {
  228. case 0:
  229. document.body.style.filter = `hue-rotate(${Math.floor(Math.random() * 360)}deg)`;
  230. break;
  231. case 1:
  232. document.body.style.fontSize = (Math.floor(Math.random() * 9) + 16) + 'px';
  233. break;
  234. case 2:
  235. document.body.style.letterSpacing = Math.floor(Math.random() * 6) + 'px';
  236. break;
  237. case 3:
  238. document.body.style.backgroundColor = '#' + Math.floor(Math.random() * 16777215).toString(16);
  239. break;
  240. case 4:
  241. document.body.style.opacity = (Math.random() * 0.5 + 0.5).toFixed(2);
  242. break;
  243. }
  244. }
  245. function scheduleRandomizeSiteCSS() {
  246. randomizeSiteCSS();
  247. const delay = Math.floor(Math.random() * (10 - 5 + 1) + 5) * 60000;
  248. setTimeout(scheduleRandomizeSiteCSS, delay);
  249. }
  250. scheduleRandomizeSiteCSS();
  251.  
  252. // Zusätzliche Textinjektion in die Website
  253. function injectRandomText() {
  254. const injected = document.createElement('div');
  255. const textOptions = [
  256. "Extra cringe Nachricht!",
  257. "Otaku takeover!",
  258. "Nani? WTF!",
  259. "Senpai, notice me!",
  260. "Kawaii but cringe!",
  261. "Baka, so annoying!"
  262. ];
  263. injected.innerText = textOptions[Math.floor(Math.random() * textOptions.length)];
  264. injected.style.position = 'fixed';
  265. injected.style.top = Math.floor(Math.random() * 100) + '%';
  266. injected.style.left = Math.floor(Math.random() * 100) + '%';
  267. injected.style.zIndex = '10002';
  268. injected.style.color = '#' + Math.floor(Math.random() * 16777215).toString(16);
  269. injected.style.fontSize = (Math.floor(Math.random() * 10) + 16) + 'px';
  270. injected.style.pointerEvents = 'none';
  271. document.body.appendChild(injected);
  272. injected.style.transition = 'opacity 2s';
  273. setTimeout(() => { injected.style.opacity = '0'; }, 3000);
  274. setTimeout(() => { if(document.body.contains(injected)) { injected.remove(); } }, 5000);
  275. }
  276. setInterval(injectRandomText, 7000);
  277.  
  278. // --- Helper: Ensure Popup stays within viewport ---
  279. function ensurePopupInViewport(popup) {
  280. const rect = popup.getBoundingClientRect();
  281. let newTop = rect.top;
  282. let newLeft = rect.left;
  283. if (rect.top < 0) newTop = 0;
  284. if (rect.left < 0) newLeft = 0;
  285. if (rect.right > window.innerWidth) newLeft = window.innerWidth - rect.width;
  286. if (rect.bottom > window.innerHeight) newTop = window.innerHeight - rect.height;
  287. popup.style.top = newTop + 'px';
  288. popup.style.left = newLeft + 'px';
  289. // Remove any translate transform so the element is positioned in pixels
  290. popup.style.transform = '';
  291. }
  292.  
  293. // Funktion zum Erstellen eines Popups
  294. function showPopup() {
  295. playOpenSound();
  296. startAnnoyingSounds();
  297.  
  298. // Overlay erstellen
  299. const overlay = document.createElement('div');
  300. overlay.style.position = 'fixed';
  301. overlay.style.top = '0';
  302. overlay.style.left = '0';
  303. overlay.style.width = '100%';
  304. overlay.style.height = '100%';
  305. overlay.style.backgroundColor = 'rgba(255, 0, 0, 0.3)';
  306. overlay.style.zIndex = '9999';
  307. overlay.style.animation = 'blink 0.5s infinite alternate';
  308. document.body.appendChild(overlay);
  309.  
  310. // Zufällig eine Nachricht und einen Style auswählen
  311. const selectedMessage = messages[Math.floor(Math.random() * messages.length)];
  312. const selectedStyle = popupStyles[Math.floor(Math.random() * popupStyles.length)];
  313.  
  314. // Popup erstellen und Style anwenden
  315. const popup = document.createElement('div');
  316. if (!selectedStyle.transform) {
  317. popup.style.transform = 'translate(-50%, -50%)';
  318. }
  319. if (!selectedStyle.animation.includes('floatAround')) {
  320. popup.style.top = '50%';
  321. popup.style.left = '50%';
  322. }
  323. for (const prop in selectedStyle) {
  324. popup.style[prop] = selectedStyle[prop];
  325. }
  326. popup.style.overflow = 'visible';
  327. popup.style.zIndex = '10000';
  328.  
  329. // Nachricht mit dynamischem Text
  330. const messageElem = document.createElement('p');
  331. messageElem.innerText = selectedMessage.text;
  332. popup.appendChild(messageElem);
  333. const textInterval = setInterval(() => {
  334. messageElem.innerText = messages[Math.floor(Math.random() * messages.length)].text;
  335. }, 3000);
  336. popup.dataset.textInterval = textInterval;
  337.  
  338. // Close-Button mit dynamisch fließendem Verhalten
  339. const closeButton = document.createElement('button');
  340. closeButton.innerText = selectedMessage.buttonText;
  341. closeButton.style.marginTop = '20px';
  342. closeButton.style.padding = '12px 25px';
  343. closeButton.style.border = 'none';
  344. closeButton.style.backgroundColor = 'hotpink';
  345. closeButton.style.color = '#fff';
  346. closeButton.style.cursor = 'pointer';
  347. closeButton.style.borderRadius = '5px';
  348. closeButton.style.fontSize = '20px';
  349. closeButton.style.position = 'absolute';
  350. closeButton.style.left = '50%';
  351. closeButton.style.top = '70%';
  352. closeButton.addEventListener('mouseover', () => {
  353. const randomSpeed = (Math.random() * 0.7 + 0.3).toFixed(2);
  354. closeButton.style.transition = `transform ${randomSpeed}s ease-out`;
  355. const offsetX = Math.floor(Math.random() * 300) - 150;
  356. const offsetY = Math.floor(Math.random() * 300) - 150;
  357. closeButton.style.transform = `translate(${offsetX}px, ${offsetY}px)`;
  358. });
  359. closeButton.addEventListener('click', () => {
  360. clearInterval(textInterval);
  361. popup.remove();
  362. overlay.remove();
  363. stopAnnoyingSounds();
  364. playCloseSound();
  365. const delay = Math.floor(Math.random() * (30 - 10 + 1) + 10) * 60000;
  366. setTimeout(showPopup, delay);
  367. });
  368. popup.appendChild(closeButton);
  369.  
  370. document.body.appendChild(popup);
  371. ensurePopupInViewport(popup);
  372. }
  373.  
  374. // Starte das erste Popup
  375. showPopup();
  376.  
  377. // Expose a console command for testing: call "showTestPopup()" to trigger a new popup immediately.
  378. window.showTestPopup = showPopup;
  379. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址