2.2 KiB
2.2 KiB
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:
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
andto
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 ofword
.
Param Types
word
- default. Any string without spaces.number
- Any number, including decimalsint
- Any integer, no decimalstext
- Any stringpos
- 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:
function ChatCmdBuilder.new(name, func, def)
def = def or {}
def.func = ChatCmdBuilder.build(name, func)
minetest.register_chatcommand(name, def)
end
Run tests
sudo apt-get install luajit
luajit init.lua