residentsleeper/scripting/commands/commands.go

43 lines
753 B
Go

package commands
import (
lua "github.com/yuin/gopher-lua"
"meow.tf/residentsleeper/commands"
"meow.tf/residentsleeper/scripting/eventloop"
)
func Loader(L *lua.LState) int {
mod := L.SetFuncs(L.NewTable(), exports)
L.Push(mod)
return 1
}
var exports = map[string]lua.LGFunction{
"register": commandRegister,
}
func commandRegister(L *lua.LState) int {
name := L.CheckString(1)
handler := L.CheckFunction(2)
loop := eventloop.FromState(L)
cb := func(ctx *commands.CommandContext) {
loop.RunOnLoop(func(L *lua.LState) {
L.Push(handler)
L.Push(lua.LString(ctx.User))
for _, v := range ctx.Arguments {
L.Push(lua.LString(v))
}
L.PCall(1+ctx.ArgumentCount, 0, nil)
})
}
commands.Register(name, cb)
return 0
}