From 0c5b55b190b93ed1c82023dd7f82f0ece0c99d7c Mon Sep 17 00:00:00 2001 From: Spicy_Marinara Date: Tue, 25 Nov 2025 12:40:28 +0100 Subject: [PATCH] Add character card info in separate mode with muted filtering and scrollable Past Events --- src/systems/generation/apiClient.js | 2 +- src/systems/generation/promptBuilder.js | 26 ++++++++++++++++++------- style.css | 22 +++++++++++++++++++++ 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/systems/generation/apiClient.js b/src/systems/generation/apiClient.js index 3337653..a279983 100644 --- a/src/systems/generation/apiClient.js +++ b/src/systems/generation/apiClient.js @@ -122,7 +122,7 @@ export async function updateRPGData(renderUserStats, renderInfoBox, renderThough } } - const prompt = generateSeparateUpdatePrompt(); + const prompt = await generateSeparateUpdatePrompt(); // Generate using raw prompt (uses current preset, no chat history) const response = await generateRaw({ diff --git a/src/systems/generation/promptBuilder.js b/src/systems/generation/promptBuilder.js index 0d5b3ff..3d0371e 100644 --- a/src/systems/generation/promptBuilder.js +++ b/src/systems/generation/promptBuilder.js @@ -5,7 +5,7 @@ import { getContext } from '../../../../../../extensions.js'; import { chat, getCurrentChatDetails, characters, this_chid } from '../../../../../../../script.js'; -import { selected_group, getGroupMembers } from '../../../../../../group-chats.js'; +import { selected_group, getGroupMembers, getGroupChat } from '../../../../../../group-chats.js'; import { extensionSettings, committedTrackerData, FEATURE_FLAGS } from '../../core/state.js'; // Type imports @@ -20,19 +20,31 @@ export const DEFAULT_HTML_PROMPT = `If appropriate, include inline HTML, CSS, an * Gets character card information for current chat (handles both single and group chats) * @returns {string} Formatted character information */ -function getCharacterCardsInfo() { +async function getCharacterCardsInfo() { let characterInfo = ''; // Check if in group chat if (selected_group) { + const group = await getGroupChat(selected_group); const groupMembers = getGroupMembers(selected_group); + if (groupMembers && groupMembers.length > 0) { characterInfo += 'Characters in this roleplay:\n\n'; - groupMembers.forEach((member, index) => { + // Filter out disabled (muted) members + const disabledMembers = group?.disabled_members || []; + let characterIndex = 0; + + groupMembers.forEach((member) => { if (!member || !member.name) return; - characterInfo += `\n`; + // Skip muted characters + if (member.avatar && disabledMembers.includes(member.avatar)) { + return; + } + + characterIndex++; + characterInfo += `\n`; if (member.description) { characterInfo += `${member.description}\n`; @@ -42,7 +54,7 @@ function getCharacterCardsInfo() { characterInfo += `${member.personality}\n`; } - characterInfo += `\n\n`; + characterInfo += `\n\n`; }); } } else if (this_chid !== undefined && characters && characters[this_chid]) { @@ -520,7 +532,7 @@ export function generateRPGPromptText() { * * @returns {Array<{role: string, content: string}>} Array of message objects for API */ -export function generateSeparateUpdatePrompt() { +export async function generateSeparateUpdatePrompt() { const depth = extensionSettings.updateDepth; const userName = getContext().name1; @@ -531,7 +543,7 @@ export function generateSeparateUpdatePrompt() { systemMessage += `You should maintain an objective tone.\n\n`; // Add character card information - const characterInfo = getCharacterCardsInfo(); + const characterInfo = await getCharacterCardsInfo(); if (characterInfo) { systemMessage += characterInfo + '\n\n'; } diff --git a/style.css b/style.css index 32cbc5b..327b0bb 100644 --- a/style.css +++ b/style.css @@ -1520,6 +1520,28 @@ body:has(.rpg-panel.rpg-position-left) #sheld { padding: 0.25em 0.75em 0.5em 0.75em; position: relative; z-index: 1; + overflow-y: auto; + max-height: 100%; + flex: 1; + min-height: 0; +} + +.rpg-notebook-lines::-webkit-scrollbar { + width: 0.188rem; +} + +.rpg-notebook-lines::-webkit-scrollbar-track { + background: var(--rpg-bg); + border-radius: 2px; +} + +.rpg-notebook-lines::-webkit-scrollbar-thumb { + background: var(--rpg-highlight); + border-radius: 2px; +} + +.rpg-notebook-lines::-webkit-scrollbar-thumb:hover { + background: var(--rpg-text); } .rpg-notebook-line {