Greasy Fork is available in English.

copy-chatgpt-input

chatgpt发送前自动复制输入框内容到剪切板

// ==UserScript==
// @name         copy-chatgpt-input
// @namespace    http://tampermonkey.net/
// @version      2024-02-20
// @description  chatgpt发送前自动复制输入框内容到剪切板
// @author       SeekingLight233
// @match        https://chat.openai.com
// @icon         https://www.google.com/s2/favicons?sz=64&domain=openai.com
// @grant        none
// @license MIT
// ==/UserScript==

(function () {
  'use strict';

  main()

  let copyTmp = "";

  function main() {
    console.log("init copy-input");
    const sendBtn = getSendBtn();
    const textAreaNode = getTextAreaNode();

    textAreaNode.addEventListener("input", (e) => {
      const val = e.target.value;
      copyTmp = val;
    })

    document.body.addEventListener("click", (event) => {
      const sendBtn = event.target.closest('[data-testid="send-button"]');
      if (sendBtn) {
        copyValue(copyTmp);
      }
    });

    document.addEventListener("keydown", function (event) {
      if ((event.metaKey || event.ctrlKey) && event.key === "Enter") {
        copyValue(copyTmp)
      }
    })
  }

  function copyValue(value) {
    navigator.clipboard.writeText(value).then(() => {
      // console.log('copy input:', value);
    }).catch(err => {
      // console.error('copy failed', err);
    });
  }

  function getTextAreaNode() {
    return document.getElementsByTagName("textarea")?.[0];
  }

  function getTextAreaValue() {
    const node = getTextAreaNode();
    return node?.value ?? ""
  }

  function getSendBtn() {
    const textAreaNode = getTextAreaNode();
    const pNode = textAreaNode.parentElement;
    const sendBtn = pNode.querySelector('[data-testid="send-button"]');
    return sendBtn;
  }

})();