From ad6f7e0be443af879f767aa00099417dc198b4b2 Mon Sep 17 00:00:00 2001 From: bangonicdd <157843588+bangonicdd2@users.noreply.github.com> Date: Tue, 4 Feb 2025 09:04:55 +0900 Subject: [PATCH] feat: charjs style button trigger --- src/ts/observer.ts | 15 +++++++++++++++ src/ts/process/lua.ts | 28 ++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/ts/observer.ts b/src/ts/observer.ts index aa4ca1a7..b37b6b8a 100644 --- a/src/ts/observer.ts +++ b/src/ts/observer.ts @@ -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 } diff --git a/src/ts/process/lua.ts b/src/ts/process/lua.ts index 3571860e..c7e1f636 100644 --- a/src/ts/process/lua.ts +++ b/src/ts/process/lua.ts @@ -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(char:character|groupChat| } catch (error) { return content } +} + +export async function runLuaButtonTrigger(char:character|groupChat|simpleCharacterArgument, data:string):Promise{ + 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 } \ No newline at end of file