您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
The Best Acellus.com Mod/Cheat Menu
当前为
// ==UserScript== // @name ⚒ BETA Wizardebop 3.00 ⚒ // @author Type Stuff // @description The Best Acellus.com Mod/Cheat Menu // @version 0.21 // @match https://admin192a.acellus.com/student/* // @match https://admin192c.acellus.com/student/* // @run-at document-start // @grant none // @namespace https://gf.qytechs.cn/users/1394549 // @icon https://img.freepik.com/free-vector/halloween-witch-hat-isolated-illustration_18591-83719.jpg // @license Proprietary — see below // ==/UserScript== /* © 2025 TypeStuff. All Rights Reserved. You are free to: • Install and run this script. • Modify the code for your own, personal, non-commercial use. You MAY NOT: • Redistribute, re-host, repost, or re-upload this script in any form. • Sell, license, or otherwise make available this script (original or modified). */ (function() { 'use strict'; /* ------------------- 0) AI CHATBOT INTEGRATION ------------------- */ function setupAIChatbot() { const aiTab = document.querySelector('.category-menu#ai'); const container = document.createElement('div'); container.id = 'ai-chatbot'; container.style = 'padding:8px;'; container.innerHTML = ` <div id="chat-container" style="display:flex;flex-direction:column;height:300px;"> <div id="chat-messages" style="flex:1;overflow:auto;border:1px solid #ccc;padding:8px;background:#fff;border-radius:4px;margin-bottom:8px;"></div> <div style="display:flex;align-items:center;"> <select id="template-select" class="wm-input" style="margin-right:8px;"> <option value="">No template</option> <option value="essay">Essay Writer</option> </select> <input id="chat-input" type="text" class="wm-input" placeholder="Type your message..." style="flex:1;margin-right:8px;"/> <button id="chat-send" class="wm-button">Send</button> </div> <div id="chat-error" style="color:red;font-size:12px;margin-top:4px;display:none;"></div> </div> `; aiTab.appendChild(container); const AI_MAX = 15; const AI_PROMPTS_KEY = 'wizardebop-ai-prompts'; const AI_TEMPLATE_KEY = 'wizardebop-ai-template'; function getPromptTimestamps(){ let arr = []; try { arr = JSON.parse(localStorage.getItem(AI_PROMPTS_KEY) || '[]'); } catch { arr = []; } return Array.isArray(arr) ? arr : []; } function savePromptTimestamps(arr){ localStorage.setItem(AI_PROMPTS_KEY, JSON.stringify(arr)); } function recordPrompt(){ const now = Date.now(); const oneHour = 60*60*1000; let arr = getPromptTimestamps().filter(ts => now - ts < oneHour); arr.push(now); savePromptTimestamps(arr); return arr.length; } function canSendPrompt(){ const now = Date.now(); const oneHour = 60*60*1000; return getPromptTimestamps().filter(ts => now - ts < oneHour).length < AI_MAX; } async function fetchAI(messages) { const res = await fetch('http://localhost:11434', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ model: 'gemm3:1b', messages }) }); if (!res.ok) { throw new Error(`AI request failed: ${res.status} ${res.statusText}`); } const data = await res.json(); return data.choices[0].message.content.trim(); } const tplSelect = document.getElementById('template-select'); const inputEl = document.getElementById('chat-input'); const sendBtn = document.getElementById('chat-send'); const msgsDiv = document.getElementById('chat-messages'); const errDiv = document.getElementById('chat-error'); tplSelect.value = localStorage.getItem(AI_TEMPLATE_KEY) || ''; sendBtn.addEventListener('click', async () => { errDiv.style.display = 'none'; if (!canSendPrompt()) { errDiv.textContent = `Rate limit reached: ${AI_MAX} prompts per hour.`; errDiv.style.display = 'block'; return; } const raw = inputEl.value.trim(); if (!raw) return; const template = tplSelect.value; localStorage.setItem(AI_TEMPLATE_KEY, template); let messages = []; if (template === 'essay') { messages.push({ role: 'system', content: 'Make a detailed 200-word essay that gets a 100%, and grammar is perfect and punctuation is also perfect, about:' }); } messages.push({ role: 'user', content: raw }); recordPrompt(); if (!canSendPrompt()) sendBtn.disabled = true; msgsDiv.innerHTML += `<div><strong>You:</strong> ${raw}</div>`; msgsDiv.scrollTop = msgsDiv.scrollHeight; inputEl.value = ''; try { const aiResp = await fetchAI(messages); msgsDiv.innerHTML += `<div><strong>AI:</strong> ${aiResp}</div>`; msgsDiv.scrollTop = msgsDiv.scrollHeight; if (template === 'essay') { const summary = await fetchAI([ { role: 'assistant', content: aiResp }, { role: 'user', content: 'Describe what the above essay is about in one sentence.' } ]); msgsDiv.innerHTML += `<div><em>Summary:</em> ${summary}</div>`; msgsDiv.scrollTop = msgsDiv.scrollHeight; } } catch (err) { errDiv.textContent = 'Error: ' + err.message; errDiv.style.display = 'block'; } }); } /* ------------------ 1) SETTINGS & STATE ------------------ */ const STORAGE = { wallpaper: 'wizardebop-wallpaper', unpause: 'wizardebop-unpause', pasteFast: 'wizardebop-paste', autoSpeed: 'wizardebop-autoSpeed', btnBg: 'wizardebop-btn-bg', btnHover: 'wizardebop-btn-hover', btnRadius: 'wizardebop-btn-radius', btnFont: 'wizardebop-btn-font', btnPad: 'wizardebop-btn-pad', animDur: 'wizardebop-anim-duration', password: 'wizardebop-password', keybind: 'wizardebop-keybind', notes: 'wizardebop-notes', todos: 'wizardebop-todos', showTimer: 'wizardebop-show-timer' }; let autoUnpause = localStorage.getItem(STORAGE.unpause) === 'true'; let pasteFast = localStorage.getItem(STORAGE.pasteFast) === 'true'; let autoSpeed = localStorage.getItem(STORAGE.autoSpeed) === 'true'; let userPass = localStorage.getItem(STORAGE.password) || ''; let toggleKey = localStorage.getItem(STORAGE.keybind) || 'F2'; let savedNotes = localStorage.getItem(STORAGE.notes) || ''; let todoList = JSON.parse(localStorage.getItem(STORAGE.todos) || '[]'); let showTimerOnScreen = localStorage.getItem(STORAGE.showTimer) === 'true'; const BTN = { bg: localStorage.getItem(STORAGE.btnBg) || 'rgba(128,128,128,0.5)', hover: localStorage.getItem(STORAGE.btnHover) || 'rgba(255,255,255,0.3)', radius: localStorage.getItem(STORAGE.btnRadius) || '6px', font: localStorage.getItem(STORAGE.btnFont) || '14px', pad: localStorage.getItem(STORAGE.btnPad) || '6px 12px' }; const ANIM = { gradDur: +localStorage.getItem(STORAGE.animDur) || 12 }; let timerInterval = null, timerElapsed = 0; let pomoInterval = null, pomoRemaining = 25 * 60, pomoPhase = 'work', pomoCycleCount = 0; function save(k,v){ localStorage.setItem(k,v); } function saveTodos(){ save(STORAGE.todos, JSON.stringify(todoList)); } /* ------------------- 2) AUTO-UNPAUSE ------------------- */ function enableUnpause(){ Object.defineProperty(document,'hidden',{get:()=>false}); Object.defineProperty(document,'visibilityState',{get:()=> 'visible'}); document.addEventListener('visibilitychange',e=>e.stopImmediatePropagation(),true); } if(autoUnpause) enableUnpause(); new MutationObserver(()=>{ if(autoUnpause) enableUnpause(); }) .observe(document,{childList:true,subtree:true}); /* ------------------- 3) WALLPAPER HELPERS ------------------- */ function loadWP(){ try{ return JSON.parse(localStorage.getItem(STORAGE.wallpaper)); } catch{ return null; } } function saveWP(type,val){ localStorage.setItem(STORAGE.wallpaper, JSON.stringify({type,val})); } function createWP(){ let el = document.getElementById('global-wallpaper'); if(!el){ el = document.createElement('div'); el.id = 'global-wallpaper'; document.body.prepend(el); } return el; } function changeWP(type,val,saveFlag=true){ const w = createWP(); Object.assign(w.style,{ position:'fixed', top:'0', left:'0', width:'100vw', height:'100vh', zIndex:'-1', pointerEvents:'none', animation:'' }); if(type==='gradient'){ w.style.background = 'linear-gradient(135deg,rgba(255,182,193,0.6),rgba(176,224,230,0.6),rgba(221,160,221,0.6),rgba(255,228,181,0.6))'; w.style.backgroundSize = '200% 200%'; w.style.animation = `pastelGradient ${ANIM.gradDur}s ease infinite`; } else if(type.startsWith('ai_')){ const topic = type.split('_')[1]; w.style.background = `url('https://source.unsplash.com/1600x900/?ai-art,${topic}') no-repeat center/cover`; } else if(type==='custom'){ w.style.background = val; } else if(type==='upload'){ w.style.background = `url('${val}') no-repeat center/cover`; } if(saveFlag) saveWP(type,val); } /* ------------------- 4) ESSAY PASTER GUI ------------------- */ function setupPaste(){ let last = null; const overlay = document.createElement('div'); overlay.id = 'pasteOverlay'; overlay.style.cssText = 'position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);' + 'background:rgba(0,0,0,0.7);padding:20px;border-radius:8px;z-index:10003;display:none'; overlay.innerHTML = `<div style="display:flex;flex-direction:column;gap:10px;"> <h3 style="margin:0;color:#000">✎ Paste Anything</h3> <textarea id="pasteText" style="width:300px;height:100px;padding:8px;border-radius:4px;border:none;color:#000"> </textarea> </div> <div style="display:flex;gap:8px;margin-top:10px;"> <button id="pasteNow" style="padding:6px;border:none;border-radius:4px;cursor:pointer;background:${BTN.bg};transition:background 0.3s;"> Paste </button> <button id="closePaste" style="padding:6px;border:none;border-radius:4px;cursor:pointer;background:${BTN.bg};transition:background 0.3s;"> Close </button> <button id="speedButton" style="padding:6px;border:none;border-radius:4px;cursor:pointer;background:${BTN.bg};transition:background 0.3s;"> ${autoSpeed ? '1.5× Auto ON' : '1.5× Now'} </button> </div>`; document.body.appendChild(overlay); overlay.querySelector('#pasteNow').addEventListener('click', ()=>{ const txt = overlay.querySelector('#pasteText').value; if(last){ last.focus(); let i=0; const ev = new Event('input',{bubbles:true}); const iv = setInterval(()=>{ if(last.isContentEditable) last.textContent += txt[i]; else last.value += txt[i]; last.dispatchEvent(ev); if(++i >= txt.length) clearInterval(iv); },5); } overlay.style.display = 'none'; }); overlay.querySelector('#closePaste').addEventListener('click', ()=>{ overlay.style.display = 'none'; }); const speedBtn = overlay.querySelector('#speedButton'); speedBtn.addEventListener('click', ()=>{ document.querySelectorAll('video').forEach(v=> v.playbackRate = 1.5); }); speedBtn.addEventListener('contextmenu', e=>{ e.preventDefault(); autoSpeed = !autoSpeed; save(STORAGE.autoSpeed, autoSpeed); speedBtn.textContent = autoSpeed ? '1.5× Auto ON' : '1.5× Now'; if(autoSpeed) applyAutoSpeed(); }); document.addEventListener('click', e=>{ if(!pasteFast) return; const t = e.target; if(document.getElementById('settings-menu')?.contains(t)) return; if(overlay.contains(t)) return; if(t.isContentEditable || t.nodeName==='TEXTAREA' || (t.nodeName==='INPUT'&&t.type==='text')){ last = t; overlay.style.display = 'block'; } }, true); } /* ------------------- 5) STYLE INJECTION ------------------- */ const styleEl = document.createElement('style'); styleEl.textContent = ` @keyframes pastelGradient { 0% { background-position:0% 0% } 50% { background-position:100% 100% } 100% { background-position:0% 0% } } #settings-overlay { position:fixed;top:0;left:0;width:100vw;height:100vh; background:rgba(0,0,0,0.2);backdrop-filter:blur(4px);z-index:10000; display:none; } #settings-menu { position:fixed;top:50%;left:50%; transform:translate(-50%,-50%) scale(0.8); width:760px;height:420px; background:rgba(255,255,255,0.8); backdrop-filter:blur(6px); border-radius:12px; box-shadow:0 0 20px rgba(0,0,0,0.5); display:none;flex-direction:row; z-index:10001;opacity:0; transition:opacity 0.3s ease,transform 0.3s ease; } #settings-menu.visible { display:flex;opacity:1; transform:translate(-50%,-50%) scale(1); } #settings-button { position:fixed;bottom:20px;right:20px; background:rgba(128,128,128,0.5); color:#000;border:none;border-radius:6px; padding:6px;font-size:18px;cursor:pointer; z-index:10002;backdrop-filter:blur(4px); transition:transform 0.2s; } #settings-button:hover { transform:scale(1.1) } .settings-categories { width:20%;background:rgba(0,0,0,0.1); display:flex;flex-direction:column; padding:10px;overflow-y:auto; } .settings-categories button { background:rgba(255,255,255,0.5); color:#000;border:none;margin:4px 0; padding:6px;border-radius:6px; cursor:pointer;transition:background 0.3s,transform 0.2s; text-align:left;font-size:14px; } .settings-categories button:hover { background:rgba(200,200,200,0.6); transform:translateX(4px); } .settings-categories button.active { background:rgba(200,200,200,0.8);color:#000; } .settings-details { width:80%;padding:20px;overflow-y:auto;color:#000; position:relative; } .category-menu { display:none } .category-menu.active { display:block } .category-menu#timer { background:rgba(200,200,200,0.1); border-radius:6px; padding:10px; } .category-menu h3 { margin-top:0;font-size:18px } .category-menu h4 { margin:12px 0 4px;font-size:16px } .category-menu label { display:block;margin:8px 0;font-size:14px } .category-menu input.wm-input { width:90%;margin:4px 0;padding:4px; border-radius:4px;border:1px solid #ccc; } button.wm-button { margin:6px 4px;padding:${BTN.pad}; background:${BTN.bg};border:none; border-radius:${BTN.radius}; font-size:${BTN.font};cursor:pointer; transition:background 0.3s; } button.wm-button:hover { background:${BTN.hover} } #close-x { position:absolute;top:8px;right:8px; background:transparent;border:none; font-size:20px;cursor:pointer; } #screen-timer { position:absolute;top:100px;left:100px; background:rgba(0,0,0,0.7);color:#fff; padding:8px 12px;border-radius:4px; font-size:16px;cursor:move; z-index:10005;display:none;user-select:none; } `; document.head.appendChild(styleEl); /* ------------------- 6) CREATE ON-SCREEN TIMER ------------------- */ let screenTimerEl; function createScreenTimer(){ if(screenTimerEl) return; screenTimerEl = document.createElement('div'); screenTimerEl.id = 'screen-timer'; screenTimerEl.textContent = '00:00:00'; document.body.appendChild(screenTimerEl); let dragging=false, ox=0, oy=0; screenTimerEl.addEventListener('mousedown', e=>{ dragging=true; ox = e.clientX - screenTimerEl.offsetLeft; oy = e.clientY - screenTimerEl.offsetTop; e.preventDefault(); }); document.addEventListener('mousemove', e=>{ if(dragging){ screenTimerEl.style.left = `${e.clientX - ox}px`; screenTimerEl.style.top = `${e.clientY - oy}px`; } }); document.addEventListener('mouseup', ()=>dragging=false); screenTimerEl.style.display = showTimerOnScreen ? 'block' : 'none'; } /* ------------------- 7) AUTO-SPEED LOGIC ------------------- */ function applyAutoSpeed(){ const setAll = ()=> document.querySelectorAll('video').forEach(v=> v.playbackRate = 1.5); setAll(); new MutationObserver(setAll) .observe(document.body, { childList: true, subtree: true }); document.addEventListener('play', e=>{ if(e.target.tagName === 'VIDEO') e.target.playbackRate = 1.5; }, true); } /* ------------------- 8) BUILD SETTINGS MENU ------------------- */ function buildMenu(){ const overlay = document.createElement('div'); overlay.id = 'settings-overlay'; document.body.appendChild(overlay); const btn = document.createElement('button'); btn.id = 'settings-button'; btn.textContent = '⚙️'; document.body.appendChild(btn); const menu = document.createElement('div'); menu.id = 'settings-menu'; menu.innerHTML = `<button id='close-x'>×</button>` + `<div class='settings-categories'>` + `<button class='cat-btn active' data-cat='general'>General</button>` + `<button class='cat-btn' data-cat='ai'>AI</button>` + `<button class='cat-btn' data-cat='wallpaper'>Wallpaper</button>` + `<button class='cat-btn' data-cat='buttons'>Buttons</button>` + `<button class='cat-btn' data-cat='animations'>Animations</button>` + `<button class='cat-btn' data-cat='notes'>Notes</button>` + `<button class='cat-btn' data-cat='todo'>To-Do</button>` + `<button class='cat-btn' data-cat='timer'>Timer</button>` + `<button class='cat-btn' data-cat='extras'>Extras</button>` + `</div>` + `<div class='settings-details'>` + `<div class='category-menu active' id='general'>` + `<h3>General</h3>` + `<label><input type='checkbox' id='chk-unpause' ${autoUnpause?'checked':''}/> Auto-Unpause</label>` + `<label><input type='checkbox' id='chk-paste' ${pasteFast?'checked':''}/> Essay Paster</label>` + `<label><input type='checkbox' id='chk-speed' ${autoSpeed?'checked':''}/> Auto 1.5× Video</label>` + `<label>Password: <input type='password' id='menu-pass' class='wm-input' value='${userPass}'></label>` + `<label>Keybind: <button id='keybind-btn' class='wm-button'>${toggleKey===' ' ? 'Space' : toggleKey}</button></label>` + `<button id='apply-general' class='wm-button'>Apply</button>` + `</div>` + `<div class='category-menu' id='ai'>` + `<h3>AI</h3>` + `<div id='ai-settings' style='padding:4px 0;color:#555;'></div>` + `</div>` + `<div class='category-menu' id='wallpaper'>` + `<h3>Wallpaper</h3>` + `<button class='wm-button' data-wallpaper='gradient'>Gradient</button>` + `<button class='wm-button' data-wallpaper='ai_nature'>AI Nature</button>` + `<button class='wm-button' data-wallpaper='ai_cityscape'>AI Cityscape</button>` + `<button class='wm-button' data-wallpaper='ai_abstract'>AI Abstract</button>` + `<button class='wm-button' data-wallpaper='custom'>Custom Color</button>` + `<button class='wm-button' id='upload-wallpaper'>Upload</button>` + `<input type='file' id='upload-input' accept='image/*'>` + `</div>` + `<div class='category-menu' id='buttons'>` + `<h3>Buttons</h3>` + `<label>BG:<br><input id='btn-bg' class='wm-input' value='${BTN.bg}'></label>` + `<label>Hover BG:<br><input id='btn-hover' class='wm-input' value='${BTN.hover}'></label>` + `<label>Radius:<br><input id='btn-radius' class='wm-input' value='${BTN.radius}'></label>` + `<label>Font Size:<br><input id='btn-font' class='wm-input' value='${BTN.font}'></label>` + `<label>Padding:<br><input id='btn-pad' class='wm-input' value='${BTN.pad}'></label>` + `<button class='wm-button' id='apply-buttons'>Apply</button>` + `</div>` + `<div class='category-menu' id='animations'>` + `<h3>Animations</h3>` + `<label>Gradient Duration (s):<br><input type='number' id='anim-duration' class='wm-input' value='${ANIM.gradDur}' min='1'></label>` + `<button class='wm-button' id='apply-animations'>Apply</button>` + `</div>` + `<div class='category-menu' id='notes'>` + `<h3>Notes</h3>` + `<textarea id='notes-text' style='width:100%;height:200px;padding:8px;border:1px solid #ccc;border-radius:4px;'>${savedNotes}</textarea>` + `<button id='save-notes' class='wm-button'>Save Notes</button>` + `</div>` + `<div class='category-menu' id='todo'>` + `<h3>To-Do List</h3>` + `<input id='todo-input' placeholder='New task...'><button id='add-todo' class='wm-button'>Add</button>` + `<ul id='todo-list'></ul>` + `</div>` + `<div class='category-menu' id='timer'>` + `<h3>Timer</h3>` + `<span id='timer-display-general'>00:00:00</span>` + `<label><input type='checkbox' id='chk-show-screen' ${showTimerOnScreen?'checked':''}/> Show timer on screen</label><br>` + `<button id='timer-toggle-general' class='wm-button'>Start</button>` + `<button id='timer-reset-general' class='wm-button'>Reset</button>` + `</div>` + `<div class='category-menu' id='extras'><h3>Extras</h3><p>More coming soon…</p></div>` + `</div>`; document.body.appendChild(menu); menu.querySelectorAll('.cat-btn').forEach(b=>{ b.addEventListener('click',()=>{ menu.querySelectorAll('.cat-btn').forEach(x=>x.classList.remove('active')); menu.querySelectorAll('.category-menu').forEach(x=>x.classList.remove('active')); b.classList.add('active'); menu.querySelector('#'+b.dataset.cat).classList.add('active'); }); }); const showM = ()=>{ overlay.style.display='block'; menu.classList.add('visible'); }; const hideM = ()=>{ menu.classList.remove('visible'); overlay.style.display='none'; }; btn.addEventListener('click',()=>{ if(userPass){ const p = prompt('Enter password:'); if(p !== userPass) return; } showM(); }); document.addEventListener('keydown', e=>{ if(e.key === toggleKey){ if(menu.classList.contains('visible')) hideM(); else { if(userPass){ const p = prompt('Enter password:'); if(p !== userPass) return; } showM(); } } }); menu.querySelector('#close-x').addEventListener('click', hideM); overlay.addEventListener('click', hideM); menu.querySelector('#apply-general').addEventListener('click', ()=>{ autoUnpause = menu.querySelector('#chk-unpause').checked; pasteFast = menu.querySelector('#chk-paste').checked; autoSpeed = menu.querySelector('#chk-speed').checked; userPass = menu.querySelector('#menu-pass').value; save(STORAGE.unpause, autoUnpause); save(STORAGE.pasteFast, pasteFast); save(STORAGE.autoSpeed, autoSpeed); save(STORAGE.password, userPass); save(STORAGE.keybind, toggleKey); if(autoUnpause) enableUnpause(); if(autoSpeed) applyAutoSpeed(); hideM(); }); const disp = menu.querySelector('#timer-display-general'), btnT = menu.querySelector('#timer-toggle-general'), btnR = menu.querySelector('#timer-reset-general'), chkS = menu.querySelector('#chk-show-screen'); function updateTimer(){ const h = Math.floor(timerElapsed/3600).toString().padStart(2,'0'), m = Math.floor((timerElapsed%3600)/60).toString().padStart(2,'0'), s = (timerElapsed%60).toString().padStart(2,'0'); disp.textContent = `${h}:${m}:${s}`; if(showTimerOnScreen && screenTimerEl) screenTimerEl.textContent = disp.textContent; } btnT.addEventListener('click', ()=>{ if(timerInterval){ clearInterval(timerInterval); timerInterval = null; btnT.textContent = 'Start'; } else { createScreenTimer(); if(showTimerOnScreen) screenTimerEl.style.display = 'block'; timerInterval = setInterval(()=>{ timerElapsed++; updateTimer(); }, 1000); btnT.textContent = 'Stop'; } }); btnR.addEventListener('click', ()=>{ clearInterval(timerInterval); timerInterval = null; timerElapsed = 0; updateTimer(); btnT.textContent = 'Start'; }); chkS.addEventListener('change', e=>{ showTimerOnScreen = e.target.checked; save(STORAGE.showTimer, showTimerOnScreen); if(screenTimerEl) screenTimerEl.style.display = showTimerOnScreen ? 'block' : 'none'; }); } /* ------------------- 9) INIT ------------------- */ function wireUpWallpaperButtons(){ const uploadInput = document.querySelector('#upload-input'); document.body.addEventListener('click', e => { const btn = e.target; if (btn.matches('#wallpaper button[data-wallpaper]')) { const type = btn.getAttribute('data-wallpaper'); if (type === 'custom') { const val = prompt('Enter a CSS background (color, gradient, etc):'); if (val) changeWP(type, val); } else { changeWP(type, null); } } if (btn.id === 'upload-wallpaper') { uploadInput.click(); } }); uploadInput.addEventListener('change', e => { const file = e.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = () => changeWP('upload', reader.result); reader.readAsDataURL(file); }); } function init(){ setupPaste(); buildMenu(); setupAIChatbot(); // ← initialize AI after menu exists createScreenTimer(); wireUpWallpaperButtons(); if(autoSpeed) applyAutoSpeed(); } if(document.readyState==='loading') document.addEventListener('DOMContentLoaded', init); else init(); // Restore wallpaper const wp = loadWP(); if(wp) window.addEventListener('DOMContentLoaded', ()=>changeWP(wp.type, wp.val, false)); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址