From 3a7fb5bf1eefbc623658ccb2c6500b8e2f7ad766 Mon Sep 17 00:00:00 2001
From: sfan5 <sfan5@live.de>
Date: Sun, 1 Jan 2017 22:26:58 +0100
Subject: Add //help command (fixes #123)

---
 worldedit_commands/init.lua | 50 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

(limited to 'worldedit_commands')

diff --git a/worldedit_commands/init.lua b/worldedit_commands/init.lua
index 088191c..7fcdb18 100644
--- a/worldedit_commands/init.lua
+++ b/worldedit_commands/init.lua
@@ -93,6 +93,56 @@ minetest.register_chatcommand("/about", {
 	end,
 })
 
+-- mostly copied from builtin/chatcommands.lua with minor modifications
+minetest.register_chatcommand("/help", {
+	privs = {},
+	params = "[all/<cmd>]",
+	description = "Get help for WorldEdit commands",
+	func = function(name, param)
+		local function is_we_command(cmd)
+			return cmd:sub(0, 1) == "/"
+		end
+		local function format_help_line(cmd, def)
+			local msg = minetest.colorize("#00ffff", "/"..cmd)
+			if def.params and def.params ~= "" then
+				msg = msg .. " " .. def.params
+			end
+			if def.description and def.description ~= "" then
+				msg = msg .. ": " .. def.description
+			end
+			return msg
+		end
+
+		if not minetest.check_player_privs(name, "worldedit") then
+			return false, "You are not allowed to use any WorldEdit commands."
+		end
+		if param == "" then
+			local msg = ""
+			local cmds = {}
+			for cmd, def in pairs(minetest.chatcommands) do
+				if is_we_command(cmd) and minetest.check_player_privs(name, def.privs) then
+					cmds[#cmds + 1] = cmd:sub(2) -- strip the /
+				end
+			end
+			table.sort(cmds)
+			return true, "Available commands: " .. table.concat(cmds, " ") .. "\n"
+					.. "Use '//help <cmd>' to get more information,"
+					.. " or '//help all' to list everything."
+		elseif param == "all" then
+			local cmds = {}
+			for cmd, def in pairs(minetest.chatcommands) do
+				if is_we_command(cmd) and minetest.check_player_privs(name, def.privs) then
+					cmds[#cmds + 1] = format_help_line(cmd, def)
+				end
+			end
+			table.sort(cmds)
+			return true, "Available commands:\n"..table.concat(cmds, "\n")
+		else
+			return minetest.chatcommands["help"].func(name, "/" .. param)
+		end
+	end,
+})
+
 minetest.register_chatcommand("/inspect", {
 	params = "on/off/1/0/true/false/yes/no/enable/disable/<blank>",
 	description = "Enable or disable node inspection",
-- 
cgit v1.2.3