import { getContext } from "../../extensions.js"; export { MODULE_NAME }; const MODULE_NAME = '2_floating_prompt'; // <= Deliberate, for sorting lower than memory const UPDATE_INTERVAL = 1000; let lastMessageNumber = null; let promptInsertionInterval = 0; let promptInsertionPosition = 0; let promptInsertionDepth = 0; function onExtensionFloatingPromptInput() { saveSettings(); } function onExtensionFloatingIntervalInput() { promptInsertionInterval = Number($(this).val()); saveSettings(); } function onExtensionFloatingDepthInput() { let value = Number($(this).val()); if (promptInsertionDepth < 0) { value = Math.abs(value); $(this).val(value); } promptInsertionDepth = value; saveSettings(); } function onExtensionFloatingPositionInput(e) { promptInsertionPosition = e.target.value; saveSettings(); } function getLocalStorageKeys() { const context = getContext(); const keySuffix = context.groupId ? context.groupId : `${context.characters[context.characterId].name}_${context.chatId}`; return { prompt: `extensions_floating_prompt_${keySuffix}`, interval: `extensions_floating_interval_${keySuffix}`, depth: `extensions_floating_depth_${keySuffix}`, position: `extensions_floating_position_${keySuffix}`, }; } function loadSettings() { const keys = getLocalStorageKeys(); const prompt = localStorage.getItem(keys.prompt) ?? ''; const interval = localStorage.getItem(keys.interval) ?? 0; const position = localStorage.getItem(keys.position) ?? 0; const depth = localStorage.getItem(keys.depth) ?? 0; $('#extension_floating_prompt').val(prompt).trigger('input'); $('#extension_floating_interval').val(interval).trigger('input'); $('#extension_floating_depth').val(depth).trigger('input'); $(`input[name="extension_floating_position"][value="${position}"]`).prop('checked', true).trigger('change'); } function saveSettings() { const keys = getLocalStorageKeys(); localStorage.setItem(keys.prompt, $('#extension_floating_prompt').val()); localStorage.setItem(keys.interval, $('#extension_floating_interval').val()); localStorage.setItem(keys.depth, $('#extension_floating_depth').val()); localStorage.setItem(keys.position, $('input:radio[name="extension_floating_position"]:checked').val()); } async function moduleWorker() { const context = getContext(); if (!context.groupId && !context.characterId) { return; } loadSettings(); // take the count of messages lastMessageNumber = Array.isArray(context.chat) && context.chat.length ? context.chat.filter(m => m.is_user).length : 0; // special case for new chat if (Array.isArray(context.chat) && context.chat.length === 1) { lastMessageNumber = 1; } if (lastMessageNumber <= 0 || promptInsertionInterval <= 0) { $('#extension_floating_counter').text('No'); return; } const messagesTillInsertion = lastMessageNumber >= promptInsertionInterval ? (lastMessageNumber % promptInsertionInterval) : (promptInsertionInterval - lastMessageNumber); const shouldAddPrompt = messagesTillInsertion == 0 && (promptInsertionPosition == 0 || promptInsertionDepth > 0); const prompt = shouldAddPrompt ? $('#extension_floating_prompt').val() : ''; context.setExtensionPrompt(MODULE_NAME, prompt, promptInsertionPosition, promptInsertionDepth); $('#extension_floating_counter').text(shouldAddPrompt ? 'This' : messagesTillInsertion); } (function() { function addExtensionsSettings() { const settingsHtml = `