diff --git a/src/lang/en.ts b/src/lang/en.ts
index 4f2785bc..529c31a2 100644
--- a/src/lang/en.ts
+++ b/src/lang/en.ts
@@ -663,4 +663,7 @@ export const languageEnglish = {
doNotTranslate: "Do Not Translate",
includePersonaName: "Include Persona Name",
hidePersonaName: "Hide Persona Name",
+ triggerSwitchWarn: "If you change the trigger type, current triggers will be lost. do you want to continue?",
+ codeMode: "Code Mode",
+ blockMode: "Block Mode",
}
\ No newline at end of file
diff --git a/src/lib/SideBars/CharConfig.svelte b/src/lib/SideBars/CharConfig.svelte
index 07996864..5c6703ba 100644
--- a/src/lib/SideBars/CharConfig.svelte
+++ b/src/lib/SideBars/CharConfig.svelte
@@ -580,7 +580,44 @@
}}>
{language.triggerScript}
-
+
+ {
+ if(currentChar.type === 'character' && currentChar.data?.triggerscript?.[0]?.effect?.[0]?.type === 'triggercode'){
+ const codeTrigger = currentChar.data?.triggerscript?.[0]?.effect?.[0]?.code
+ if(codeTrigger){
+ const t = await alertConfirm(language.triggerSwitchWarn)
+ if(!t){
+ return
+ }
+ }
+ currentChar.data.triggerscript = []
+ }
+ }}>{language.blockMode}
+ {
+ if(currentChar.type === 'character' && currentChar.data?.triggerscript?.[0]?.effect?.[0]?.type !== 'triggercode'){
+ if(currentChar.data?.triggerscript && currentChar.data?.triggerscript.length > 0){
+ const t = await alertConfirm(language.triggerSwitchWarn)
+ if(!t){
+ return
+ }
+ }
+ currentChar.data.triggerscript = [{
+ comment: "",
+ type: "start",
+ conditions: [],
+ effect: [{
+ type: "triggercode",
+ code: ""
+ }]
+ }]
+ }
+ }}>{language.codeMode}
+
+ {#if currentChar.data?.triggerscript?.[0]?.effect?.[0]?.type === 'triggercode'}
+
+ {:else}
+
+ {/if}
{
if(currentChar.type === 'character'){
let script = currentChar.data.triggerscript
diff --git a/src/lib/UI/GUI/TextAreaInput.svelte b/src/lib/UI/GUI/TextAreaInput.svelte
index 080a8c28..6169d9a2 100644
--- a/src/lib/UI/GUI/TextAreaInput.svelte
+++ b/src/lib/UI/GUI/TextAreaInput.svelte
@@ -73,6 +73,7 @@
onInput()
}}
translate="no"
+
>{value ?? ''}
{/if}
diff --git a/src/ts/parser.ts b/src/ts/parser.ts
index dd727987..25c7fb3f 100644
--- a/src/ts/parser.ts
+++ b/src/ts/parser.ts
@@ -2026,6 +2026,7 @@ export async function risuCommandParser(da:string, arg:{
funcName?:string
passed?:string[],
recursiveCount?:number
+ lowLevelAccess?:boolean
} = {}):Promise<{[key:string]:string}>{
const db = arg.db ?? get(DataBase)
const aChara = arg.chara
@@ -2068,7 +2069,8 @@ export async function risuCommandParser(da:string, arg:{
consistantChar: false,
funcName: arg.funcName ?? null,
text: da,
- recursiveCount: recursiveCount
+ recursiveCount: recursiveCount,
+ lowLevelAccess: arg.lowLevelAccess ?? false
}
let tempVar:{[key:string]:string} = {}
diff --git a/src/ts/process/triggers.ts b/src/ts/process/triggers.ts
index 5c635cbf..5e9ccca1 100644
--- a/src/ts/process/triggers.ts
+++ b/src/ts/process/triggers.ts
@@ -1,4 +1,4 @@
-import { risuChatParser } from "../parser";
+import { risuChatParser, risuCommandParser } from "../parser";
import { DataBase, type Chat, type character } from "../storage/database";
import { tokenize } from "../tokenizer";
import { getModuleTriggers } from "./modules";
@@ -23,7 +23,7 @@ export interface triggerscript{
export type triggerCondition = triggerConditionsVar|triggerConditionsExists|triggerConditionsChatIndex
-export type triggerEffect = triggerEffectCutChat|triggerEffectModifyChat|triggerEffectImgGen|triggerEffectRegex|triggerEffectRunLLM|triggerEffectCheckSimilarity|triggerEffectSendAIprompt|triggerEffectShowAlert|triggerEffectSetvar|triggerEffectSystemPrompt|triggerEffectImpersonate|triggerEffectCommand|triggerEffectStop|triggerEffectRunTrigger
+export type triggerEffect = triggerCode|triggerEffectCutChat|triggerEffectModifyChat|triggerEffectImgGen|triggerEffectRegex|triggerEffectRunLLM|triggerEffectCheckSimilarity|triggerEffectSendAIprompt|triggerEffectShowAlert|triggerEffectSetvar|triggerEffectSystemPrompt|triggerEffectImpersonate|triggerEffectCommand|triggerEffectStop|triggerEffectRunTrigger
export type triggerConditionsVar = {
type:'var'|'value'
@@ -32,6 +32,11 @@ export type triggerConditionsVar = {
operator:'='|'!='|'>'|'<'|'>='|'<='|'null'|'true'
}
+export type triggerCode = {
+ type: 'triggercode',
+ code: string
+}
+
export type triggerConditionsChatIndex = {
type:'chatindex'
value:string
@@ -202,7 +207,7 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{
continue
}
}
- else if(mode !== trigger.type){
+ else if(mode !== trigger.type && trigger.effect[0]?.type !== 'triggercode'){
continue
}
@@ -518,6 +523,20 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{
setVar(effect.inputVar, res)
break
}
+
+ case 'triggercode':{
+ const triggerCodeResult = await risuCommandParser(effect.code,{
+ chara:char,
+ lowLevelAccess: trigger.lowLevelAccess,
+ funcName: mode
+ })
+
+ if(triggerCodeResult['__stop_chat__'] === '1'){
+ stopSending = true
+ }
+ break
+
+ }
}
}
}