ChatGPT Auto Prompt Sender

Automates sending of next pre-filled prompt in ChatGPT after current response completion.

  1. // ==UserScript==
  2. // @name ChatGPT Auto Prompt Sender
  3. // @namespace https://userscript.moukaeritai.work/
  4. // @version 1.0.0.20231004
  5. // @description Automates sending of next pre-filled prompt in ChatGPT after current response completion.
  6. // @author Takashi SASAKI (https://twitter.com/TakashiSasaki)
  7. // @match https://chat.openai.com/c/*
  8. // @match https://chat.openai.com
  9. // @icon https://www.google.com/s2/favicons?sz=64&domain=openai.com
  10. // @supportURL https://greasyfork.org/ja/scripts/472713
  11. // @license MIT
  12. // ==/UserScript==
  13.  
  14. setTimeout(function() {
  15. 'use strict';
  16.  
  17. const div = document.querySelector("div:has(>form.stretch)");
  18.  
  19. const observer = new MutationObserver((mutationList, observer)=>{
  20. for(let mutation of mutationList){
  21. if(mutation.target.querySelector("div.absolute.right-2")){
  22. mutation.target.querySelector("div.absolute.right-2").style.background = "yellow";
  23. mutation.target.querySelector("div.absolute.right-2").addEventListener("click", clickEvent=>{
  24. if(mutation.target.querySelector("textarea").style.background === "red") {
  25. mutation.target.querySelector("textarea").style.background = null;
  26. } else {
  27. mutation.target.querySelector("textarea").style.background = "red";
  28. }//if
  29. });
  30. return;
  31. }//if
  32. if(mutation.target.querySelector("button.absolute")){
  33. if(mutation.target.querySelector("textarea").style.background === "red"){
  34. setTimeout(()=> mutation.target.querySelector("button.absolute").click(), 1000);
  35. }//if
  36. mutation.target.querySelector("textarea").style.background = null;
  37. }//if
  38. }//for
  39. });
  40.  
  41. observer.observe(div, {attributes: true,
  42. childList: true,
  43. subtree: true
  44. });
  45. }, 1000);