Support cbs in trigger

This commit is contained in:
kwaroran
2024-04-10 09:46:06 +09:00
parent 0d57392feb
commit 1a2da8224e

View File

@@ -85,7 +85,7 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{
} }
function getVar(key:string){ function getVar(key:string){
return chat.scriptstate?.['$' + key] return `${chat.scriptstate?.['$' + key]}`
} }
function setVar(key:string, value:string){ function setVar(key:string, value:string){
@@ -103,40 +103,42 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{
let pass = true let pass = true
for(const condition of trigger.conditions){ for(const condition of trigger.conditions){
if(condition.type === 'var' || condition.type === 'chatindex'){ if(condition.type === 'var' || condition.type === 'chatindex'){
const varValue = (condition.type === 'var') ? (getVar(condition.var) ?? 'null') : (chat.message.length) let varValue = (condition.type === 'var') ? (getVar(condition.var) ?? 'null') : (chat.message.length.toString())
if(varValue === undefined || varValue === null){ if(varValue === undefined || varValue === null){
pass = false pass = false
break break
} }
else{ else{
const conditionValue = risuChatParser(condition.value,{chara:char})
varValue = risuChatParser(varValue,{chara:char})
switch(condition.operator){ switch(condition.operator){
case '=': case '=':
if(varValue !== condition.value){ if(varValue !== conditionValue){
pass = false pass = false
} }
break break
case '!=': case '!=':
if(varValue === condition.value){ if(varValue === conditionValue){
pass = false pass = false
} }
break break
case '>': case '>':
if(Number(varValue) > Number(condition.value)){ if(Number(varValue) > Number(conditionValue)){
pass = false pass = false
} }
break break
case '<': case '<':
if(Number(varValue) < Number(condition.value)){ if(Number(varValue) < Number(conditionValue)){
pass = false pass = false
} }
break break
case '>=': case '>=':
if(Number(varValue) >= Number(condition.value)){ if(Number(varValue) >= Number(conditionValue)){
pass = false pass = false
} }
break break
case '<=': case '<=':
if(Number(varValue) <= Number(condition.value)){ if(Number(varValue) <= Number(conditionValue)){
pass = false pass = false
} }
break break
@@ -149,7 +151,8 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{
} }
} }
else if(condition.type === 'exists'){ else if(condition.type === 'exists'){
const val = risuChatParser(condition.value,{chara:char}) const conditionValue = risuChatParser(condition.value,{chara:char})
const val = risuChatParser(conditionValue,{chara:char})
let da = chat.message.slice(0-condition.depth).map((v)=>v.data).join(' ') let da = chat.message.slice(0-condition.depth).map((v)=>v.data).join(' ')
if(condition.type2 === 'strict'){ if(condition.type2 === 'strict'){
pass = da.split(' ').includes(val) pass = da.split(' ').includes(val)
@@ -170,42 +173,47 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{
} }
for(const effect of trigger.effect){ for(const effect of trigger.effect){
if(effect.type === 'setvar'){ if(effect.type === 'setvar'){
const effectValue = risuChatParser(effect.value,{chara:char})
const varKey = risuChatParser(effect.var,{chara:char})
switch(effect.operator){ switch(effect.operator){
case '=':{ case '=':{
setVar(effect.var, effect.value) setVar(varKey, effectValue)
break break
} }
case '+=':{ case '+=':{
setVar(effect.var, (Number(getVar(effect.var)) + Number(effect.value)).toString()) setVar(varKey, (Number(getVar(varKey)) + Number(effectValue)).toString())
break break
} }
case '-=':{ case '-=':{
setVar(effect.var, (Number(getVar(effect.var)) - Number(effect.value)).toString()) setVar(varKey, (Number(getVar(varKey)) - Number(effectValue)).toString())
break break
} }
case '*=':{ case '*=':{
setVar(effect.var, (Number(getVar(effect.var)) * Number(effect.value)).toString()) setVar(varKey, (Number(getVar(varKey)) * Number(effectValue)).toString())
break break
} }
case '/=':{ case '/=':{
setVar(effect.var, (Number(getVar(effect.var)) / Number(effect.value)).toString()) setVar(varKey, (Number(getVar(varKey)) / Number(effectValue)).toString())
break break
} }
} }
} }
else if(effect.type === 'systemprompt'){ else if(effect.type === 'systemprompt'){
additonalSysPrompt[effect.location] += effect.value + "\n\n" const effectValue = risuChatParser(effect.value,{chara:char})
additonalSysPrompt[effect.location] += effectValue + "\n\n"
} }
else if(effect.type === 'impersonate'){ else if(effect.type === 'impersonate'){
const effectValue = risuChatParser(effect.value,{chara:char})
if(effect.role === 'user'){ if(effect.role === 'user'){
chat.message.push({role: 'user', data: effect.value}) chat.message.push({role: 'user', data: effectValue})
} }
else if(effect.role === 'char'){ else if(effect.role === 'char'){
chat.message.push({role: 'char', data: effect.value}) chat.message.push({role: 'char', data: effectValue})
} }
} }
else if(effect.type === 'command'){ else if(effect.type === 'command'){
return await processMultiCommand(effect.value) const effectValue = risuChatParser(effect.value,{chara:char})
await processMultiCommand(effectValue)
} }
} }
} }
@@ -225,6 +233,8 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{
currentChat.scriptstate = chat.scriptstate currentChat.scriptstate = chat.scriptstate
} }
console.log(chat)
return {additonalSysPrompt, chat, tokens:caculatedTokens} return {additonalSysPrompt, chat, tokens:caculatedTokens}
} }