From 18727b837e59af91e311add14724f8bb8aa711b5 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Fri, 28 Jul 2023 04:13:33 +0900 Subject: [PATCH] [feat] trigger gui --- src/lang/en.ts | 28 ++ src/lib/Setting/Pages/GlobalRegex.svelte | 2 +- src/lib/SideBars/CharConfig.svelte | 26 +- .../{Regex => Scripts}/RegexData.svelte | 0 .../{Regex => Scripts}/RegexList.svelte | 0 src/lib/SideBars/Scripts/TriggerData.svelte | 244 ++++++++++++++++++ src/lib/SideBars/Scripts/TriggerList.svelte | 23 ++ src/lib/UI/GUI/NumberInput.svelte | 25 +- src/lib/UI/GUI/TextInput.svelte | 10 +- src/ts/characterCards.ts | 11 +- src/ts/characters.ts | 4 +- src/ts/process/scripts.ts | 10 +- src/ts/process/triggers.ts | 42 +++ src/ts/storage/database.ts | 6 +- 14 files changed, 393 insertions(+), 38 deletions(-) rename src/lib/SideBars/{Regex => Scripts}/RegexData.svelte (100%) rename src/lib/SideBars/{Regex => Scripts}/RegexList.svelte (100%) create mode 100644 src/lib/SideBars/Scripts/TriggerData.svelte create mode 100644 src/lib/SideBars/Scripts/TriggerList.svelte create mode 100644 src/ts/process/triggers.ts diff --git a/src/lang/en.ts b/src/lang/en.ts index 904d6d96..85e33bcf 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -359,4 +359,32 @@ export const languageEnglish = { changeFolderColor: "Change Folder Color", fullWordMatching: "Full Word Matching", botSettingAtStart: "Bot Menu when Launch", + triggerStart: "On start of a chat", + triggerOutput: "On character's output", + triggerManual: "Manual Trigger Only", + triggerCondVar: "If Variable is", + triggerCondExists: "If Text Exists on Chat", + triggerScript: "Trigger Script", + triggerMatchRegex: "Match with Regex", + triggerMatchLoose: "Match Loosely", + triggerMatchStrict: "Match Strictly", + searchDepth: "Search Depth", + equal: "Equal to", + notEqual: "Not Equal to", + greater: "Greater than", + less: "Less than", + greaterEqual: "Greater or Equal to", + lessEqual: "Less or Equal to", + triggerEffSysPrompt: 'Add System Prompt', + triggerEffSetVar: 'Set Variable', + triggerEffImperson: 'Send Chat', + varableName: "Variable Name", + role: "Role", + location: 'Location', + promptstart: "Start of Prompt", + promptend: "End of Prompt", + historyend: "End of History", + always: "Always", + noEffect: "No Effect", + } \ No newline at end of file diff --git a/src/lib/Setting/Pages/GlobalRegex.svelte b/src/lib/Setting/Pages/GlobalRegex.svelte index 6e6b062e..8bddd46e 100644 --- a/src/lib/Setting/Pages/GlobalRegex.svelte +++ b/src/lib/Setting/Pages/GlobalRegex.svelte @@ -4,7 +4,7 @@ import Help from "src/lib/Others/Help.svelte"; import { DataBase } from "src/ts/storage/database"; import { exportRegex, importRegex } from "src/ts/process/scripts"; - import RegexList from "src/lib/SideBars/Regex/RegexList.svelte"; + import RegexList from "src/lib/SideBars/Scripts/RegexList.svelte";

{language.globalRegexScript}

