OpenAI Chat AutoFiller

Automatically fill in chat messages on OpenAI Chat using a predefined text when checkbox is checked and user completes a message.补充说明:panel在窗口右上角, 触发条件为“///”。3.0更新说明:可以存储选择最近 3-4 个之前用户使用的自动填充文本

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

You will need to install an extension such as Tampermonkey to install this script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         OpenAI Chat AutoFiller
// @namespace    openai-chat-autofiller
// @version      3.1
// @description  Automatically fill in chat messages on OpenAI Chat using a predefined text when checkbox is checked and user completes a message.补充说明:panel在窗口右上角, 触发条件为“///”。3.0更新说明:可以存储选择最近 3-4 个之前用户使用的自动填充文本
// @author       ChatGPT & philos
// @match        https://chat.openai.com/*
// @grant        none
// ==/UserScript==

(function() {
  const recentAutoFillTexts = [];

  const controlPanel = document.createElement('div');
  controlPanel.style.position = 'fixed';
  controlPanel.style.top = '0';
  controlPanel.style.right = '0';
  controlPanel.style.padding = '10px';
  controlPanel.style.backgroundColor = '#fff';
  controlPanel.style.border = '1px solid #ccc';
  controlPanel.style.display = 'flex';
  controlPanel.style.alignItems = 'center';

  const checkbox = document.createElement('input');
  checkbox.type = 'checkbox';
  checkbox.id = 'autofill-checkbox';
  controlPanel.appendChild(checkbox);

  const inputGroup = document.createElement('div');
  inputGroup.style.display = 'none';

  const fillText = document.createElement('input');
  fillText.type = 'text';
  fillText.id = 'autofill-text';
  fillText.value = '每段话的开头请加上“【见字如晤】”回答我';
  fillText.style.width = 'calc(100% - 30px)';
  inputGroup.appendChild(fillText);

  const dropdown = document.createElement('select');
  dropdown.id = 'autofill-dropdown';
  dropdown.style.width = '30px';
  dropdown.style.overflow = 'hidden';
  inputGroup.appendChild(dropdown);

  controlPanel.appendChild(inputGroup);
  document.body.appendChild(controlPanel);

  checkbox.addEventListener('change', () => {
    if (checkbox.checked) {
      inputGroup.style.display = 'flex';
      document.querySelector('textarea').addEventListener('input', autofillText);
    } else {
      inputGroup.style.display = 'none';
      document.querySelector('textarea').removeEventListener('input', autofillText);
    }
  });

  const autofillText = () => {
    const chatInput = document.querySelector('textarea');
    const lastChars = chatInput.value.slice(-3);
    if (lastChars === '///') {
      chatInput.value = chatInput.value.slice(0, -3);
      recentAutoFillTexts.unshift(fillText.value);
      if (recentAutoFillTexts.length > 4) {
        recentAutoFillTexts.pop();
      }
      updateDropdown();
      chatInput.value += fillText.value + '\n';
    }
  };

  function updateDropdown() {
    dropdown.innerHTML = '';
    recentAutoFillTexts.forEach((text, index) => {
      const option = document.createElement('option');
      option.value = index;
      option.text = text;
      dropdown.appendChild(option);
    });

    dropdown.addEventListener('change', () => {
      const selectedIndex = dropdown.value;
      if (selectedIndex !== '') {
        fillText.value = recentAutoFillTexts[selectedIndex];
      }
    });
  }
})();