腾讯元宝自动切换模型(记忆版)

[带记忆功能]自动切换DeepSeek+智能同步用户设置+状态持久化

目前為 2025-02-25 提交的版本,檢視 最新版本

// ==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);
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址