diff --git a/src/lib/SideBars/CharConfig.svelte b/src/lib/SideBars/CharConfig.svelte index 11999a14..b1806729 100644 --- a/src/lib/SideBars/CharConfig.svelte +++ b/src/lib/SideBars/CharConfig.svelte @@ -13,7 +13,7 @@ import { onDestroy } from "svelte"; import {isEqual, cloneDeep} from 'lodash' import Help from "../Others/Help.svelte"; - import RegexData from "./Regex/RegexData.svelte"; + import RegexData from "./Scripts/RegexData.svelte"; import { exportChar, shareRisuHub } from "src/ts/characterCards"; import { getElevenTTSVoices, getWebSpeechTTSVoices, getVOICEVOXVoices } from "src/ts/process/tts"; import { checkCharOrder, getFileSrc } from "src/ts/storage/globalApi"; @@ -22,10 +22,11 @@ import TextInput from "../UI/GUI/TextInput.svelte"; import NumberInput from "../UI/GUI/NumberInput.svelte"; import TextAreaInput from "../UI/GUI/TextAreaInput.svelte"; - import Button from "../UI/GUI/Button.svelte"; - import SelectInput from "../UI/GUI/SelectInput.svelte"; - import OptionInput from "../UI/GUI/OptionInput.svelte"; - import RegexList from "./Regex/RegexList.svelte"; + import Button from "../UI/GUI/Button.svelte"; + import SelectInput from "../UI/GUI/SelectInput.svelte"; + import OptionInput from "../UI/GUI/OptionInput.svelte"; + import RegexList from "./Scripts/RegexList.svelte"; + import TriggerList from "./Scripts/TriggerList.svelte"; let subMenu = 0 let openHubUpload = false @@ -460,6 +461,21 @@ currentChar.data.customscript = script } }}> + + {language.triggerScript} + + {/if} {:else if subMenu === 5} {#if currentChar.type === 'character'} diff --git a/src/lib/SideBars/Regex/RegexData.svelte b/src/lib/SideBars/Scripts/RegexData.svelte similarity index 100% rename from src/lib/SideBars/Regex/RegexData.svelte rename to src/lib/SideBars/Scripts/RegexData.svelte diff --git a/src/lib/SideBars/Regex/RegexList.svelte b/src/lib/SideBars/Scripts/RegexList.svelte similarity index 100% rename from src/lib/SideBars/Regex/RegexList.svelte rename to src/lib/SideBars/Scripts/RegexList.svelte diff --git a/src/lib/SideBars/Scripts/TriggerData.svelte b/src/lib/SideBars/Scripts/TriggerData.svelte new file mode 100644 index 00000000..def3acfa --- /dev/null +++ b/src/lib/SideBars/Scripts/TriggerData.svelte @@ -0,0 +1,244 @@ + + +
+
+ + +
+ {#if open} +
+ {language.name} + + {language.type} + + {language.triggerOutput} + {language.triggerStart} + {language.triggerManual} + + + Conditions + + +
+ {#if value.conditions.length === 0} + {language.always} + {/if} + {#each value.conditions as cond,i} + {#if i > 0} +
+ {/if} + {language.type} + + + + { + if(cond.type === 'exists'){ + cond = { + type: 'exists', + value: '', + type2: 'loose', + depth: 3 + } + } + if(cond.type === 'var'){ + cond = { + type: 'var', + var: '', + value: '', + operator: '=' + } + } + }}> + {language.triggerCondExists} + {language.triggerCondVar} + + + {#if cond.type === 'exists'} + + {language.triggerMatchLoose} + {language.triggerMatchStrict} + {language.triggerMatchRegex} + + {language.value} + + + {language.searchDepth} + + {/if} + {#if cond.type === 'var'} + {language.varableName} + + {language.value} + + {language.equal} + {language.notEqual} + {language.greater} + {language.less} + {language.greaterEqual} + {language.lessEqual} + + + {/if} + {/each} +
+ + Effects + + + +
+ {#if value.effect.length === 0} + {language.noEffect} + {/if} + {#each value.effect as effect,i} + {#if i > 0} +
+ {/if} + {language.type} + + + + { + if(effect.type === 'systemprompt'){ + effect = { + type: 'systemprompt', + value: '', + location: 'historyend' + } + } + if(effect.type === 'setvar'){ + effect = { + type: 'setvar', + var: '', + value: '' + } + } + if(effect.type === 'impersonate'){ + effect = { + type: 'impersonate', + role: 'char', + value: '' + } + } + }}> + {language.triggerEffSysPrompt} + {language.triggerEffSetVar} + {language.triggerEffImperson} + + {#if effect.type === 'systemprompt'} + {language.location} + + {language.promptstart} + {language.historyend} + {language.promptend} + + {language.value} + + {/if} + {#if effect.type === 'setvar'} + {language.varableName} + + {language.value} + + {/if} + {#if effect.type === 'impersonate'} + {language.role} + + {language.user} + {language.character} + + {language.value} + + {/if} + {/each} +
+
+ {/if} +
+ + \ No newline at end of file diff --git a/src/lib/SideBars/Scripts/TriggerList.svelte b/src/lib/SideBars/Scripts/TriggerList.svelte new file mode 100644 index 00000000..8cba7fd8 --- /dev/null +++ b/src/lib/SideBars/Scripts/TriggerList.svelte @@ -0,0 +1,23 @@ + + +
+ {#if value.length === 0} +
No Scripts
+ {/if} + {#key sorted} + {#each value as triggerscript, i} + { + let triggerscript = value + triggerscript.splice(i, 1) + value = triggerscript + }}/> + {/each} + {/key} +
\ No newline at end of file diff --git a/src/lib/UI/GUI/NumberInput.svelte b/src/lib/UI/GUI/NumberInput.svelte index 9ab7b19c..3a53085e 100644 --- a/src/lib/UI/GUI/NumberInput.svelte +++ b/src/lib/UI/GUI/NumberInput.svelte @@ -1,27 +1,14 @@ - - '|'<'|'>='|'<=' +} + +export type triggerConditionsExists ={ + type: 'exists' + value:string + type2: 'strict'|'loose'|'regex', + depth: number +} + +export interface triggerEffectSetvar{ + type: 'setvar' + var:string + value:string +} + +export interface triggerEffectSystemPrompt{ + type: 'systemprompt', + location: 'start'|'historyend'|'promptend', + value:string +} + +export interface triggerEffectImpersonate{ + type: 'impersonate' + role: 'user'|'char', + value:string +} \ No newline at end of file diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts index d22e9b95..36fd4bb3 100644 --- a/src/ts/storage/database.ts +++ b/src/ts/storage/database.ts @@ -2,6 +2,7 @@ import { get, writable } from 'svelte/store'; import { checkNullish, selectSingleFile } from '../util'; import { changeLanguage, language } from '../../lang'; import type { RisuPlugin } from '../plugins/plugins'; +import type {triggerscript as triggerscriptMain} from '../process/triggers'; import { downloadFile, saveAsset as saveImageGlobal } from './globalApi'; import { clone, cloneDeep } from 'lodash'; import { defaultAutoSuggestPrompt, defaultJailbreak, defaultMainPrompt } from './defaultPrompts'; @@ -300,6 +301,8 @@ export interface customscript{ } +export type triggerscript = triggerscriptMain + export interface loreBook{ key:string secondkey:string @@ -331,6 +334,7 @@ export interface character{ chaId: string sdData: [string, string][] customscript: customscript[] + triggerscript: triggerscript[] utilityBot: boolean exampleMessage:string removedQuotes?:boolean @@ -540,7 +544,7 @@ export interface Database{ token:string, model:string } - globalscript: customscript[] + globalscript: customscript[], sendWithEnter:boolean clickToEdit: boolean koboldURL:string