Greasy Fork 支持简体中文。

Qwen Chat自动选择模型

Automatically select the model for Qwen Chat

// ==UserScript==
// @name         Qwen Chat自动选择模型
// @namespace    http://tampermonkey.net/
// @version      1.0.0
// @description  Automatically select the model for Qwen Chat
// @author       tgxhx
// @license      MIT
// @match        https://chat.qwen.ai/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=qwen.ai
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_registerMenuCommand
// @run-at       document-idle
// ==/UserScript==

(function() {
    'use strict';

    // 从配置中获取modelName
    let modelName = GM_getValue('modelName') || 'QwQ-32B';

    // 注册配置菜单
    GM_registerMenuCommand('设置目标模型名称', () => {
        const newModelName = prompt('请输入要自动选择的模型名称(默认:QwQ-32B):', modelName);
        if (newModelName !== null) {
            modelName = newModelName;
            GM_setValue('modelName', newModelName);
            console.log(`[配置更新] 模型名称已更新为:${newModelName}`);
        }
    });

    function log(message) {
        console.log(`[${new Date().toISOString()}] ${message}`);
    }

    let intervalId; // 全局变量保存定时器ID

    // 主逻辑函数:每秒执行一次
    function mainLoop() {
        // 步骤1:查找元素A
        const elementA = document.querySelector('[aria-label="选择一个模型"][data-state] > div > div');

        if (elementA) {
            const currentText = elementA.textContent.trim();
            log(`元素A当前文本:${currentText}`);

            if (currentText === modelName) {
                log('元素A文本正确,清除定时器');
                clearInterval(intervalId); // 检测到正确时停止轮询
            } else {
                log('元素A文本不匹配,开始点击');
                elementA.click();

                // 步骤2:延迟200ms后查找菜单和目标元素B
                setTimeout(() => {
                    const menuContainer = document.querySelector('[role="menu"]');
                    if (menuContainer) {
                        log('找到菜单容器,开始查找目标元素B');

                        // 遍历菜单容器查找文本为"QwQ-32B"的元素
                        let targetElement = null;
                        menuContainer.querySelectorAll('*').forEach(el => {
                            if (modelName && el.textContent.trim() === modelName) {
                                targetElement = el;
                                return; // 找到后终止循环
                            }
                        });

                        if (targetElement) {
                            log('找到目标元素B,点击');
                            targetElement.click();
                        } else {
                            log('未找到目标元素B');
                        }
                    } else {
                        log('未找到菜单容器');
                    }
                }, 200);
            }
        } else {
            log('未找到元素A');
        }
    }

    setTimeout(() => {
        const newChatButton = document.getElementById('sidebar-new-chat-button');

        if (newChatButton) {
            log('找到"新建对话"按钮,开始监听点击事件');

            newChatButton.addEventListener('click', () => {
                log('检测到新建对话按钮点击,重新启动定时器');
                // 重新开启定时器
                intervalId = setInterval(mainLoop, 300);
                log('定时器已重新启动');
            });
        } else {
            log('未找到"新建对话"按钮');
        }
    }, 3000)

    // 初始化定时器(页面加载时先启动)
    log('页面加载完成,启动定时器');
    intervalId = setInterval(mainLoop, 500);
})();