Character.AI Smart Auto-Continue

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

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==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);
})();