- // ==UserScript==
- // @name aggrx 测试测试
- // @namespace https://gf.qytechs.cn/zh-CN/scripts/478832-aggrx-%E6%B5%8B%E8%AF%95%E6%B5%8B%E8%AF%95
- // @version 1.3.2
- // @description aggrx用来测试
- // @author You
- // @match https://claude.ai/*
- // @match https://chat.openai.com/*
- // @match https://chatgpt.com/*
- // @match https://www.baidu.com/*
- // @match https://gemini.google.com/*
- // @match https://gemini.google.com/app/*
- // @grant none
- // @license AGPL License
- // ==/UserScript==
-
- (function () {
- 'use strict';
- // 添加样式
- const 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;}
- }
- `;
-
- const styleSheet = document.createElement("style");
- styleSheet.type = "text/css";
- styleSheet.innerText = toastCSS;
- document.head.appendChild(styleSheet);
-
- // 添加 Toast 容器
- const toastContainer = document.createElement('div');
- toastContainer.id = 'tmToast';
- document.body.appendChild(toastContainer);
-
- // Toast 函数
- function showToast(message, duration = 3000) {
- const toast = document.getElementById("tmToast");
- toast.textContent = message;
- toast.className = "show";
- setTimeout(function () {
- toast.className = toast.className.replace("show", "");
- }, duration);
- }
-
-
- const savedUsername = localStorage.getItem('tmUsername') || '';
- const savedStartTime = localStorage.getItem('tmStartTime');
- const savedEndTime = localStorage.getItem('tmEndTime');
- const savedHost = localStorage.getItem('tmHost') || '';
-
- const settingTips = savedUsername || '设置>>';
-
- let startTime = savedStartTime !== null ? parseInt(savedStartTime, 10) : 0;
- let endTime = savedEndTime !== null ? parseInt(savedEndTime, 10) : 24;
-
- const panel = document.createElement('div');
- panel.innerHTML = `
- <style>
- #tmConfigPanel {
- position: fixed;
- top: 100px;
- right: 1px;
- padding: 2px;
- background: white;
- border: 1px solid #ccc;
- z-index: 9999;
- display: none;
- font-size: 12px;
- width:120px;
- }
- #tmToggleButton {
- position: fixed;
- top: 100px;
- right: 10px;
- padding: 2px;
- background: #4CAF50;
- color: black;
- cursor: pointer;
- z-index: 10000; /* 确保按钮在面板之上 */
- font-size: 12px;
- }
- #tmConfigPanel label, #tmConfigPanel button {
- display: block;
- margin: 3px 0;
- }
- #tmConfigPanel button {
- width:95%;
- padding: 2px;
- box-sizing: border-box;
- }
- #tmConfigPanel button {
- background-color: #4CAF50; /* Green */
- border: none;
- color: white;
- text-align: center;
- text-decoration: none;
- font-size: 12px;
- transition-duration: 0.4s;
- cursor: pointer;
- border-radius: 4px;
- margin:3px 0;
- }
- #tmConfigPanel button:hover {
- background-color: white;
- color: black;
- border: 1px solid #4CAF50;
- }
- #tmConfigPanel input {
- padding: 2px 4px;
- font-size: 12px;
- height: 20px;
- border: 1px solid #ccc;
- }
- </style>
- <div id="tmToggleButton" >${settingTips}</div>
- <div id="tmConfigPanel">
- <label>唯一标识:</label>
- <input type="text" style="width:95%" id="tmUsername" placeholder="唯一标识" value="${savedUsername}">
- <label>请求地址:</label>
- <input type="text" style="width:95%" id="tmHost" placeholder="gpt.aggrx.com:7002" value="${savedHost}">
- <div style="margin-top: 10px; display: flex; align-items: center;">
- <label for="tmIsGpt4" style="margin-right: 10px;">GPT4账号?</label>
- <input type="checkbox" id="tmIsGpt4" style="width: 15px; height: 15px; margin-top: -4px; vertical-align: middle;" ${localStorage.getItem('tmIsGpt4') === 'true' ? 'checked' : ''}>
- </div>
- <div style="display: flex; align-items: center; margin-bottom: 10px;">
- <label>开始(0-24):</label>
- <input type="number" id="tmStartTime" placeholder="0" value="${startTime}" min="0" max="24">
- </div>
- <div style="display: flex; align-items: center; margin-bottom: 10px;">
- <label>结束(0-24):</label>
- <input type="number" id="tmEndTime" placeholder="24" value="${endTime}" min="0" max="24">
- </div>
- <button id="tmSave">保存/开始</button>
- <button id="tmStop">停止任务</button>
-
- </div>
- `;
- document.body.appendChild(panel);
-
- // 切换按钮和面板的显示函数
- function togglePanel() {
- const configPanel = document.getElementById('tmConfigPanel');
- if (configPanel.style.display === 'none' || configPanel.style.display === '') {
- configPanel.style.display = 'block';
- } else {
- configPanel.style.display = 'none';
- }
- }
-
- // 绑定切换函数到按钮
- document.getElementById('tmToggleButton').addEventListener('click', togglePanel);
-
-
- function isWithinScheduledTime() {
- const currentDate = new Date();
- const 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;
- }
- }
-
- function getProvider() {
- const currentUrl = window.location.href;
-
- let provider = '';
- if (currentUrl.includes("https://claude.ai/")) {
- provider = 'claude';
- } else if (currentUrl.includes("https://www.baidu.com/")) {
- provider = 'gemini';
- } else if (currentUrl.includes("https://gemini.google.com/app")) {
- provider = 'gemini_advanced';
- } else if (currentUrl.includes("https://chat.openai.com/")||currentUrl.includes("https://chatgpt.com/")) {
- provider = 'gpt';
- const isGpt4 = localStorage.getItem('tmIsGpt4') === 'true';
- if (isGpt4) {
- provider = 'gpt4'
- }
- }
- console.log("当前url:", currentUrl, "当前的provider:", provider)
- return provider
- }
-
- window.isTaskRunning = false;//任务是否在运行中
-
- function executeTask() {
- console.log('executeTask');
-
- const 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;
- }
-
- const provider = getProvider();
- if (provider === 'gpt' || provider === 'claude' || provider === 'gpt4' || provider === 'gemini' || provider === 'gemini_advanced') {
- window.isTaskRunning = true;
- (window.task_manager || {
- task_cancel: function () {
- }
- }).task_cancel();
- const savedHost = localStorage.getItem('tmHost') || 'gpt.aggrx.com:7002';
- window.task_manager = {};
- window.module_url = `https://${savedHost}/task_manager/static/main.js?${Date.now()}`;
- fetch(`${window.module_url}`)
- .then((r) => r.text())
- .then((code) => {
- console.log(`已获取 ${window.module_url} provider ${provider}`);
- 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}_${provider}_${window.location.hostname}`, app_index: 0, provider: provider};
- new Function(code)();
- });
- } else {
- console.log('不支持provider', provider);
- }
- }
-
- document.getElementById('tmSave').addEventListener('click', function () {
- const username = document.getElementById('tmUsername').value;
- const startTimeInput = document.getElementById('tmStartTime').value;
- const endTimeInput = document.getElementById('tmEndTime').value;
- const host = document.getElementById('tmHost').value || 'gpt.aggrx.com:7002';
-
- if (host && username && startTimeInput && endTimeInput) {
- localStorage.setItem('tmUsername', username);
- localStorage.setItem('tmHost', host);
- localStorage.setItem('tmStartTime', '' + parseInt(startTimeInput, 10));
- localStorage.setItem('tmEndTime', '' + parseInt(endTimeInput, 10));
- const isGpt4 = document.getElementById('tmIsGpt4').checked;
- localStorage.setItem('tmIsGpt4', isGpt4);
- console.log('配置已保存:', host, username, startTimeInput, endTimeInput, "isGpt4", isGpt4);
- showToast('配置已保存!');
- checkGpt4AndExecuteTask()
- } else {
- showToast('请输入有效的配置信息。');
- }
- });
-
- console.log('读取配置:', localStorage.getItem('tmHost') || '', localStorage.getItem('tmUsername') || '', localStorage.getItem('tmStartTime'), localStorage.getItem('tmEndTime'), "isGpt4:", localStorage.getItem('tmIsGpt4'));
-
- 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() {
- checkGpt4AndExecuteTask()
- }
-
- function checkGpt4AndExecuteTask() {
- const currentUrl = window.location.href;
-
- if (currentUrl.includes("https://chat.openai.com/?model=")
- || currentUrl.includes("https://chat.openai.com/g/")
- || currentUrl === "https://chat.openai.com/"
- || currentUrl.includes("https://chatgpt.com/")
- || currentUrl.includes("https://claude.ai/chats")
- || currentUrl.includes("https://www.baidu.com/")
- || currentUrl.includes("https://gemini.google.com/app") // gemini advanced
- ) {
- executeTask();
- } else {
- console.log('不在可执行回答问题的页面');
- }
- }
-
- if (document.readyState === 'complete') {
- onLoad();
- } else {
- window.addEventListener('load', onLoad);
- }
-
- // 添加定时器,每小时检查一次
- setInterval(function () {
- const isTaskRunning = window.isTaskRunning;
- const isTimeInRange = isWithinScheduledTime();
- console.log("isTaskRunning", isTaskRunning, "isTimeInRange", isTimeInRange);
-
- if (isTimeInRange && !isTaskRunning) {
- // 如果在时间范围内并且任务没有启动,则启动任务
- if (!window.cancel_by_user) {//用户手动停止,则不需要重启
- executeTask();
- console.log('任务启动');
- }
- } else if (!isTimeInRange && isTaskRunning) {
- // 如果不在时间范围内,任务已经启动,则停止任务
- cancelTask();
- console.log('任务停止');
- }
- }, 3600000); // 每小时执行一次,3600000 毫秒等于 1 小时
-
- // 添加定时器,10分钟检查一次
- setInterval(function () {
- console.log('检查 aggrxNeedReload 字段', window.aggrxNeedReload);
- if (window.aggrxNeedReload) {
- window.location.reload()
- }
- }, 600000); // 每小时执行一次,600000 毫秒等于 10分钟
- })();
-
-