Greasy Fork

来自缓存

ChatGLM 插嘴功能

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

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

(function () {
  "use strict";
  //点击新建对话也终止输出
  const hookNewButton = () => {
    {
      const element = document.getElementsByClassName("add-session-icon")[0];
      if (!element) {
        setTimeout(() => hookNewButton(), 0);
        return;
      }

      element.style.pointEvents = "none"
      const cover = document.createElement("div");
      cover.className = "el-tooltip add-session-icon";
      cover.setAttribute("tabindex", "0");
      cover.setAttribute("aria-describedby", element.getAttribute("aria-describedby"));
      let dataTag = "";
      {
        const dataTagStart = element.outerHTML.indexOf("data-v-");
        const dataTagEnd = element.outerHTML.indexOf("=", dataTagStart);
        dataTag = element.outerHTML.substring(dataTagStart, dataTagEnd)
      }
      cover.setAttribute(dataTag, "1");
      element.parentElement.appendChild(cover);
      cover.onclick = () => {
        stopOutput()
        setTimeout(() => element.click(), 0);
      }
    }
  };




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