From d088a182162b888510f55c6b20bd23872564c859 Mon Sep 17 00:00:00 2001
From: liz <liz.delizious@gmail.com>
Date: Sat, 30 Mar 2024 14:31:49 +1300
Subject: [PATCH] allow expression overrides from rules assistant

---
 devTools/types/FC/RA.d.ts       |  2 ++
 src/js/DefaultRules.js          | 16 ++++++++++++++++
 src/js/rulesAssistant.js        |  2 ++
 src/js/rulesAssistantOptions.js | 18 ++++++++++++++++++
 4 files changed, 38 insertions(+)

diff --git a/devTools/types/FC/RA.d.ts b/devTools/types/FC/RA.d.ts
index 8c7e433207d..d4070eacddc 100644
--- a/devTools/types/FC/RA.d.ts
+++ b/devTools/types/FC/RA.d.ts
@@ -218,6 +218,8 @@ declare namespace FC {
 			choosesOwnClothes: 0 | 1;
 			pronoun: number;
 			posePrompt: string;
+			expressionPositivePrompt: string;
+			expressionNegativePrompt: string;
 			positivePrompt: string;
 			negativePrompt: string;
 			overridePrompts: boolean;
diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js
index dd3fcec25fe..fe073d4400b 100644
--- a/src/js/DefaultRules.js
+++ b/src/js/DefaultRules.js
@@ -3318,6 +3318,22 @@ globalThis.DefaultRules = function(slave) {
 			}
 		}
 
+		// custom expression positive prompt
+		if (rule.expressionPositivePrompt != null && rule.expressionPositivePrompt !== '') {
+			if (slave.custom.aiPrompts.expressionPositive !== rule.expressionPositivePrompt) {
+				slave.custom.aiPrompts.expressionPositive = rule.expressionPositivePrompt;
+				message(`${slave.slaveName} has had ${his} positive expression prompt set.`, sourceRecord.expressionPositivePromptPrompt);
+			}
+		}
+
+		// custom expression negative prompt
+		if (rule.expressionNegativePrompt != null && rule.expressionNegativePrompt !== '') {
+			if (slave.custom.aiPrompts.expressionNegative !== rule.expressionNegativePrompt) {
+				slave.custom.aiPrompts.expressionNegative = rule.expressionNegativePrompt;
+				message(`${slave.slaveName} has had ${his} negative expression prompt set.`, sourceRecord.expressionNegativePromptPrompt);
+			}
+		}
+
 		// custom positive prompts
 		if (rule.positivePrompt != null && rule.positivePrompt !== '') {
 			assignPrompts("positive");
diff --git a/src/js/rulesAssistant.js b/src/js/rulesAssistant.js
index 99b90cde54d..30a93a68ced 100644
--- a/src/js/rulesAssistant.js
+++ b/src/js/rulesAssistant.js
@@ -301,6 +301,8 @@ App.RA.newRule = function() {
 			labelTagsClear: null,
 			pronoun: null,
 			posePrompt: null,
+			expressionPositivePrompt: null,
+			expressionNegativePrompt: null,
 			positivePrompt: null,
 			negativePrompt: null,
 			overridePrompts: null,
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index f000b6149fb..9f0f3b993b7 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -1560,6 +1560,8 @@ App.RA.options = (function() {
 			}
 			if (V.imageChoice === 6) { // If using AI generated images
 				this.appendChild(new OverridePosePrompt());
+				this.appendChild(new OverrideExpressionPositivePrompt());
+				this.appendChild(new OverrideExpressionNegativePrompt());
 				this.appendChild(new OverridePromptSwitch());
 				this.appendChild(new AddCustomPosPrompt());
 				this.appendChild(new AddCustomNegPrompt());
@@ -4236,6 +4238,22 @@ App.RA.options = (function() {
 		}
 	}
 
+	class OverrideExpressionPositivePrompt extends StringEditor {
+		constructor() {
+			super("Override positive expression prompt", [], true, false);
+			this.setValue(current_rule.set.expressionPositivePrompt);
+			this.onchange = (value) => current_rule.set.expressionPositivePrompt = value;
+		}
+	}
+
+	class OverrideExpressionNegativePrompt extends StringEditor {
+		constructor() {
+			super("Override negative expression prompt", [], true, false);
+			this.setValue(current_rule.set.expressionNegativePrompt);
+			this.onchange = (value) => current_rule.set.expressionNegativePrompt = value;
+		}
+	}
+
 	class AddCustomPosPrompt extends StringEditor {
 		constructor() {
 			super("Add custom positive prompt(s) to slave", [], true, false);
-- 
GitLab