ChatGPT Quick Prompts

ChatGPT 智能 Prompts 可以为你带来更好的使用体验助你训练好用的ChatGPT

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

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

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

/*!
// ==UserScript==
// @name          ChatGPT Quick Prompts 
// @namespace     https://github.com/Liugq5713/quick-prompt
// @version       0.0.8
// @description   ChatGPT 智能 Prompts 可以为你带来更好的使用体验助你训练好用的ChatGPT
// @author        lynden
// @match         *://chatgpt.com/*
// @grant         none
// ==/UserScript==
*/
;(function () {
  'use strict'
  if (document.querySelector('#chatgptHelper')) {
    return
  }
  var SHORTCUTS = {
    english: [
      ['sentence', '请将下面句子改写, 并且输出他的中文翻译'],
      ['word', '请给出下面这个单词的含义, 造句,反义词等等,帮助人理解'],
      ['grammar', '分析这个句子的词法结构,并给出中文解释,试图教会我'],
      ['chinese', '请给出这个句子的英文翻译,并且给出句子的解释'],
    ],
    // [ '',``]
    code: [
      ['fe engineer', '你是一个前端高级工程师,请回答下面的问题'],
      ['format-label-value', '请将下面结构体变成 {label,value}的数组, 请给出完整的产物'],
    ],
  }
  var rootEle = document.createElement('div')
  rootEle.id = 'chatgptHelper'
  const formattedHTML = `
  <div id="chatgptHelperOpen" class="fixed top-1/2 right-1 z-50 p-3 rounded-md transition-colors duration-200 text-white cursor-pointer border border-white/20 bg-gray-900 hover:bg-gray-700 -translate-y-1/2">
    快<br>捷<br>指<br>令
  </div>
  <div id="chatgptHelperMain" class="fixed top-0 right-0 bottom-0 z-50 flex flex-col px-3 w-96 text-gray-100 bg-gray-900" style="transform: translateX(0); transition: transform 0.2s;">
    <div class="py-4 pl-2">
    <h2>
      <a href="https://github.com/Liugq5713/quick-prompt" target="_blank">Quick Prompt</a>
    </h2>

    </div>

<ul>
${Object.keys(SHORTCUTS)
  .map(group => {
    return `<div class="border-b border-white/20">
      <h4 class="ml-2 mt-3 text-lg" style="color: #ffffff33">${group}</h4>
      <ul class="flex flex-1 overflow-y-auto py-4  text-sm" style="flex-wrap: wrap">
      ${SHORTCUTS[group]
        .map(
          ([label, value]) => `
        <li class="mr-2 mb-2 py-1 px-3 rounded-md hover:bg-gray-700 cursor-pointer" data-value="${encodeURI(value)}">
          ${label}
        </li>
      `,
        )
        .join('')}
    </ul>
    </div>`
  })
  .join('')}
</ul>
   <div class="flex items-center py-4 absolute bottom-0">
      <div id="chatgptHelperClose" class="py-2 px-3 rounded-md cursor-pointer hover:bg-gray-700">
        关闭
      </div>
      <div class="flex-1 pr-3 text-right text-sm items-center">
        <label class="flex items-center cursor-pointer" style="display: inline-block;">
          <input type="checkbox" checked="true" id="isPain" style="border-radius: 20px; margin-bottom: 3px;">
          <span>是否固定面板</span>
        </label>
        <label class="flex items-center ml-2 cursor-pointer" style="display: inline-block;">
          <input type="checkbox" id="isAutoSend" style="border-radius: 20px; margin-bottom: 3px;">
          <span>是否自动发送</span>
        </label>
      </div>
    </div>
  </div>
`

  console.log('formattedHTML', formattedHTML)

  rootEle.innerHTML = formattedHTML

  // 创建一个新的 KeyboardEvent 事件对象
  const keyEvent = new KeyboardEvent('keydown', {
    key: 'Enter',
    bubbles: true,
    cancelable: true,
    keyCode: 13,
  })
  rootEle.querySelector('ul').addEventListener('click', function (event) {
    var target = event.target
    const isAutoSend = document.getElementById('isAutoSend').checked
    const isPain = document.getElementById('isPain').checked
    if (target.nodeName === 'LI') {
      var value = target.getAttribute('data-value')
      if (value) {
        var textareaEle_1 = document.querySelector('textarea')
        textareaEle_1.value = decodeURI(value)
        console.log('---', textareaEle_1.value)
        textareaEle_1.dispatchEvent(new Event('input', { bubbles: true }))
        setTimeout(function () {
          if (isAutoSend) {
            textareaEle_1.dispatchEvent(keyEvent)
          } else {
            textareaEle_1.focus()
          }
        }, 1e3)
      }
      if (!isPain) {
        chatgptHelperMain.style.transform = 'translateX(100%)'
      }
    }
  })
  document.body.appendChild(rootEle)
  var chatgptHelperMain = document.querySelector('#chatgptHelperMain')
  document.querySelector('#chatgptHelperOpen').addEventListener('click', function () {
    chatgptHelperMain.style.transform = 'translateX(0)'
  })
  document.querySelector('#chatgptHelperClose').addEventListener('click', function () {
    chatgptHelperMain.style.transform = 'translateX(100%)'
  })
})()