43 lines
753 B
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
|
|
}
|