chatgpt-infinite

Infinite auto ask for chatgpt

目前為 2023-03-30 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name chatgpt-infinite
  3. // @namespace https://github.com/mefengl
  4. // @version 0.3.4
  5. // @description Infinite auto ask for chatgpt
  6. // @author mefengl
  7. // @match https://chat.openai.com/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=openai.com
  9. // @grant none
  10. // @license MIT
  11. // ==/UserScript==
  12. (() => {
  13. var __async = (__this, __arguments, generator) => {
  14. return new Promise((resolve, reject) => {
  15. var fulfilled = (value) => {
  16. try {
  17. step(generator.next(value));
  18. } catch (e) {
  19. reject(e);
  20. }
  21. };
  22. var rejected = (value) => {
  23. try {
  24. step(generator.throw(value));
  25. } catch (e) {
  26. reject(e);
  27. }
  28. };
  29. var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
  30. step((generator = generator.apply(__this, __arguments)).next());
  31. });
  32. };
  33.  
  34. // src/askForLanguage/index.ts
  35. function askForLanguage() {
  36. return __async(this, null, function* () {
  37. return prompt("What language do you want to use?");
  38. });
  39. }
  40.  
  41. // ../../packages/chatkit/dist/index.mjs
  42. function getTextarea() {
  43. const form = document.querySelector("form");
  44. if (!form)
  45. return;
  46. const textareas = form.querySelectorAll("textarea");
  47. const result = textareas[0];
  48. return result;
  49. }
  50. function getSubmitButton() {
  51. const form = document.querySelector("form");
  52. if (!form)
  53. return;
  54. const buttons = form.querySelectorAll("button");
  55. const result = buttons[buttons.length - 1];
  56. return result;
  57. }
  58. function getRegenerateButton() {
  59. const form = document.querySelector("form");
  60. if (!form)
  61. return;
  62. const buttons = form.querySelectorAll("button");
  63. const result = Array.from(buttons).find((button) => {
  64. var _a;
  65. return (_a = button.textContent) == null ? void 0 : _a.trim().toLowerCase().includes("regenerate");
  66. });
  67. return result;
  68. }
  69. function getStopGeneratingButton() {
  70. const form = document.querySelector("form");
  71. if (!form)
  72. return;
  73. const buttons = form.querySelectorAll("button");
  74. const result = Array.from(buttons).find((button) => {
  75. var _a;
  76. return (_a = button.textContent) == null ? void 0 : _a.trim().toLowerCase().includes("stop generating");
  77. });
  78. return result;
  79. }
  80. function getLastResponseElement() {
  81. const responseElements = document.querySelectorAll(".group.w-full");
  82. return responseElements[responseElements.length - 1];
  83. }
  84. function getLastResponse() {
  85. const lastResponseElement = getLastResponseElement();
  86. if (!lastResponseElement)
  87. return;
  88. const lastResponse = lastResponseElement.textContent;
  89. return lastResponse;
  90. }
  91. function getTextareaValue() {
  92. var _a;
  93. return ((_a = chatkit.getTextarea()) == null ? void 0 : _a.value) || "";
  94. }
  95. function setTextarea(message) {
  96. const textarea = getTextarea();
  97. if (!textarea)
  98. return;
  99. textarea.value = message;
  100. textarea.dispatchEvent(new Event("input"));
  101. }
  102. function send(message) {
  103. setTextarea(message);
  104. const textarea = getTextarea();
  105. if (!textarea)
  106. return;
  107. textarea.dispatchEvent(new KeyboardEvent("keydown", { key: "Enter", bubbles: true }));
  108. }
  109. function waitForIdle() {
  110. return new Promise((resolve) => {
  111. const interval = setInterval(() => {
  112. if (!getStopGeneratingButton()) {
  113. clearInterval(interval);
  114. resolve();
  115. }
  116. }, 1e3);
  117. });
  118. }
  119. var chatkit = {
  120. getTextarea,
  121. getSubmitButton,
  122. getRegenerateButton,
  123. getStopGeneratingButton,
  124. getLastResponseElement,
  125. getLastResponse,
  126. getTextareaValue,
  127. setTextarea,
  128. send,
  129. waitForIdle
  130. };
  131. var src_default = chatkit;
  132.  
  133. // src/infiniteLoop/index.ts
  134. function startInfiniteLoop() {
  135. return __async(this, null, function* () {
  136. const language = yield askForLanguage();
  137. if (!language)
  138. return;
  139. src_default.send(`you can only answer question in ${language} language`);
  140. yield src_default.waitForIdle();
  141. while (true) {
  142. const lastResponse = src_default.getLastResponse();
  143. const question = extractQuestion(lastResponse);
  144. yield src_default.send(question + "\nanswer above question, and show me one more further question I can ask in the end prefixed with Q:");
  145. yield src_default.waitForIdle();
  146. yield sleep(5e3);
  147. }
  148. });
  149. }
  150. function extractQuestion(text) {
  151. return text.split("Q:").pop().trim();
  152. }
  153. function sleep(ms) {
  154. return new Promise((resolve) => setTimeout(resolve, ms));
  155. }
  156. var infiniteLoop_default = startInfiniteLoop;
  157.  
  158. // src/index.ts
  159. function initialize() {
  160. return __async(this, null, function* () {
  161. yield new Promise((resolve) => window.addEventListener("load", resolve));
  162. yield new Promise((resolve) => setTimeout(resolve, 1e3));
  163. });
  164. }
  165. function main() {
  166. return __async(this, null, function* () {
  167. yield initialize();
  168. infiniteLoop_default();
  169. });
  170. }
  171. (function() {
  172. main();
  173. })();
  174. })();
  175.  

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址