Improve triggerv2

This commit is contained in:
Kwaroran
2025-02-16 19:13:49 +09:00
parent 825507fcaf
commit e6cba3865b
4 changed files with 476 additions and 74 deletions

View File

@@ -38,7 +38,8 @@ export type triggerEffectV2 = triggerV2Header|triggerV2IfVar|triggerV2Else|tri
triggerV2PushArrayVar|triggerV2PopArrayVar|triggerV2ShiftArrayVar|triggerV2UnshiftArrayVar|triggerV2SpliceArrayVar|triggerV2GetFirstMessage|
triggerV2SliceArrayVar|triggerV2GetIndexOfValueInArrayVar|triggerV2RemoveIndexFromArrayVar|triggerV2ConcatString|triggerV2GetLastUserMessage|
triggerV2GetLastCharMessage|triggerV2GetAlertInput|triggerV2GetDisplayState|triggerV2SetDisplayState|triggerV2UpdateGUI|triggerV2Wait|
triggerV2GetRequestState|triggerV2SetRequestState|triggerV2GetRequestStateRole|triggerV2SetRequestStateRole|triggerV2GetReuqestStateLength
triggerV2GetRequestState|triggerV2SetRequestState|triggerV2GetRequestStateRole|triggerV2SetRequestStateRole|triggerV2GetReuqestStateLength|triggerV2IfAdvanced|
triggerV2QuickSearchChat|triggerV2StopPromptSending
export type triggerConditionsVar = {
type:'var'|'value'
@@ -173,7 +174,7 @@ export type triggerV2Header = {
export type triggerV2IfVar = {
type: 'v2If',
condition: '='|'!='|'>'|'<'|'>='|'<='|'null'|'true'|'false',
condition: '='|'!='|'>'|'<'|'>='|'<=',
targetType: 'var'|'value',
target: string,
source: string,
@@ -678,9 +679,36 @@ export type triggerV2Wait = {
indent: number
}
export type triggerV2IfAdvanced = {
type: 'v2IfAdvanced',
condition: '='|'!='|'>'|'<'|'>='|'<='|'≒'|'∋'|'∈'|'∌'|'∉'|'≡'
targetType: 'var'|'value',
target: string,
sourceType: 'var'|'value',
source: string,
indent: number
}
export type triggerV2QuickSearchChat = {
type: 'v2QuickSearchChat',
value: string,
valueType: 'var'|'value',
condition: 'loose'|'strict'|'regex',
depth: string,
depthType: 'var'|'value',
outputVar: string,
indent: number
}
export type triggerV2StopPromptSending = {
type: 'v2StopPromptSending',
indent: number
}
const safeSubset = [
'v2SetVar',
'v2If',
'v2IfAdvanced',
'v2Else',
'v2EndIndent',
'v2LoopNTimes',
@@ -1169,8 +1197,9 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{
setVar(varKey, resultValue)
break
}
case 'v2If':{
const sourceValue = getVar(risuChatParser(effect.source,{chara:char}))
case 'v2If':
case 'v2IfAdvanced':{
const sourceValue = (effect.type === 'v2If' || effect.sourceType === 'var') ? getVar(risuChatParser(effect.source,{chara:char})) : risuChatParser(effect.source,{chara:char})
const targetValue = effect.targetType === 'value' ? risuChatParser(effect.target,{chara:char}) : getVar(risuChatParser(effect.target,{chara:char}))
let pass = false
switch(effect.condition){
@@ -1208,6 +1237,60 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{
pass = Number(sourceValue) <= Number(targetValue)
break
}
case '∈':{
try {
pass = JSON.parse(targetValue).includes(sourceValue)
} catch (error) {
pass = false
}
break
}
case '∋':{
try {
pass = JSON.parse(sourceValue).includes(targetValue)
} catch (error) {
pass = false
}
break
}
case '∉':{
try {
pass = !JSON.parse(targetValue).includes(sourceValue)
} catch (error) {
pass = true
}
break
}
case '∌':{
try {
pass = !JSON.parse(sourceValue).includes(targetValue)
} catch (error) {
pass = true
}
break
}
case '≒':{
const num1 = Number(sourceValue)
const num2 = Number(targetValue)
if(Number.isNaN(num1) || Number.isNaN(num2)){
pass = sourceValue.toLocaleLowerCase().replace(/ /g,'') === targetValue.toLocaleLowerCase().replace(/ /g,'')
}
else{
pass = Math.abs(num1 - num2) < 0.0001
}
break
}
case '≡':{
if(targetValue === 'true'){
pass = sourceValue === 'true' || sourceValue === '1'
}
else if(targetValue === 'false'){
pass = !(sourceValue === 'true' || sourceValue === '1')
}
else{
pass = sourceValue === targetValue
}
}
}
@@ -1814,6 +1897,29 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{
setVar(effect.outputVar, json.length.toString())
break
}
case 'v2QuickSearchChat':{
const value = effect.valueType === 'value' ? risuChatParser(effect.value,{chara:char}) : getVar(risuChatParser(effect.value,{chara:char}))
const depth = effect.depthType === 'value' ? Number(risuChatParser(effect.depth,{chara:char})) : Number(getVar(risuChatParser(effect.depth,{chara:char})))
const condition = effect.condition
if(isNaN(depth)){
setVar(effect.outputVar, '0')
break
}
let pass = false
let da = chat.message.slice(0-depth).map((v)=>v.data).join(' ')
if(condition === 'strict'){
pass = da.split(' ').includes(value)
}
else if(condition === 'loose'){
pass = da.toLowerCase().includes(value.toLowerCase())
}
else if(condition === 'regex'){
pass = new RegExp(value).test(da)
}
setVar(effect.outputVar, pass ? '1' : '0')
break
}
}
}
}