Greasy Fork

Greasy Fork is available in English.

ChatGLM 插嘴功能

当你在chatglm的对话框里按下enter建时,如果ai仍在说话,会自动停止ai发言并发送你的消息

目前为 2024-03-08 提交的版本,查看 最新版本

// ==UserScript==
// @name         ChatGLM 插嘴功能
// @namespace    http://tampermonkey.net/
// @version      0.8
// @description  当你在chatglm的对话框里按下enter建时,如果ai仍在说话,会自动停止ai发言并发送你的消息
// @author       You
// @match        https://chatglm.cn/*
// @grant        none
// @license MIT
// ==/UserScript==

(function () {
    'use strict';
    //点击新建对话也终止输出
    document.getElementsByClassName("add-session-icon")[0].addEventListener("click", () => stopOutput)

    function bindEventToTextarea() {
        // 获取页面中的第一个<textarea>元素
        var textarea = document.querySelector('textarea');
        if (textarea) {
            // 清除之前可能绑定的事件监听器
            textarea.removeEventListener('keydown', handleKeyDown);
            // 重新绑定事件监听器
            textarea.addEventListener('keydown', handleKeyDown);
        }
    }

    function handleKeyDown(event) {
        // 检查是否是单个Enter键按下,并且事件的目标元素是<textarea>
        if (event.key === 'Enter' && event.keyCode === 13 && !event.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey && event.target.tagName === 'TEXTAREA') {
            console.debug(event);
            stopOutput()
        }
    }
    function stopOutput() {
        // 查找类名为"btn stop"的按钮
        var stopButton = document.querySelector('.btn.stop');
        // 如果找到了按钮,并且按钮文本包含"停止生成",则触发click事件
        if (stopButton && stopButton.textContent.includes("停止生成")) {
            stopButton.click();
        }
    }
    // 使用setInterval每隔一秒重新绑定事件监听器
    setInterval(bindEventToTextarea, 1000);

    // 初始绑定
    bindEventToTextarea();
})();