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 }