# ChatCmdBuilder Easily create complex chat commands with no regex. Created by rubenwardy License: MIT # Usage ## Registering Chat Commands `ChatCmdBuilder.new(name, setup)` registers a new chat command called `name`. Setup is called immediately after calling `new` to initialise subcommands. You can set values in the chat command definition by using def: `ChatCmdBuilder.new(name, setup, def)`. Here is an example: ```Lua ChatCmdBuilder.new("admin", function(cmd) cmd:sub("kill :target", function(name, target) local player = minetest.get_player_by_name(target) if player then player:set_hp(0) return true, "Killed " .. target else return false, "Unable to find " .. target end end) cmd:sub("move :target to :pos:pos", function(name, target, pos) local player = minetest.get_player_by_name(target) if player then player:setpos(pos) return true, "Moved " .. target .. " to " .. minetest.pos_to_string(pos) else return false, "Unable to find " .. target end end) end, { description = "Admin tools", privs = { kick = true, ban = true } }) ``` A player could then do `/admin kill player1` to kill player1, or `/admin move player1 to 0,0,0` to teleport a user. ## Introduction to Routing A route is a string. Let's look at `move :target to :pos:pos`: * `move` and `to` are constants. They need to be there in order to match. * `:target` and `:pos:pos` are parameters. They're passed to the function. * The second `pos` in `:pos:pos` after `:` is the param type. `:target` has an implicit type of `word`. ## Param Types * `word` - default. Any string without spaces. * `number` - Any number, including decimals * `int` - Any integer, no decimals * `text` - Any string * `pos` - 1,2,3 or 1.1,2,3.4567 or (1,2,3) or 1.2, 2 ,3.2 ## Build chat command function If you don't want to register the chatcommand at this point, you can just generate a function using `ChatCmdBuilder.build`. For example, this is the full definition of ChatCmdBuilder.new: ```Lua function ChatCmdBuilder.new(name, func, def) def = def or {} def.func = ChatCmdBuilder.build(name, func) minetest.register_chatcommand(name, def) end ``` ## Run tests ```Bash sudo apt-get install luajit luajit init.lua ```