// ==UserScript==
// @name 腾讯元宝自动切换模型(记忆版)
// @namespace http://tampermonkey.net/
// @version 1.5
// @description [带记忆功能]自动切换DeepSeek+智能同步用户设置+状态持久化
// @license MIT
// @author YourName
// @match https://yuanbao.tencent.com/*
// @icon https://cdn-bot.hunyuan.tencent.com/logo.png
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_addStyle
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
// 增强配置系统
const CONFIG = {
TARGET_MODEL: 'DeepSeek',
DEFAULT_SETTINGS: {
DEEP_THINK: true,
WEB_SEARCH: true
},
RETRY_INTERVAL: 800,
MAX_RETRY: 6,
SYNC_DELAY: 1200
};
// 智能选择器系统
const SELECTORS = {
MODEL_SWITCH: 'button[dt-button-id="model_switch"]',
MODEL_LIST_ITEM: modelName => `//div[contains(@class,"drop-down-item")][.//div[text()="${modelName}"]]`,
DEEP_THINK: 'button[dt-button-id="deep_think"]',
WEB_SEARCH: 'button[dt-button-id="online_search"]',
CHAT_CONTAINER: '.chat-container',
INPUT_AREA: '.input-area'
};
// 状态管理系统
let isProcessing = false;
let retryCount = 0;
let userSettings = {};
// 存储系统初始化
const initStorage = () => {
userSettings = Object.fromEntries(
Object.keys(CONFIG.DEFAULT_SETTINGS).map(key => [
key,
GM_getValue(key, CONFIG.DEFAULT_SETTINGS[key])
])
);
};
// 元素等待系统
const waitForElement = async (selector, isXPath = false) => {
return new Promise((resolve, reject) => {
const startTime = Date.now();
const checker = () => {
let element;
if (isXPath) {
const result = document.evaluate(
selector,
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
);
element = result.singleNodeValue;
} else {
element = document.querySelector(selector);
}
if (element) {
resolve(element);
} else if (Date.now() - startTime < CONFIG.RETRY_INTERVAL * CONFIG.MAX_RETRY) {
setTimeout(checker, CONFIG.RETRY_INTERVAL);
} else {
reject(new Error(`元素加载超时: ${selector}`));
}
};
checker();
});
};
// 安全交互系统
const safeClick = async (element, retries = 3) => {
try {
element.scrollIntoView({behavior: 'auto', block: 'center'});
await new Promise(r => setTimeout(r, 200));
element.click();
await new Promise(r => setTimeout(r, 300));
} catch (error) {
if (retries > 0) {
await safeClick(element, retries - 1);
} else {
throw new Error('元素点击失败');
}
}
};
// 模型控制系统
const switchModel = async () => {
if (isProcessing) return;
isProcessing = true;
try {
// 打开模型切换面板
const switchBtn = await waitForElement(SELECTORS.MODEL_SWITCH);
await safeClick(switchBtn);
// 选择目标模型
const modelItem = await waitForElement(
SELECTORS.MODEL_LIST_ITEM(CONFIG.TARGET_MODEL),
true
);
await safeClick(modelItem);
console.log('模型切换成功');
// 等待界面更新
await new Promise(r => setTimeout(r, CONFIG.SYNC_DELAY));
await applyUserSettings();
} catch (error) {
console.error('模型控制异常:', error);
} finally {
isProcessing = false;
retryCount = 0;
}
};
// 用户设置应用系统
const applyUserSettings = async () => {
const syncFeature = async (selector, settingKey) => {
try {
const element = await waitForElement(selector);
const shouldActive = userSettings[settingKey];
const isActive = element.classList.contains('style__checked___EGENo');
if (shouldActive !== isActive) {
await safeClick(element);
console.log(`${settingKey} 已同步: ${shouldActive}`);
}
} catch (error) {
console.error(`${settingKey} 同步失败:`, error);
}
};
await Promise.all([
syncFeature(SELECTORS.DEEP_THINK, 'DEEP_THINK'),
syncFeature(SELECTORS.WEB_SEARCH, 'WEB_SEARCH')
]);
};
// 用户行为监听系统
const initUserListener = () => {
// 监听功能开关变化
const handleSettingChange = (event, settingKey) => {
const isActive = event.target.closest('button')
.classList.contains('style__checked___EGENo');
GM_setValue(settingKey, isActive);
userSettings[settingKey] = isActive;
};
document.addEventListener('click', event => {
if (event.target.closest(SELECTORS.WEB_SEARCH)) {
handleSettingChange(event, 'WEB_SEARCH');
}
if (event.target.closest(SELECTORS.DEEP_THINK)) {
handleSettingChange(event, 'DEEP_THINK');
}
});
};
// 动态样式注入
const injectStyles = () => {
GM_addStyle(`
.tamper-status {
position: fixed;
bottom: 15px;
right: 15px;
padding: 8px 15px;
background: rgba(40,40,40,0.9);
color: #00ff9d;
border-radius: 6px;
font-family: 'Segoe UI', sans-serif;
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
z-index: 99999;
backdrop-filter: blur(3px);
}
`);
const statusDiv = document.createElement('div');
statusDiv.className = 'tamper-status';
statusDiv.textContent = '✓ 优化脚本运行中';
document.body.appendChild(statusDiv);
};
// 主初始化系统
const init = async () => {
initStorage();
injectStyles();
initUserListener();
const observer = new MutationObserver(async () => {
try {
const currentModel = document.querySelector(SELECTORS.MODEL_SWITCH)
?.querySelector('.t-button__text')?.textContent;
if (currentModel !== CONFIG.TARGET_MODEL) {
await switchModel();
} else {
await applyUserSettings();
}
} catch (error) {
console.error('界面监控异常:', error);
}
});
observer.observe(document.body, {
childList: true,
subtree: true,
attributes: false
});
// 初始同步
};
// 启动程序
if (document.readyState === 'complete') {
init();
} else {
window.addEventListener('load', init);
}
})();