From afa4b125cd9d337663967b297c906de401898b0a Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sat, 12 Jul 2025 17:42:56 +0800 Subject: [PATCH] Update events.js --- core/events.js | 124 ++++++++++++++++++++++--------------------------- 1 file changed, 56 insertions(+), 68 deletions(-) diff --git a/core/events.js b/core/events.js index 44a091a..00d5d19 100644 --- a/core/events.js +++ b/core/events.js @@ -7,99 +7,87 @@ import { executeAutoHide } from './autoHideManager.js'; const pendingWriteData = { summary: null, - targetLorebook: null, + targetLorebook: null, // (此条目很快将被新设定取代,但为兼容性暂时保留) + settings: null, // 【新增栏位】用以存放完整的史册律法。 chatIdentifier: null, sourceAiMessageTimestamp: null, }; export async function onMessageReceived(data) { - const context = getContext(); - if ((data && data.is_user) || context.isWaitingForUserInput) { - return; - } + const context = getContext(); + if ((data && data.is_user) || context.isWaitingForUserInput) { return; } - const settings = extension_settings[extensionName]; - const chat = context.chat; - if (!chat || chat.length === 0) return; + const settings = extension_settings[extensionName]; + const chat = context.chat; + if (!chat || chat.length === 0) return; - const latestMessage = chat[chat.length - 1]; + const latestMessage = chat[chat.length - 1]; + if (latestMessage.is_user) { return; } - if (latestMessage.is_user) { - return; - } + await executeAutoHide(); - await executeAutoHide(); - - if (!settings.enabled) { - return; - } - - if (chat.length < 2 || !chat[chat.length - 2].is_user) { - console.log("[Amily2号] 检测到消息并非AI对用户的直接回复,已跳过优化总结。"); - return; - } - - if (pendingWriteData.summary) { - await writeSummaryToLorebook(pendingWriteData); - } - if (!settings.optimizationEnabled && !settings.summarizationEnabled) { - console.log("[Amily2号] 优化与总结功能均未启用,任务中止。"); - return; - } - if (!settings.apiUrl) return; - - const contextCount = settings.contextMessages || 2; - const startIndex = Math.max(0, chat.length - 1 - contextCount); - const previousMessages = chat.slice(startIndex, chat.length - 1); - const result = await checkAndFixWithAPI(latestMessage, previousMessages); - - if (result) { - if ( - result.optimizedContent && - result.optimizedContent !== latestMessage.mes && - settings.optimizationEnabled - ) { - latestMessage.mes = result.optimizedContent; - await saveChatConditional(); - if (settings.optimizationMode === "refresh") { - await reloadCurrentChat(); - } + if (pendingWriteData.summary && pendingWriteData.settings) { + await writeSummaryToLorebook(pendingWriteData); + pendingWriteData.summary = null; + pendingWriteData.settings = null; } - if (result.summary && settings.summarizationEnabled) { - pendingWriteData.summary = result.summary; - pendingWriteData.sourceAiMessageTimestamp = latestMessage.send_date; - pendingWriteData.targetLorebook = settings.lorebookTarget; - pendingWriteData.chatIdentifier = await getChatIdentifier(); + if (!settings.enabled || (!settings.optimizationEnabled && !settings.summarizationEnabled) || !settings.apiUrl) { + return; + } - if (settings.showOptimizationToast) { - let targetName = "独立中央档案"; - if (settings.lorebookTarget === "character_main") { - const character = characters[context.characterId]; - targetName = character?.data?.extensions?.world || "未绑定的主世界书"; + if (chat.length < 2 || !chat[chat.length - 2].is_user) { + console.log("[Amily2号] 检测到消息并非AI对用户的直接回复,已跳过优化总结。"); + return; + } + + const contextCount = settings.contextMessages || 2; + const startIndex = Math.max(0, chat.length - 1 - contextCount); + const previousMessages = chat.slice(startIndex, chat.length - 1); + const result = await checkAndFixWithAPI(latestMessage, previousMessages); + + if (result) { + if (result.optimizedContent && result.optimizedContent !== latestMessage.mes && settings.optimizationEnabled) { + latestMessage.mes = result.optimizedContent; + await saveChatConditional(); + if (settings.optimizationMode === 'refresh') { + await reloadCurrentChat(); + } } - toastr.info( - `已优化并将总结:“${result.summary}” 写入 “${targetName}”`, - "Amily2号", - { timeOut: 7000 }, - ); - } - } - } -} + + if (result.summary && result.loreSettings && settings.summarizationEnabled) { + pendingWriteData.summary = result.summary; + pendingWriteData.settings = result.loreSettings; + pendingWriteData.sourceAiMessageTimestamp = latestMessage.send_date; + pendingWriteData.chatIdentifier = await getChatIdentifier(); + + if (settings.showOptimizationToast) { + let targetName = `独立中央档案(${result.loreSettings.target})`; + if (result.loreSettings.target === "character_main") { + const character = characters[context.characterId]; + targetName = character?.data?.extensions?.world || "未绑定的主世界书"; + } + toastr.info(`已优化并将总结:“${result.summary}” 备妥,待写入 “${targetName}”`, "Amily2号", { timeOut: 7000 }); + } + } + // ==================================================================== + } +} export function onChatChanged() { const context = getContext(); const chat = context.chat; if (!chat || chat.length === 0) { pendingWriteData.summary = null; + pendingWriteData.settings = null; return; } const latestMessage = chat[chat.length - 1]; if (latestMessage.is_user && pendingWriteData.summary) { console.log( - "[Amily2号-遗忘哨兵] 检测到AI回复被操作,已清除待写入的过时总结。", + "[Amily2号-遗忘哨兵] 裁决:检测到AI回复已被陛下操作,遵旨废黜过时总结。", ); pendingWriteData.summary = null; + pendingWriteData.settings = null; } }