feat: charjs style button trigger

This commit is contained in:
bangonicdd
2025-02-04 09:04:55 +09:00
parent 95c6fe2b22
commit ad6f7e0be4
2 changed files with 43 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
import { runTrigger } from "./process/triggers";
import { sleep } from "./util";
import { getCurrentCharacter, getCurrentChat, setCurrentChat } from "./storage/database.svelte";
import { runLuaButtonTrigger } from "./process/lua";
function nodeObserve(node:HTMLElement){
@@ -35,6 +36,20 @@ function nodeObserve(node:HTMLElement){
}
if(btnEvent){
node.addEventListener('click', async () => {
const currentChar = getCurrentCharacter()
if(currentChar.type === 'group'){
return;
}
const triggerResult = await runLuaButtonTrigger(currentChar, btnEvent);
if(triggerResult){
setCurrentChat(triggerResult.chat);
}
}, {
passive: true,
});
node.setAttribute('risu-observer', 'true');
return
}

View File

@@ -457,6 +457,13 @@ export async function runLua(code:string, arg:{
}
break
}
case 'onButtonClick':{
const func = luaEngine.global.get('onButtonClick')
if(func){
res = await func(accessKey, data)
}
break
}
case 'editRequest':
case 'editDisplay':
case 'editInput':
@@ -675,4 +682,25 @@ export async function runLuaEditTrigger<T extends any>(char:character|groupChat|
} catch (error) {
return content
}
}
export async function runLuaButtonTrigger(char:character|groupChat|simpleCharacterArgument, data:string):Promise<T>{
let runResult
try {
const triggers = char.type === 'group' ? getModuleTriggers() : char.triggerscript.concat(getModuleTriggers())
const lowLevelAccess = char.type !== 'simple' ? char.lowLevelAccess ?? false : false
for(let trigger of triggers){
if(trigger?.effect?.[0]?.type === 'triggerlua'){
runResult = await runLua(trigger.effect[0].code, {
char: char,
lowLevelAccess: lowLevelAccess,
mode: 'onButtonClick',
data: data
})
}
}
} catch (error) {
throw(error)
}
return runResult
}