您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Tusi功能增强脚本
// ==UserScript== // @name 吐司机-Toaster // @version 2.9 // @description Tusi功能增强脚本 // @author coffeexiong // @match https://tusi.art/* // @match https://tusiart.com/* // @match https://tensor.art/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAOVBMVEVHcEwAAADrowD/1nkAAAAAAAAAAAAAAAAAAAAAAADUjADwrhj3w05SOQDBhQDgmwOcawB+VwAaEgBA+4wIAAAACnRSTlMA////Wr+K9+A6Gw319QAAAUFJREFUWMPtl2sSgyAMhAUFgxS0vf9hK2o70pAItj+cDnuAbzYbHknTVFX9v4xW0IsM9aC0ITEdiCJBl3ajRLFUwpXpxQn1huC4aZBZGia3okyK4zIpG8slPC353KW0t/ZDN0uj7ktOUb82DsIsqAPSvneh747gsKRQHewSCmBPcTiSj/PWiyHbkrKsJR1FPdGGOEtTFHeIaJAtI/oMhBPwBoVDNJ4DyRBSAWggFTkCvmlzRiTHR/0/DpsExWEftp+uLG7/4YFkK9s/ANsVOWcIPi8tDeKbHz2434CaCqqgCqqgK4OsvRroOhm9fv9QGi6P5IwI9Pr9kyB+YAM01ZKfNj+vqQaNtT4xHbPzsUf/41rbw8si+QeqbLMknB9zKaNfdwi0IWlxShqvR/pHnPK9j9z8ZtS8iGYLVFd396r/1xOsiyRtXj5SIAAAAABJRU5ErkJggg== // @grant none // @require https://greasyfork.org/scripts/373256-qrcode-js/code/QRCode-Js.js?version=636795 // @license GNU AGPLv3 // @namespace https://greasyfork.org/users/1161171 // ==/UserScript== setTimeout(function() { 'use strict'; // 创建一级菜单 function createFirstLevelMenu() { const firstLevelMenu = document.createElement('div'); firstLevelMenu.style.position = 'absolute'; firstLevelMenu.style.left = '41px'; firstLevelMenu.style.top = '72px'; firstLevelMenu.style.zIndex = '9999'; firstLevelMenu.style.padding = '10px'; const bodyBackgroundColor = window.getComputedStyle(document.body).backgroundColor; firstLevelMenu.style.backgroundColor = bodyBackgroundColor; const viInputStyles = window.getComputedStyle(document.querySelector('.vi-input')); const viInputBorderColor = viInputStyles.borderColor; firstLevelMenu.style.border = '1px solid #CCCCCC'; firstLevelMenu.style.borderColor = viInputBorderColor; firstLevelMenu.style.borderRadius = '10px'; firstLevelMenu.innerText = '🍞'; firstLevelMenu.title = 'Toaster'; document.body.appendChild(firstLevelMenu); return firstLevelMenu; } // 创建二级菜单 function createSecondLevelMenu() { const secondLevelMenu = document.createElement('div'); secondLevelMenu.style.position = 'absolute'; secondLevelMenu.style.left = '41px'; secondLevelMenu.style.top = '72px'; // 二级菜单相对于一级菜单的位置 secondLevelMenu.style.zIndex = '9999'; secondLevelMenu.style.padding = '10px'; const bodyBackgroundColor = window.getComputedStyle(document.body).backgroundColor; secondLevelMenu.style.backgroundColor = bodyBackgroundColor; const viInputStyles = window.getComputedStyle(document.querySelector('.vi-input')); const viInputBorderColor = viInputStyles.borderColor; secondLevelMenu.style.border = '1px solid #CCCCCC'; secondLevelMenu.style.borderColor = viInputBorderColor; secondLevelMenu.style.borderRadius = '10px'; secondLevelMenu.style.display = 'none'; // 初始隐藏二级菜单 document.body.appendChild(secondLevelMenu); // 创建勾选框和标签 const checkboxDelete = document.createElement('input'); checkboxDelete.type = 'checkbox'; checkboxDelete.checked = getButtonState(); checkboxDelete.style.marginRight = '5px'; // 添加间距 const labelDelete = document.createElement('label'); // 使用label元素替代span元素 labelDelete.innerText = '自动确认删除'; labelDelete.title = '当点击队列删除按钮后会自动点击确认删除提示框'; const checkboxQueue = document.createElement('input'); checkboxQueue.type = 'checkbox'; checkboxQueue.checked = getQueueState(); checkboxQueue.style.marginRight = '5px'; // 添加间距 const labelQueue = document.createElement('label'); // 使用label元素替代span元素 labelQueue.innerText = '自动提交队列'; labelQueue.title = '当检测到队列已满被拒绝提交任务后会在5秒后提交当前编写任务'; const checkboxInfinite = document.createElement('input'); checkboxInfinite.type = 'checkbox'; checkboxInfinite.checked = getInfiniteState(); checkboxInfinite.style.marginRight = '5px'; // 添加间距 const labelInfinite = document.createElement('label'); // 使用label元素替代span元素 labelInfinite.innerText = '无限抽卡'; labelInfinite.title = '启用后会在出图页面无限循环提交出图请求'; let qrData = 'https://qr14.cn/DIpmPe'; let qrDiv = document.createElement('div'); new QRCode(qrDiv, { text: qrData, width: 128, height: 128 }); qrDiv.style.border = '5px solid #ffffff'; let qrText = document.createElement('p'); qrText.innerText = '扫码购买算力'; qrText.style.display = 'flex'; qrText.style.justifyContent = 'center'; let TsVersion = document.createElement('p'); TsVersion.innerText = 'V2.9.231012.1'; TsVersion.style.display = 'flex'; TsVersion.style.color = viInputStyles.borderColor; TsVersion.style.fontSize = '8px'; TsVersion.style.justifyContent = 'flex-end'; let Br = document.createElement('p'); Br.innerText = '-'; Br.style.display = 'flex'; Br.style.color = bodyBackgroundColor; Br.style.fontSize = '0px'; secondLevelMenu.appendChild(checkboxDelete); secondLevelMenu.appendChild(labelDelete); secondLevelMenu.appendChild(document.createElement('br')); secondLevelMenu.appendChild(checkboxQueue); secondLevelMenu.appendChild(labelQueue); secondLevelMenu.appendChild(document.createElement('br')); secondLevelMenu.appendChild(checkboxInfinite); secondLevelMenu.appendChild(labelInfinite); secondLevelMenu.appendChild(document.createElement('br')); secondLevelMenu.appendChild(document.createElement('br')); secondLevelMenu.appendChild(qrDiv); secondLevelMenu.appendChild(qrText); secondLevelMenu.appendChild(Br); secondLevelMenu.appendChild(TsVersion); return secondLevelMenu; } // 显示菜单 function showMenu(menu) { menu.style.display = 'block'; } // 隐藏菜单 function hideMenu(menu) { menu.style.display = 'none'; } // 从localStorage中获取按钮状态 function getButtonState() { return localStorage.getItem('autoConfirmDelete') === 'true'; } // 从localStorage中获取队列功能状态 function getQueueState() { return localStorage.getItem('autoSubmitQueue') === 'true'; } // 从localStorage中获取队列功能状态 function getInfiniteState() { return localStorage.getItem('InfiniteGacha') === 'true'; } // 设置按钮状态到localStorage function setButtonState(enabled) { localStorage.setItem('autoConfirmDelete', enabled); } // 设置队列功能状态到localStorage function setQueueState(enabled) { localStorage.setItem('autoSubmitQueue', enabled); } // 设置队列功能状态到localStorage function setQueueInfinite(enabled) { sessionStorage.setItem('InfiniteGacha', enabled); } // 模拟点击删除按钮 let AotoDeleteButton = null; console.log('初始化AotoDeleteButton函数'); async function startAotoDeleteButton() { AotoDeleteButton = setTimeout(async function() { const deleteButton = document.querySelector('button.__button-zm13ws-lsme.n-button.n-button--error-type.n-button--small-type'); if (deleteButton) { deleteButton.click(); } startAotoDeleteButton(); }, 300); } // 自动提交队列功能 let queueTimer = null; console.log('初始化queueTimer函数'); function startQueueTimer() { queueTimer = setInterval(function() { const queueFullPopup = document.querySelector('div.n-dialog__content'); if (queueFullPopup && queueFullPopup.innerText === 'WORKS_QUEUE_FULL') { clearInterval(queueTimer); setTimeout(function() { const queueWarningButton = document.querySelector('button.__button-zm13ws-lsmw.n-button.n-button--warning-type.n-button--small-type'); if (queueWarningButton) { queueWarningButton.click(); setTimeout(function() { const queueSubmitButton = document.querySelector('button.vi-button.vi-button--size-medium.vi-button--type-primary.vi-button--full'); if (queueSubmitButton) { queueSubmitButton.click(); console.log('执行了一次提交队列'); startQueueTimer(); } }, 5500); } }, 20); } }, 20); } // 无限抽卡功能 let InfiniteTimer = null; console.log('初始化InfiniteTimer函数'); async function startInfiniteTimer() { console.log('startInfiniteTimer'); InfiniteTimer = setInterval(async function() { const InfiniteDrawingpage = document.querySelector('button.vi-button.vi-button--size-medium.vi-button--type-primary.vi-button--full'); if (InfiniteDrawingpage) { console.log('检测到生成按钮'); InfiniteDrawingpage.click(); console.log('click'); } setTimeout(function() { const queueWarningButton = document.querySelector('button.__button-zm13ws-lsmw.n-button.n-button--warning-type.n-button--small-type'); if (queueWarningButton) { console.log('检测到队列弹窗'); queueWarningButton.click(); console.log('click'); } }, 50); }, 5000); } // 主逻辑 function main() { const firstLevelMenu = createFirstLevelMenu(); const secondLevelMenu = createSecondLevelMenu(); // 鼠标移动至一级菜单显示范围时,显示二级菜单 firstLevelMenu.addEventListener('mouseenter', function() { showMenu(secondLevelMenu); }); // 鼠标移出二级菜单显示范围时,隐藏二级菜单 secondLevelMenu.addEventListener('mouseleave', function() { hideMenu(secondLevelMenu); }); // 添加勾选框改变事件监听:自动确认删除 const checkboxDelete = secondLevelMenu.querySelector('input[type="checkbox"]'); const checkboxQueue = secondLevelMenu.querySelectorAll('input[type="checkbox"]')[1]; const checkboxInfinite = secondLevelMenu.querySelectorAll('input[type="checkbox"]')[2]; checkboxDelete.addEventListener('change', function() { const enabled = checkboxDelete.checked; setButtonState(enabled); if (enabled) { startAotoDeleteButton(); console.log('开启自动确认删除'); } else { clearInterval(AotoDeleteButton); console.log('关闭自动确认删除'); } }); // 添加勾选框改变事件监听:自动提交队列 checkboxQueue.addEventListener('change', function() { const enabled = checkboxQueue.checked; setQueueState(enabled); if (enabled) { checkboxInfinite.checked = false; clearInterval(InfiniteTimer); startQueueTimer(); console.log('开启自动提交队列'); } else { clearInterval(queueTimer); console.log('关闭自动提交队列'); } }); // 添加勾选框改变事件监听:无限抽卡 checkboxInfinite.addEventListener('change', function() { const enabled = checkboxInfinite.checked; setQueueInfinite(enabled); if (enabled) { checkboxQueue.checked = false; clearInterval(queueTimer); startInfiniteTimer(); console.log('开启无限抽卡'); } else { clearInterval(InfiniteTimer); console.log('关闭无限抽卡'); } }); // 初始化自动确认删除功能状态 if (getButtonState()) { checkboxDelete.checked = true; startAotoDeleteButton(); } // 初始化自动提交队列功能状态 if (getQueueState()) { checkboxQueue.checked = true; startQueueTimer(); } // 初始化无限抽卡功能状态 if (getInfiniteState()) { checkboxInfinite.checked = true; startInfiniteTimer(); } } // 执行主逻辑 main(); }, 3000)();