您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
aggrx用来测试
当前为
// ==UserScript== // @name aggrx 测试测试 // @namespace http://tampermonkey.net/ // @version 1.1.5 // @description aggrx用来测试 // @author You // @match https://claude.ai/* // @match https://chat.openai.com/* // @grant none // @license AGPL License // ==/UserScript== (function() { 'use strict'; // 添加样式 var toastCSS = ` #tmToast { visibility: hidden; min-width: 250px; margin-left: -125px; background-color: #333; color: #fff; text-align: center; border-radius: 2px; padding: 16px; position: fixed; z-index: 1; left: 50%; bottom: 30px; font-size: 17px; } #tmToast.show { visibility: visible; -webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s; animation: fadein 0.5s, fadeout 0.5s 2.5s; } @-webkit-keyframes fadein { from {bottom: 0; opacity: 0;} to {bottom: 30px; opacity: 1;} } @keyframes fadein { from {bottom: 0; opacity: 0;} to {bottom: 30px; opacity: 1;} } @-webkit-keyframes fadeout { from {bottom: 30px; opacity: 1;} to {bottom: 0; opacity: 0;} } @keyframes fadeout { from {bottom: 30px; opacity: 1;} to {bottom: 0; opacity: 0;} } `; var styleSheet = document.createElement("style"); styleSheet.type = "text/css"; styleSheet.innerText = toastCSS; document.head.appendChild(styleSheet); // 添加 Toast 容器 var toastContainer = document.createElement('div'); toastContainer.id = 'tmToast'; document.body.appendChild(toastContainer); // Toast 函数 function showToast(message, duration = 3000) { var toast = document.getElementById("tmToast"); toast.textContent = message; toast.className = "show"; setTimeout(function(){ toast.className = toast.className.replace("show", ""); }, duration); } var savedUsername = localStorage.getItem('tmUsername') || ''; var savedStartTime = localStorage.getItem('tmStartTime'); var savedEndTime = localStorage.getItem('tmEndTime'); var startTime = savedStartTime !== null ? parseInt(savedStartTime, 10) : ''; var endTime = savedEndTime !== null ? parseInt(savedEndTime, 10) : ''; var panel = document.createElement('div'); panel.innerHTML = ` <style> #tmConfigPanel { position: fixed; top: 10px; right: 10px; padding: 10px; background: white; border: 1px solid #ccc; z-index: 9999; display: block; /* 初始设置为不显示 */ } #tmToggleButton { position: fixed; top: 10px; right: 10px; padding: 5px 10px; background: #4CAF50; color: white; cursor: pointer; z-index: 10000; /* 确保按钮在面板之上 */ } #tmConfigPanel label, #tmConfigPanel input, #tmConfigPanel button { display: block; margin: 5px 0; } #tmConfigPanel input, #tmConfigPanel button { padding: 5px; width: 95%; box-sizing: border-box; } #tmConfigPanel button { background-color: #4CAF50; /* Green */ border: none; color: white; text-align: center; text-decoration: none; font-size: 16px; transition-duration: 0.4s; cursor: pointer; border-radius: 4px; } #tmConfigPanel button:hover { background-color: white; color: black; border: 1px solid #4CAF50; } </style> <div id="tmToggleButton">设置>></div> <div id="tmConfigPanel"> <label>唯一标识:</label> <input type="text" id="tmUsername" placeholder="请输入您的唯一标识" value="${savedUsername}"> <label>开始时间(0-24):</label> <input type="number" id="tmStartTime" placeholder="0" value="${startTime}" min="0" max="24"> <label>结束时间(0-24):</label> <input type="number" id="tmEndTime" placeholder="24" value="${endTime}" min="0" max="24"> <button id="tmSave">保存</button> <button id="tmStop">停止任务</button> </div> `; document.body.appendChild(panel); // 切换按钮和面板的显示函数 function togglePanel() { var configPanel = document.getElementById('tmConfigPanel'); if (configPanel.style.display === 'none') { configPanel.style.display = 'block'; } else { configPanel.style.display = 'none'; } } // 绑定切换函数到按钮 document.getElementById('tmToggleButton').addEventListener('click', togglePanel); function isWithinScheduledTime() { var currentDate = new Date(); var currentHour = currentDate.getHours(); console.log(startTime,endTime,currentHour) if (startTime < endTime) { // 同一天内的时间段 return currentHour >= startTime && currentHour < endTime; } else { // 跨夜执行,分为两段时间:startTime 到午夜(24点),和午夜(0点)到 endTime return currentHour >= startTime || currentHour < endTime; } } window.isTaskRunning = false;//任务是否在运行中 function executeTask() { console.log('executeTask'); var username = localStorage.getItem('tmUsername') || ''; if(!username) { // 使用示例 showToast('请在执行任务前输入并保存您的用户名。'); return; } startTime = parseInt(localStorage.getItem('tmStartTime'), 10) || 0; endTime = parseInt(localStorage.getItem('tmEndTime'), 10) || 24; if(!isWithinScheduledTime()) { console.log('当前时间不在设定的执行时间范围内'); cancelTask() return; } if (window.isTaskRunning) { console.log('任务已经在运行了!!'); return; } var currentUrl = window.location.href; var provider = ''; if(currentUrl.includes("https://claude.ai/")) { provider = 'claude'; } else if(currentUrl.includes("https://chat.openai.com/")) { provider = 'gpt'; } if(provider === 'gpt' || provider === 'claude') { window.isTaskRunning = true; (window.task_manager || { task_cancel: function () {} }).task_cancel(); window.task_manager = {}; window.module_url = `https://gpt.aggrx.com:7002/task_manager/static/main.js?${Date.now()}`; fetch(`${window.module_url}`) .then((r) => r.text()) .then((code) => { console.log(`已获取 ${window.module_url}`); window.module_target = window.task_manager; window.module_dep = {}; const windowX = window.screenX || window.screenLeft || window.screenLeft; const windowY = window.screenY || window.screenTop || window.screenTop; console.log("浏览器窗口的X坐标:" + windowX); console.log("浏览器窗口的Y坐标:" + windowY); window.module_data = {client: `${username} ${windowX}_${windowY}_${window.location.hostname}`, app_index: 0, provider: provider}; new Function(code)(); }); } } document.getElementById('tmSave').addEventListener('click', function() { var username = document.getElementById('tmUsername').value; var startTimeInput = document.getElementById('tmStartTime').value; var endTimeInput = document.getElementById('tmEndTime').value; if(username && startTimeInput && endTimeInput) { localStorage.setItem('tmUsername', username); localStorage.setItem('tmStartTime', parseInt(startTimeInput, 10)); localStorage.setItem('tmEndTime', parseInt(endTimeInput, 10)); console.log('配置已保存:', username, startTimeInput, endTimeInput); showToast('配置已保存!'); executeTask(); } else { showToast('请输入有效的配置信息。'); } }); function cancelTask() { (window.task_manager || { task_cancel: function () {} }).task_cancel(); window.isTaskRunning = false; } window.cancel_by_user = false; document.getElementById('tmStop').addEventListener('click', function() { cancelTask() window.cancel_by_user = true; showToast('任务已停止。'); }); function onLoad() { executeTask(); } if (document.readyState === 'complete') { onLoad(); } else { window.addEventListener('load', onLoad); } // 添加定时器,每小时检查一次 setInterval(function() { var isTaskRunning = window.isTaskRunning; var isTimeInRange = isWithinScheduledTime(); console.log(isTaskRunning, isTimeInRange); if (isTimeInRange && !isTaskRunning) { // 如果在时间范围内并且任务没有启动,则启动任务 if (!window.cancel_by_user) {//用户手动停止,则不需要重启 executeTask(); console.log('任务启动'); } } else if (!isTimeInRange && isTaskRunning) { // 如果不在时间范围内,任务已经启动,则停止任务 cancelTask(); console.log('任务停止'); } }, 3600000); // 每小时执行一次,3600000 毫秒等于 1 小时 })();