feat: charjs style button trigger
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import { runTrigger } from "./process/triggers";
|
import { runTrigger } from "./process/triggers";
|
||||||
import { sleep } from "./util";
|
import { sleep } from "./util";
|
||||||
import { getCurrentCharacter, getCurrentChat, setCurrentChat } from "./storage/database.svelte";
|
import { getCurrentCharacter, getCurrentChat, setCurrentChat } from "./storage/database.svelte";
|
||||||
|
import { runLuaButtonTrigger } from "./process/lua";
|
||||||
|
|
||||||
|
|
||||||
function nodeObserve(node:HTMLElement){
|
function nodeObserve(node:HTMLElement){
|
||||||
@@ -35,6 +36,20 @@ function nodeObserve(node:HTMLElement){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(btnEvent){
|
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');
|
node.setAttribute('risu-observer', 'true');
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -457,6 +457,13 @@ export async function runLua(code:string, arg:{
|
|||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
case 'onButtonClick':{
|
||||||
|
const func = luaEngine.global.get('onButtonClick')
|
||||||
|
if(func){
|
||||||
|
res = await func(accessKey, data)
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
case 'editRequest':
|
case 'editRequest':
|
||||||
case 'editDisplay':
|
case 'editDisplay':
|
||||||
case 'editInput':
|
case 'editInput':
|
||||||
@@ -676,3 +683,24 @@ export async function runLuaEditTrigger<T extends any>(char:character|groupChat|
|
|||||||
return content
|
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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user