diff --git a/public/scripts/macros.js b/public/scripts/macros.js index a2514da8c..42e3fad72 100644 --- a/public/scripts/macros.js +++ b/public/scripts/macros.js @@ -3,11 +3,29 @@ import { timestampToMoment, isDigitsOnly, getStringHash } from './utils.js'; import { textgenerationwebui_banned_in_macros } from './textgen-settings.js'; import { replaceInstructMacros } from './instruct-mode.js'; import { replaceVariableMacros } from './variables.js'; -import { saveMetadataDebounced } from './extensions.js'; // Register any macro that you want to leave in the compiled story string Handlebars.registerHelper('trim', () => '{{trim}}'); +/** + * Gets a hashed id of the current chat from the metadata. + * If no metadata exists, creates a new hash and saves it. + * @returns {number} The hashed chat id + */ +function getChatIdHash() { + const cachedIdHash = chat_metadata['chat_id_hash']; + + // If chat_id_hash is not already set, calculate it + if (!cachedIdHash) { + // Use the main_chat if it's available, otherwise get the current chat ID + const chatId = chat_metadata['main_chat'] ?? getCurrentChatId(); + const chatIdHash = getStringHash(chatId); + chat_metadata['chat_id_hash'] = chatIdHash; + return chatIdHash; + } + + return cachedIdHash; +} /** * Returns the ID of the last message in the chat @@ -190,10 +208,7 @@ function pickReplace(input, rawContent, emptyListPlaceholder = '') { // We need to have a consistent chat hash, otherwise we'll lose rolls on chat file rename or branch switches // No need to save metadata here - branching and renaming will implicitly do the save for us, and until then loading it like this is consistent - const chatIdHash = chat_metadata['chat_id_hash']; - if (!chatIdHash) { - chat_metadata['chat_id_hash'] = getStringHash(chat_metadata['main_chat'] ?? getCurrentChatId()); - } + const chatIdHash = getChatIdHash(); const rawContentHash = getStringHash(rawContent); return input.replace(pickPattern, (match, listString, offset) => {