您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Unpauses videos, adds cool effects, dynamic tones, for fun interactions!
// ==UserScript== // @name Auto Unpause Acellus // @namespace https://gf.qytechs.cn/en/users/1291009 // @version 3.3 // @description Unpauses videos, adds cool effects, dynamic tones, for fun interactions! // @author BadOrBest // @license MIT // @icon https://www.google.com/s2/favicons?sz=64&domain=acellus.com // @match https://admin192c.acellus.com/student/* // @grant none // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM.registerMenuCommand // @run-at document-end // ==/UserScript== (function() { 'use strict'; let isTabFocused = true; let shouldTogglePlayer = true; let tabChangeCount = parseInt(localStorage.getItem('tabChangeCount')) || 0; let selectedTone = localStorage.getItem('selectedTone') || 'Studious'; // Default to Studious tone let isMonitoring = true; // Auto unpause is enabled by default let isVideoMode = false; // Detect if a video is on the page let lastMode = 'video, .plyr'; // Keep track of the last mode // Video Tones const videoTones = { "Excited": ["Hey there! Buckle up, your video is kicking off! 🎉", "Fantastic to see you! Let’s dive into this exciting video! 📽️", "Woohoo! You’re back! Your video is all set to play! 🍿", "Let’s get this show on the road! Your video is live! 🎬", "Oh wow! Great to have you! Your video is rolling! 🎥", "Yay! Time for your favorite video to shine! 🎊", "Welcome back! Your video is about to blow your mind! 🥳", "Surprise! Your video is here and ready to entertain! 🎡", "Boom! We’re jumping into the fun with this video! 🔥", "Awesome news! Your video is back on screen! 🎤", "Look at that! Your video is resuming! Get comfy! 📺", "Oh wow! You’re back just in time for the best part! 🎇", "Let’s go! The video is live again, and it’s epic! 🎦", "Your video is on! Get ready for an amazing experience! 🎞️", "Here we go! It’s time for your video to take the spotlight! 🎢", "We’re back! Ready for some thrilling video moments? 🎊", "Can’t wait! Your video is rolling and it’s going to be great! 🎠", "Get hyped! Your video is about to start! 📸", "It’s showtime! Let’s enjoy this fantastic video! 🎆", "Hey again! Here’s your favorite video back in action! 🍿", "Video time! Let’s enjoy this amazing content together! 🎤"], "Depressed": ["Ugh... you’re back... the video is still droning on... 😞", "Well, here we are again... the video continues... 📼", "Sigh... welcome back... the same video is playing again... 😔", "Oh... you’re back... I guess we’ll just watch this video... 😐", "Still here? Fine, let’s just get through this video... 😕", "Let’s just power through... 🎦", "You’re still watching this? Video’s on... 😩", "Why are we still doing this... 😓", "Here we go... just another moment of this video... 🥱", "Do we really have to do this? Just let it play... 😐", "Great... more video... just what I needed... 😑", "The video’s back... isn’t that exciting? 😔", "We’re still doing this? Fine, let’s watch... 😒", "Sigh... here comes the video... again... 😶", "Why does this feel like a loop? Playing video... 😔", "Oh no... not this again... 😩", "Guess it’s time for more of this... 😕", "Can we just end this? Nope? Fine... 😐", "Still here? Video’s on... 😕", "Not again... why are we doing this? 😩", "This video feels endless... 😣"], "Angry": ["Welcome back! The video’s still on, can you believe it? 😡", "Ugh, let’s just get this over with already... 😤", "Seriously? We’re still watching this? 😠", "Why is this still happening? The video is on... 😤", "Unbelievable! The same video again? Really? 😡", "Get ready... here comes the never-ending video... 😠", "This is so frustrating! Still stuck watching this? 😤", "What a waste of time! The video is still on! 🤬", "Can we just stop this video already? 😠", "Not again! Why is this video still here? 😡", "Why is this dragging on? Just play something new! 😤", "Great, more of this nonsense... 😡", "Why is this happening again? Just play something different! 🤬", "I’m done with this! Just play the video... 😤", "Here we go again! The same video... what a joke! 😠", "Oh, joy... more of this video... 😡", "Are you serious? This video is still playing? 😤", "Why do we have to keep watching? Enough already! 😠", "Another round of this? Ugh... just let it play! 😤", "Here we go again... video still on! 😡", "Why do we have to keep doing this? Just end it already! 😤"], "Studious": ["Welcome back! The educational video is now playing! 📚", "Great to see you! Your study video is here and ready! 🎓", "Hey! The learning video is rolling now! 📝", "Let’s dive into knowledge! Your video is playing! 🎥", "Back to studying! The video is live and waiting! 📖", "Good to have you back! Let’s get some learning done! 🔍", "Ready to learn something new? Your study video is playing! 🎉", "Welcome back! Time to focus on the study video! 📘", "Here we go! The educational content is rolling! 🎬", "Fantastic! Your study video is live now! 📚", "Awesome! Time to expand your mind! 🎓", "Let’s get back to it! The video is all about learning! 📖", "Great to see you! Ready for some knowledge? 🎥", "Let’s dive in! Your educational video is on! 📝", "Here we go! The study video is starting! 🎓", "Back to learning! Your video is playing now! 📚", "Awesome! Time for some serious study! 📘", "Let’s keep the momentum going! The video is rolling! 🎬", "Time to study! Your educational video is live! 🔍", "Great! The study session is now playing! 🎉", "Let’s jump into the video! Knowledge awaits! 📖"] }; // Task (Question) Tones const taskTones = { "Excited": ["Let’s smash through these questions! 🎉", "Awesome! Ready to crush these tasks? 💪", "Let’s tackle this list like champs! 🚀", "Hooray! Time to dive into these challenges! 🎊", "Get pumped! We’re about to nail these questions! 🎈", "Fantastic! Let’s make progress together! 🌟", "Yay! It’s time to shine on these tasks! 🌈", "Let’s power through these questions! 🔥", "Super stoked to tackle this task list! ⚡", "Ready to own these questions? Let’s go! 💥", "Let’s get fired up for some problem-solving! 🎇", "Woohoo! Questions don’t stand a chance! 🏆", "Excited to tackle this head-on! 📈", "Let’s roll! Time for some serious task-busting! 🎢", "Yippee! We’re about to get things done! 📅", "Let’s make this happen! Tasks await! 🎤", "Can’t wait to dive into these questions! 🌊", "Let’s get to work! These tasks won’t do themselves! 🔨", "Here we go! Time to knock out these problems! ⏳", "Thrilled to be tackling these challenges! 🏋️♂️", "Ready, set, go! Let’s conquer this task list! 🥇"], "Depressed": ["Sigh... more questions to slog through... 😞", "Well, I guess we should get these questions done... 😔", "Ugh... here comes another round of questions... 😩", "Guess it’s time to plow through these tasks... 😐", "Why do these questions feel endless? 😓", "Just what I needed... more questions... 😒", "Can we please finish these already? 😔", "Here we go again... more questions await... 😞", "Sigh... let’s get this over with... 😶", "Do we really have to do this? 😔", "Another question? Sigh... 😔", "This feels like a never-ending cycle... 😩", "Great... just what I wanted... more questions... 😑", "Let’s just get through this... slowly... 😞", "Can we wrap this up? 😕", "More questions? Just my luck... 😔", "It’s like these tasks multiply... 😣", "Guess I’m stuck with more questions... 😩", "Why does this feel like a chore? 😕", "Ugh... can this just be done? 😔", "Sigh... trudging through these tasks... 😩"], "Angry": ["Ugh, these questions again? Seriously? 😡", "Why are we still doing these questions? 😠", "This is ridiculous! More questions? 😤", "Great, just what I wanted... more tasks... 😡", "Why won’t this end? Ugh! 😠", "Not this again! Why is it never-ending? 😤", "Can we just be done with this? 😡", "Seriously? More of this nonsense? 😤", "This is infuriating! Can we finish? 😡", "I can’t believe we’re still on this... 😠", "Another round? This is getting old! 😤", "Why do we have to keep going? 😡", "Ugh! More questions? Just let me out! 😠", "What a waste of time! Can we stop? 😤", "This is so frustrating! Just let it end! 😡", "Do we have to keep dragging this out? 😠", "Why won’t this just finish already? 😤", "More questions? This is a joke! 😡", "Not again! Let’s just get it over with! 😠", "This is beyond annoying! Enough! 😤"], "Studious": ["Let’s dive into these questions! 📚", "Great! Time to tackle these problems! 📝", "Ready to focus? Let’s solve these! 🎓", "Let’s get serious about these tasks! 🔍", "Time to hit the books with these questions! 📖", "Fantastic! Let’s make some progress! 📊", "Here we go! Time to learn and grow! 🎓", "Let’s sharpen our minds with these tasks! ✏️", "Let’s power through this study session! 📚", "Ready to conquer these educational challenges? 🎓", "Let’s buckle down and focus! 🧠", "Great! Time for some serious studying! 📘", "Let’s unlock knowledge with these questions! 🔑", "Here’s to productive learning ahead! 📚", "Ready for some brain exercise? Let’s go! 🧠", "Let’s keep our minds sharp with this study! 📖", "Fantastic! Let’s learn together! 🎓", "Time to expand our horizons! Let’s dive in! 🌍", "Let’s keep the focus strong! Knowledge awaits! 📚", "Ready to tackle this study session? Let’s do it! 🎓", "Let’s ace these questions together! 🏅"] }; // Easter egg logic function handleEgg() { const eggs = [ "Dev log #01: I just realized my last commit message was 'oops.' That’s professional, right? 😅", "Dev log #02: Why do I keep forgetting semicolons? It’s like they’re playing hide and seek! 🤔", "Dev log #03: I tried to explain my code to my plant. It didn’t seem to understand. 🌱", "Dev log #04: Random Thought: If my code was a person, it would definitely be a drama queen! 🎭", "Dev log #05: I once accidentally pushed to the wrong branch. Who knew ‘master’ was so sensitive? 😳", "Dev log #06: Can we just agree that debugging is 90% coffee and 10% actual coding? ☕️", "Dev log #07: My code runs perfectly... until I hit 'run.' Then it’s a horror show. 🎬", "Dev log #08: Why do they call it 'rubber duck debugging'? I’m just here for the quacks! 🦆", "Dev log #09: I think my keyboard has a mind of its own. It definitely adds extra characters on purpose! ⌨️", "Dev log #10: I’m convinced my IDE has a vendetta against me. It just loves to crash! 💥", "Dev log #11: Every time I fix a bug, two more appear. It’s like a coding Hydra! 🐉", "Dev log #12: If I had a dollar for every time I misspelled a variable name, I could afford better coffee. 💸", "Dev log #13: Pro Tip: If it works, don’t touch it. That’s how you end up with a ‘works on my machine’ situation. 🛠️", "Dev log #14: My code is like a pizza: sometimes it’s just a little cheesy! 🍕", "Dev log #15: Every time I refactor, I end up with more spaghetti than code. 🍝", "Dev log #16: Is it just me, or does 'console.log' feel like a developer’s version of 'I love you'? 💖", "Dev log #17: I thought about using comments to communicate with my future self, but I might just leave riddles. 🕵️♂️", "Dev log #18: I once tried to fix a bug with a meme. Turns out, the humor didn’t compile. 😂", "Dev log #19: Did I mention my code runs great in my head? Reality checks are a whole different story! 🤯", "Dev log #20: I wonder if my laptop is secretly judging my coding skills... probably not wrong. 😬", "Dev log #21: Pro Tip: Always comment your code... unless you want future you to suffer! 📝", "Dev log #22: I think my code has mood swings. One moment it works, and the next it’s a complete disaster! 😱", "Dev log #23: I can't let the team know I secretly binge-watch coding tutorials instead of doing my own work. 🤐", "Dev log #24: Why does my code break only when I’m about to present it? It’s like it has stage fright! 🎤", "Dev log #25: I tried to teach my code how to be organized. It just laughed at me. 😂", "Dev log #26: Every time I think I’m done, there’s always a last-minute bug lurking around. 🕷️", "Dev log #27: I once spent more time debugging than actually coding. Who needs productivity, right? 🤷♂️", "Dev log #28: Why do they call it ‘version control’ when it feels more like a time machine? ⏳", "Dev log #29: I’m convinced my IDE has a sense of humor. It crashes right after I brag about my code! 😏", "Dev log #30: I wonder if other devs use ‘copy-paste’ as a love language too? ❤️", "Dev log #31: Sometimes I think my code is sentient... and it’s plotting against me. 🤖", "Dev log #32: Every time I see 'undefined,' I feel personally attacked. 😤", "Dev log #33: I think my keyboard has a crush on me; it never lets me type the right thing on the first try! 💔", "Dev log #34: If I had a penny for every error message I’ve seen, I could retire on a beach! 🏖️", "Dev log #35: My favorite programming language? The one that works without throwing exceptions! 🎉", "Dev log #36: Why do I feel like I’m in a relationship with my code? It’s complicated! 💔", "Dev log #37: I’m considering writing a book titled '101 Ways to Break Your Code.' Bestsellers, here I come! 📚", "Dev log #38: Did you know? The best way to debug is to stare blankly at the screen until it fixes itself. 🤷♀️", "Dev log #39: I should probably stop coding at midnight... but where’s the fun in that? 🌙", "Dev log #40: My code has a split personality: it works perfectly one minute, then completely fails the next! 😜", "Dev log #41: If coding was a sport, I’d still be in the amateur league... but at least I’m having fun! ⚽️", "Dev log #42: Why do I feel like my code is just one big inside joke? 🤪", "Dev log #43: I think my comments are more sarcastic than helpful. Future me is in for a treat! 🎭", "Dev log #44: I once tried to explain recursion to my friend. They’re still confused! 🔄", "Dev log #45: My goal this week: write clean code and not break anything... let’s see how that goes! 🧼", "Dev log #46: I should probably stop trying to debug while half asleep. It never ends well! 😴", "Dev log #47: If I had a superpower, it would be to find bugs before they find me! 🦸♂️", "Dev log #48: I wonder if my code feels neglected when I work on other projects? 🥺", "Dev log #49: Did I mention that my keyboard has seen more emotional breakdowns than my therapist? 🥴", "Dev log #50: I think my compiler is just messing with me. It loves to throw unexpected errors! ⚡️", "Dev log #51: I once wrote a comment that said ‘TODO: Fix this’... future me is not amused! 🤔", "Dev log #52: I’m convinced my code has a vendetta against clear naming conventions. 🏴☠️", "Dev log #53: Random Thought: If I ever get a cat, I’m naming it ‘404’ because it will be ‘not found’ all the time! 🐱", "Dev log #54: I just found a bug I thought I fixed last week. Surprise! 🎉", "Dev log #55: Why do I feel like my error messages are judging me? 🙈", "Dev log #56: I once spent an hour trying to fix a typo. It was a real page-turner! 📖", "Dev log #57: My code is like an onion; it has layers, and sometimes it makes me cry! 🧅", "Dev log #58: I’m starting to think my code is just a collection of memes at this point. 😂", "Dev log #59: I’ve considered adding a ‘panic’ button to my code for emergencies... 🤯", "Dev log #60: If I could trade my debugging skills for snacks, I’d be the richest developer! 🍿", "Dev log #61: Did you know? Every time I change something in my code, a developer somewhere cries. 😢", "Dev log #62: I once named a variable ‘temp’ just to make my code more dramatic. 🌡️", "Dev log #63: Why do I always find typos right after I submit? It’s like my code has a sixth sense! 👀", "Dev log #64: I keep wondering if my keyboard is secretly a magician. It loves to make letters disappear! 🎩", "Dev log #65: I think my code has more plot twists than a Netflix series! 🍿", "Dev log #66: I’m pretty sure my IDE is just messing with me at this point... 😜", "Dev log #67: Random Thought: If my code were a movie, it would be a comedy of errors! 🎬", "Dev log #68: I once tried to fix a bug by looking at it angrily... it didn’t work. 😡", "Dev log #69: I think my code is playing hard to get. The more I try to fix it, the worse it gets! 🙃", "Dev log #70: If I had a magic wand, I’d use it to make all bugs disappear! ✨", "Dev log #71: My code has officially been declared ‘quirky.’ At least it has character! 😜", "Dev log #72: Did I mention I’m currently in a love-hate relationship with my IDE? ❤️💔", "Dev log #73: Every time I see a 'syntax error,' I feel like my code is throwing shade. 🌞", "Dev log #74: My favorite debugging method? Yelling at the screen until it fixes itself! 📺", "Dev log #75: Why do I feel like my code is just a series of bad decisions? 🤷♂️", "Dev log #76: I’m convinced there’s a bug in my code that I’m just too scared to find! 👻", "Dev log #77: I keep telling myself I’ll start writing better comments... tomorrow! 🗓️", "Dev log #78: Today’s mission: avoid my code exploding... wish me luck! 💥", "Dev log #79: Did you know? The first step in debugging is always to take a deep breath. 🧘♂️", "Dev log #80: I think I need a vacation... from my own code! 🏖️", "Dev log #81: If coding was an Olympic sport, I’d definitely get a participation medal! 🏅", "Dev log #82: I keep asking myself: what would a better programmer do? Probably not this! 🤔", "Dev log #83: I wonder if my code has a dark side... it definitely has a few skeletons! 💀", "Dev log #84: I’m pretty sure my IDE is just a portal to another dimension... it definitely feels that way! 🌌", "Dev log #85: Random Thought: If my code were a movie, it would be a comedy of errors! 🎬", "Dev log #86: I once tried to fix a bug by looking at it angrily... it didn’t work. 😡", "Dev log #87: I think my code is playing hard to get. The more I try to fix it, the worse it gets! 🙃", "Dev log #88: If I had a magic wand, I’d use it to make all bugs disappear! ✨", "Dev log #89: Who thought Easter eggs were a good idea at 2 AM? 😳", "Dev log #90: My code has officially been declared ‘quirky.’ At least it has character! 😜", "Dev log #91: Debugging is like being a detective in a crime movie where you’re also the murderer. 🕵️♂️", "Dev log #92: I accidentally commented out my own jokes. Now they're just silent! 🤐", "Dev log #93: I think I need a vacation... from my own code! 🏖️", "Dev log #94: I’m convinced there’s a bug in my code that I’m just too scared to find! 👻", "Dev log #95: I keep telling myself I’ll start writing better comments... tomorrow! 🗓️", "Dev log #96: My code runs perfectly... until I hit 'run.' Then it’s a horror show. 🎬", "Dev log #97: My IDE has a tendency to crash right when I’m about to save. It’s got perfect timing! ⏰", "Dev log #98: If I had a nickel for every typo, I could buy a lifetime supply of coffee! ☕️", "Dev log #99: My code is like an onion; it has layers, and sometimes it makes me cry! 🧅", "Dev log #100: If coding were a sport, I’d definitely get a participation medal! 🏅" ]; const now = Date.now(); // Current timestamp const tenHours = 10 * 60 * 60 * 1000; // 10 hours in milliseconds // Helper function to get available eggs function getAvailableEggs() { return eggs.filter((egg, index) => { const lastEggTime = parseInt(localStorage.getItem(`egg_${index}_lastShown`)) || 0; return (now - lastEggTime) >= tenHours; }); } // Try to get available eggs let availableEggs = getAvailableEggs(); // If no available eggs and a blank would be served if (availableEggs.length === 0) { console.log("No Easter eggs available, resetting cooldowns."); // Reset the last shown time for all eggs eggs.forEach((egg, index) => { localStorage.setItem(`egg_${index}_lastShown`, now - tenHours); // Reset by setting time far back }); // Retry to get available eggs availableEggs = getAvailableEggs(); } // Select a random available egg const randomIndex = Math.floor(Math.random() * availableEggs.length); const selectedEgg = availableEggs[randomIndex]; // Store the current time as the last shown time for this egg const eggIndex = eggs.indexOf(selectedEgg); localStorage.setItem(`egg_${eggIndex}_lastShown`, now); return selectedEgg; } function triggerEgg(eggChance) { if (Math.random() < eggChance) { const easterEggText = document.createElement('p'); easterEggText.textContent = handleEgg(); easterEggText.style.color = '#8B0000'; easterEggText.style.fontSize = '12px'; easterEggText.style.fontStyle = 'bold'; return easterEggText ? easterEggText : null; } return null; } // Dynamic function to get the correct greeting based on the mode function getRandomGreeting() { const tones = isVideoMode ? videoTones : taskTones; const now = Date.now(); const tenHours = 10 * 60 * 60 * 1000; // 10 hours in milliseconds // Helper function to get available greetings function getAvailableGreetings() { return tones[selectedTone].filter((message, index) => { const lastGreetingTime = parseInt(localStorage.getItem(`greeting_${selectedTone}_${index}_lastShown`)) || 0; return (now - lastGreetingTime) >= tenHours; }); } // Try to get available greetings let availableGreetings = getAvailableGreetings(); // If no available greetings and a blank would be served if (availableGreetings.length === 0) { console.log("No greetings available, resetting cooldowns."); // Reset the last shown time for all greetings tones[selectedTone].forEach((message, index) => { localStorage.setItem(`greeting_${selectedTone}_${index}_lastShown`, now - tenHours); // Reset by setting time far back }); // Retry to get available greetings availableGreetings = getAvailableGreetings(); } // Select a random available greeting const randomIndex = Math.floor(Math.random() * availableGreetings.length); const selectedGreeting = availableGreetings[randomIndex]; // Store the current time as the last shown time for this greeting const greetingIndex = tones[selectedTone].indexOf(selectedGreeting); localStorage.setItem(`greeting_${selectedTone}_${greetingIndex}_lastShown`, now); return selectedGreeting; } function showToneSelectionGUI() { const toneGUI = document.createElement('div'); toneGUI.id = 'toneSelectionGUI'; toneGUI.style = ` position: fixed; top: 20%; left: 50%; transform: translate(-50%, -50%); background-color: #fff; border: 2px solid #007bff; padding: 20px; border-radius: 10px; box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1); z-index: 10000; text-align: center; color: #333; opacity: 0; transition: opacity 0.5s ease-out; `; const title = document.createElement('p'); title.textContent = "Select Your Preferred Tone or Disable Messages"; title.style.color = '#007bff'; title.style.fontWeight = 'bold'; title.style.marginBottom = '10px'; toneGUI.appendChild(title); const toneOptions = ["Excited", "Depressed", "Angry", "Studious", "No Messages"]; toneOptions.forEach(tone => { const button = document.createElement('button'); button.textContent = tone; button.style = 'margin: 5px; padding: 10px 15px; border-radius: 5px; border: none; background-color: #007bff; color: #fff; cursor: pointer;'; button.onclick = function() { selectedTone = (tone === 'No Messages') ? null : tone; localStorage.setItem('selectedTone', selectedTone); document.body.removeChild(toneGUI); }; toneGUI.appendChild(button); }); document.body.appendChild(toneGUI); setTimeout(() => toneGUI.style.opacity = '1', 100); } function showWelcomeBackGUI() { if (!selectedTone) return; tabChangeCount++; localStorage.setItem('tabChangeCount', tabChangeCount); const existingGUI = document.getElementById('welcomeBackGUI'); if (existingGUI) existingGUI.remove(); const welcomeBackGUI = document.createElement('div'); welcomeBackGUI.id = 'welcomeBackGUI'; welcomeBackGUI.style = ` position: fixed; top: 10%; right: 20px; background-color: #fff; border: 2px solid #007bff; padding: 15px; border-radius: 10px; box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1); z-index: 10000; text-align: center; color: #333; opacity: 0; transition: opacity 0.5s ease-out, transform 0.5s ease-in-out; cursor: pointer; transform: translateX(100px); `; const greetingText = document.createElement('p'); greetingText.textContent = getRandomGreeting(); greetingText.style.color = '#007bff'; greetingText.style.fontWeight = 'bold'; welcomeBackGUI.appendChild(greetingText); const eggMessage = triggerEgg(0.15); // 10% chance to show an *^' if (eggMessage) { welcomeBackGUI.appendChild(eggMessage); } welcomeBackGUI.onclick = function() { welcomeBackGUI.style.opacity = '0'; setTimeout(() => document.body.removeChild(welcomeBackGUI), 500); }; setTimeout(() => { welcomeBackGUI.style.opacity = '0'; setTimeout(() => document.body.removeChild(welcomeBackGUI), 500); }, 6500); document.body.appendChild(welcomeBackGUI); setTimeout(() => { welcomeBackGUI.style.opacity = '1'; welcomeBackGUI.style.transform = 'translateX(0)'; }, 100); } // Function to force unpause all media elements (videos, audios) function unpauseMedia(mediaElements) { mediaElements.forEach(mediaElement => { if (mediaElement.paused && !mediaElement.getAttribute('data-user-paused')) { mediaElement.play().catch(error => { console.error('Error attempting to unpause media:', error); }); } }); } // Handle visibility change (tab switching) function handleVisibilityChange() { const mediaElements = document.querySelectorAll('video, audio, .plyr'); if (document.hidden) { // When tab is not focused (hidden), force unpause unpauseMedia(mediaElements); } } // Add animations for media pause/play effect function addVideoAnimations() { const mediaElements = document.querySelectorAll('video, audio, .plyr'); mediaElements.forEach(mediaElement => { mediaElement.addEventListener('pause', () => { // New zoom-out effect without physically changing the size mediaElement.style.transition = 'transform 0.3s ease, filter 0.3s ease'; mediaElement.style.transform = 'perspective(1000px) translateZ(+50px)'; // Zoom out illusion mediaElement.style.filter = 'grayscale(100%)'; mediaElement.style.transformOrigin = 'center'; // Keep the zoom centered }); mediaElement.addEventListener('play', () => { mediaElement.style.transform = 'perspective(1000px) translateZ(0)'; // Reset back to normal mediaElement.style.filter = 'grayscale(0%)'; }); }); } // Function to detect video mode function detectVideoMode() { const videoElements = document.querySelectorAll('video, audio, .plyr'); let isVideoVisible = false; videoElements.forEach(videoElement => { const rect = videoElement.getBoundingClientRect(); const isVisible = rect.width > 0 && rect.height > 0 && window.getComputedStyle(videoElement).visibility !== 'hidden'; // Check if the video element is visible and playable if (isVisible && videoElement.readyState >= 1) { isVideoVisible = true; } }); if (isVideoVisible && lastMode !== 'video, .plyr') { isVideoMode = true; lastMode = 'video, .plyr'; // Set lastMode to 'video' (not 'video, audio, .plyr') console.log('Switched to Video Mode'); } else if (!isVideoVisible && lastMode !== 'task') { isVideoMode = false; lastMode = 'task'; // Set lastMode to 'task' console.log('Switched to Task Mode'); } } // Start monitoring tab changes const monitoringInterval = setInterval(() => { if (isMonitoring) { handleVisibilityChange(); // Ensure media is unpaused when tab is hidden detectVideoMode(); // Check if video mode or task mode addVideoAnimations(); // Ensure animations are added } }, 0.01); // Check every second // Register menu commands GM.registerMenuCommand("Change Message Tone", showToneSelectionGUI); GM.registerMenuCommand("Toggle Auto Unpause", () => { isMonitoring = !isMonitoring; alert(`Auto Unpauser is now ${isMonitoring ? "enabled" : "disabled"}.`); }); // Event listeners for visibility change document.addEventListener('visibilitychange', handleVisibilityChange); window.addEventListener('focus', () => { isTabFocused = true; showWelcomeBackGUI(); }); window.addEventListener('blur', () => isTabFocused = false); // Daily reset logic const lastVisit = localStorage.getItem('lastVisit'); const today = new Date().toISOString().slice(0, 10); if (lastVisit !== today) { localStorage.setItem('tabChangeCount', '0'); localStorage.setItem('lastVisit', today); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址