ChatGPT Monitor

Monitor whether the answer is complete, if not, automatically send a continue command.

// ==UserScript==
// @name         ChatGPT Monitor
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  Monitor whether the answer is complete, if not, automatically send a continue command.
// @author       CyberSexy
// @match        https://chat.openai.com/*
// @require      https://code.jquery.com/jquery-3.6.0.min.js
// @run-at       document-end
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    window.addEventListener('loadMonitor', function() {
        const element = document.querySelector('.text-2xl');
        console.log("MyScript1: " + element);
        // 这个地方用来判断是否正在返回数据,利用text-2xl的这个类。这个类只在获取数据时候出现。
        if (!element) {
            // Get the last element with class name "markdown"
            var latest = document.getElementsByClassName('markdown')[document.getElementsByClassName('markdown').length - 1];

            // Store the latest element's content in a variable
            var dataZ = latest.innerHTML;
            //console.log("MyScriptFull: " + dataZ);
            // Remove <p> tags from the content
            dataZ = dataZ.replace(/<\/?p>/g, '');
            // Check if the content ends with ".", ";" or "。"or"</pre>"
            // 你根据情况判断是否还要加,例如有的时候是问号。
            var endsWithPunctuation = /[.;!!。]$/.test(dataZ) || dataZ.endsWith("</pre>");

            console.log("MyScript2: " + endsWithPunctuation);

            //Extract the last 20 characters
            var last20 = dataZ.substr(dataZ.length - 20, 20);
            console.log("MyScript3: " + last20);

            if (!endsWithPunctuation) {
                var input=document.querySelector('textarea');
                input.value="继续";
                input.dispatchEvent(new Event("input", { bubbles: true }));
                input.form.dispatchEvent(new Event("submit", { bubbles: true }));
            };
        }
    }
                           )

    setInterval(function() {
        window.dispatchEvent(new Event('loadMonitor'));
    }, 5000);

})();