ChatGPT Helper

Improve ChatGPT experience

目前为 2023-07-21 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name ChatGPT Helper
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description Improve ChatGPT experience
  6. // @author Charles
  7. // @run-at document-end
  8. // @match https://chat.openai.com/*
  9. // @match https://chat.openai.com/c/*
  10. // @icon https://www.google.com/s2/favicons?sz=64&domain=openai.com
  11. // @grant GM_addStyle
  12. // ==/UserScript==
  13.  
  14. var buttonList = [
  15. {Name: "翻譯成繁體中文", Message: "翻譯成繁體中文"},
  16. {Name: "繼續", Message: "繼續"}
  17. ];
  18.  
  19. (function () {
  20. "use strict";
  21.  
  22. // Your code here...
  23.  
  24. createHelperDiv();
  25. })();
  26.  
  27. // 傳送指定訊息
  28. function sendMessage(message) {
  29. // 取得用來確認目前是否可傳送的按鈕
  30. let checkButton = document.querySelector(
  31. '.relative[role="presentation"] > div > div > button > div'
  32. );
  33. if (checkButton !== null && checkButton.innerText !== "Regenerate response") return;
  34. // copy text
  35. let inputArea = document.querySelector("#prompt-textarea");
  36. let sendButton = document.querySelector("#prompt-textarea + button");
  37. let origin = inputArea.value;
  38. inputArea.value = message;
  39. let inputEventSimulator = new InputEvent("input", {bubbles: true});
  40. inputArea.dispatchEvent(inputEventSimulator);
  41. inputArea.value = origin;
  42. setTimeout(() => {
  43. sendButton.click();
  44. }, 300);
  45. }
  46.  
  47. // 創建輔助工具的UI
  48. function createHelperDiv() {
  49. let div = document.createElement("div");
  50. div.id = "gpt_helper";
  51. div.innerHTML = `
  52. <div class="gpt_helper_buttons">
  53. </div>
  54. `;
  55. let insertDiv = document.querySelector("#__next");
  56. insertDiv.appendChild(div);
  57. let buttonBar = div.querySelector(".gpt_helper_buttons");
  58.  
  59. for (let i = 0; i < buttonList.length; i++) {
  60. let button = document.createElement("button");
  61. button.className = "gpt_helper_button";
  62. button.innerText = buttonList[i].Name;
  63. button.addEventListener("click", () => sendMessage(buttonList[i].Message));
  64. buttonBar.appendChild(button);
  65. }
  66.  
  67. addStyle();
  68. }
  69.  
  70. // 加入CSS
  71. function addStyle() {
  72. GM_addStyle(
  73. `#gpt_helper {
  74. position: absolute;
  75. width: 100%;
  76. height: 100%;
  77. left: 0;
  78. top: 0;
  79. display: flex;
  80. justify-content: end;
  81. align-items: center;
  82. pointer-events: none;
  83. }
  84. #gpt_helper > .gpt_helper_buttons {
  85. width: 150px;
  86. height: 300px;
  87. pointer-events: all;
  88. }
  89. #gpt_helper > .gpt_helper_buttons .gpt_helper_button {
  90. appearance: none;
  91. background-color: #2ea44f;
  92. border: 1px solid rgba(27, 31, 35, 0.15);
  93. border-radius: 6px;
  94. box-shadow: rgba(27, 31, 35, 0.1) 0 1px 0;
  95. box-sizing: border-box;
  96. color: #fff;
  97. cursor: pointer;
  98. display: inline-block;
  99. font-family: -apple-system, system-ui, "Segoe UI", Helvetica, Arial,
  100. sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  101. font-size: 14px;
  102. font-weight: 600;
  103. line-height: 20px;
  104. padding: 6px 16px;
  105. position: relative;
  106. text-align: center;
  107. text-decoration: none;
  108. user-select: none;
  109. -webkit-user-select: none;
  110. touch-action: manipulation;
  111. vertical-align: middle;
  112. white-space: nowrap;
  113. width: 100%;
  114. margin: 5px;
  115. }
  116. #gpt_helper
  117. > .gpt_helper_buttons
  118. .gpt_helper_button:focus:not(:focus-visible):not(.focus-visible) {
  119. box-shadow: none;
  120. outline: none;
  121. }
  122. #gpt_helper > .gpt_helper_buttons .gpt_helper_button:hover {
  123. background-color: #2c974b;
  124. }
  125. #gpt_helper > .gpt_helper_buttons .gpt_helper_button:focus {
  126. box-shadow: rgba(46, 164, 79, 0.4) 0 0 0 3px;
  127. outline: none;
  128. }
  129. #gpt_helper > .gpt_helper_buttons .gpt_helper_button:disabled {
  130. background-color: #94d3a2;
  131. border-color: rgba(27, 31, 35, 0.1);
  132. color: rgba(255, 255, 255, 0.8);
  133. cursor: default;
  134. }
  135. #gpt_helper > .gpt_helper_buttons .gpt_helper_button:active {
  136. background-color: #298e46;
  137. box-shadow: rgba(20, 70, 32, 0.2) 0 1px 0 inset;
  138. }
  139. `
  140. );
  141. }