Character.AI Smart Auto-Continue

Automatically detects when a Character.ai bot message cuts off mid-sentence and prompts it to continue.

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 or Violentmonkey 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         Character.AI Smart Auto-Continue
// @namespace    http://tampermonkey.net
// @version      1.0
// @description  Automatically detects when a Character.ai bot message cuts off mid-sentence and prompts it to continue.
// @author       YourName
// @license      MIT
// @match        https://character.ai*
// @match        https://*.character.ai/*
// @icon         https://google.com
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';

    // Function to check the text and trigger continuation
    function checkAndContinue() {
        // Find all bot message text elements on the screen
        const messages = document.querySelectorAll('.message-text, [data-testid="chat-message-text"]');
        if (messages.length === 0) return;

        // Get the very last message sent by the bot
        const lastMessage = messages[messages.length - 1];
        const text = lastMessage.innerText.trim();

        // Check if the text ends abruptly (not ending with ., !, ?, ", or »)
        const endsAbruptly = /[^.!??"»]$/.test(text);

        if (endsAbruptly && !lastMessage.dataset.autoContinued) {
            // Mark it so we don't loop infinitely on the same message
            lastMessage.dataset.autoContinued = "true";

            // Find Character.ai's chat input textarea
            const textarea = document.querySelector('textarea');
            
            if (textarea) {
                textarea.focus();
                textarea.value = '(continue)';
                
                // Trigger input event for the website's framework
                const event = new Event('input', { bubbles: true });
                textarea.dispatchEvent(event);
                
                // Click the send button after a tiny delay
                setTimeout(() => {
                    const sendButton = document.querySelector('button[type="submit"]') || 
                                       textarea.parentElement.querySelector('button');
                    if (sendButton) {
                        sendButton.click();
                    }
                }, 300);
            }
        }
    }

    // Run the check every 3 seconds to see if a new cut-off message arrived
    setInterval(checkAndContinue, 3000);
})();