diff --git a/public/script.js b/public/script.js
index 1bcc779f8..7e73ae363 100644
--- a/public/script.js
+++ b/public/script.js
@@ -1146,15 +1146,17 @@ function messageFormatting(mes, ch_name, isSystem, isUser) {
let regexPlacement;
if (isUser) {
regexPlacement = regex_placement.USER_INPUT;
- } else if (ch_name === "System") {
- regexPlacement = regex_placement.SYSTEM;
} else if (ch_name !== name2) {
- regexPlacement = regex_placement.SENDAS;
+ regexPlacement = regex_placement.SLASH_COMMAND;
} else {
regexPlacement = regex_placement.AI_OUTPUT;
}
- mes = getRegexedString(mes, regexPlacement, { isMarkdown: true });
+ // Always override the character name
+ mes = getRegexedString(mes, regexPlacement, {
+ characterOverride: ch_name,
+ isMarkdown: true
+ });
}
if (power_user.auto_fix_generated_markdown) {
@@ -5047,25 +5049,24 @@ function updateMessage(div) {
const mesBlock = div.closest(".mes_block");
let text = mesBlock.find(".edit_textarea").val();
const mes = chat[this_edit_mes_id];
+
let regexPlacement;
- if (mes.is_name && !mes.is_user && mes.name !== name2) {
- regexPlacement = regex_placement.SENDAS;
- } else if (mes.is_name && !mes.is_user) {
- regexPlacement = regex_placement.AI_OUTPUT;
- } else if (mes.is_name && mes.is_user) {
+ if (mes.is_name && mes.is_user) {
regexPlacement = regex_placement.USER_INPUT;
- } else if (mes.extra?.type === "narrator") {
- regexPlacement = regex_placement.SYSTEM;
+ } else if (mes.is_name && mes.name === name2) {
+ regexPlacement = regex_placement.AI_OUTPUT;
+ } else if (mes.is_name && mes.name !== name2 || mes.extra?.type === "narrator") {
+ regexPlacement = regex_placement.SLASH_COMMAND;
}
+ // Ignore character override if sent as system
text = getRegexedString(
- text,
- regexPlacement,
- {
- characterOverride: regexPlacement === regex_placement.SENDAS ? mes.name : undefined
- }
+ text,
+ regexPlacement,
+ { characterOverride: mes.extra?.type === "narrator" ? undefined : mes.name }
);
+
if (power_user.trim_spaces) {
text = text.trim();
}
diff --git a/public/scripts/extensions/regex/editor.html b/public/scripts/extensions/regex/editor.html
index f692cf06c..0443790fd 100644
--- a/public/scripts/extensions/regex/editor.html
+++ b/public/scripts/extensions/regex/editor.html
@@ -72,13 +72,7 @@
-
-
-
diff --git a/public/scripts/extensions/regex/engine.js b/public/scripts/extensions/regex/engine.js
index 426f4c0eb..cab687c90 100644
--- a/public/scripts/extensions/regex/engine.js
+++ b/public/scripts/extensions/regex/engine.js
@@ -11,8 +11,7 @@ const regex_placement = {
MD_DISPLAY: 0,
USER_INPUT: 1,
AI_OUTPUT: 2,
- SYSTEM: 3,
- SENDAS: 4
+ SLASH_COMMAND: 3
}
const regex_replace_strategy = {
diff --git a/public/scripts/extensions/regex/index.js b/public/scripts/extensions/regex/index.js
index 6a5061516..cb84876ae 100644
--- a/public/scripts/extensions/regex/index.js
+++ b/public/scripts/extensions/regex/index.js
@@ -201,6 +201,16 @@ function migrateSettings() {
performSave = true;
}
+
+ // Old system and sendas placement migration
+ // 4 - sendAs
+ if (script.placement.includes(4)) {
+ script.placement = script.placement.length === 1 ?
+ [regex_placement.SLASH_COMMAND] :
+ script.placement = script.placement.filter((e) => e !== 4);
+
+ performSave = true;
+ }
});
if (performSave) {
diff --git a/public/scripts/slash-commands.js b/public/scripts/slash-commands.js
index c4b01bbcc..3e53feb7b 100644
--- a/public/scripts/slash-commands.js
+++ b/public/scripts/slash-commands.js
@@ -61,6 +61,7 @@ class SlashCommandParser {
}
parse(text) {
+ const excludedFromRegex = ["sendas"]
const firstSpace = text.indexOf(' ');
const command = firstSpace !== -1 ? text.substring(1, firstSpace) : text.substring(1);
const args = firstSpace !== -1 ? text.substring(firstSpace + 1) : '';
@@ -82,6 +83,14 @@ class SlashCommandParser {
}
unnamedArg = argsArray.slice(Object.keys(argObj).length).join(' ');
+
+ // Excluded commands format in their own function
+ if (!excludedFromRegex.includes(command)) {
+ unnamedArg = getRegexedString(
+ unnamedArg,
+ regex_placement.SLASH_COMMAND
+ );
+ }
}
if (this.commands[command]) {
@@ -177,8 +186,11 @@ async function generateSystemMessage(_, prompt) {
return;
}
+ // Generate and regex the output if applicable
toastr.info('Please wait', 'Generating...');
- const message = await generateQuietPrompt(prompt);
+ let message = await generateQuietPrompt(prompt);
+ message = getRegexedString(message, regex_placement.SLASH_COMMAND);
+
sendNarratorMessage(_, message);
}
@@ -242,7 +254,9 @@ async function sendMessageAs(_, text) {
const name = parts.shift().trim();
let mesText = parts.join('\n').trim();
- mesText = getRegexedString(mesText, regex_placement.SENDAS, { characterOverride: name });
+
+ // Requires a regex check after the slash command is pushed to output
+ mesText = getRegexedString(mesText, regex_placement.SLASH_COMMAND, { characterOverride: name });
// Messages that do nothing but set bias will be hidden from the context
const bias = extractMessageBias(mesText);
@@ -286,8 +300,6 @@ async function sendNarratorMessage(_, text) {
return;
}
- text = getRegexedString(text, regex_placement.SYSTEM);
-
const name = chat_metadata[NARRATOR_NAME_KEY] || NARRATOR_NAME_DEFAULT;
// Messages that do nothing but set bias will be hidden from the context
const bias = extractMessageBias(text);