capturetheflag/mods/other/lib_chatcmdbuilder/README.md

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 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:

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