Automatically detects when a Character.ai bot message cuts off mid-sentence and prompts it to continue.
// ==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);
})();