Builtin/../chatcommands: Add /grantme command

master
red-001 2016-09-27 12:53:01 +01:00 committed by paramat
parent 4b17105dc4
commit c31e354342
1 changed files with 56 additions and 38 deletions

View File

@ -154,18 +154,14 @@ core.register_chatcommand("privs", {
core.get_player_privs(param), ' ') core.get_player_privs(param), ' ')
end, end,
}) })
core.register_chatcommand("grant", {
params = "<name> <privilege>|all", local function handle_grant_command(caller, grantname, grantprivstr)
description = "Give privilege to player", local caller_privs = minetest.get_player_privs(caller)
func = function(name, param) if not (caller_privs.privs or caller_privs.basic_privs) then
if not core.check_player_privs(name, {privs=true}) and
not core.check_player_privs(name, {basic_privs=true}) then
return false, "Your privileges are insufficient." return false, "Your privileges are insufficient."
end end
local grantname, grantprivstr = string.match(param, "([^ ]+) (.+)")
if not grantname or not grantprivstr then if not core.auth_table[grantname] then
return false, "Invalid parameters (see /help grant)"
elseif not core.auth_table[grantname] then
return false, "Player " .. grantname .. " does not exist." return false, "Player " .. grantname .. " does not exist."
end end
local grantprivs = core.string_to_privs(grantprivstr) local grantprivs = core.string_to_privs(grantprivstr)
@ -177,8 +173,7 @@ core.register_chatcommand("grant", {
local basic_privs = local basic_privs =
core.string_to_privs(core.setting_get("basic_privs") or "interact,shout") core.string_to_privs(core.setting_get("basic_privs") or "interact,shout")
for priv, _ in pairs(grantprivs) do for priv, _ in pairs(grantprivs) do
if not basic_privs[priv] and if not basic_privs[priv] and not caller_privs.privs then
not core.check_player_privs(name, {privs=true}) then
return false, "Your privileges are insufficient." return false, "Your privileges are insufficient."
end end
if not core.registered_privileges[priv] then if not core.registered_privileges[priv] then
@ -190,17 +185,40 @@ core.register_chatcommand("grant", {
return false, privs_unknown return false, privs_unknown
end end
core.set_player_privs(grantname, privs) core.set_player_privs(grantname, privs)
core.log("action", name..' granted ('..core.privs_to_string(grantprivs, ', ')..') privileges to '..grantname) core.log("action", caller..' granted ('..core.privs_to_string(grantprivs, ', ')..') privileges to '..grantname)
if grantname ~= name then if grantname ~= caller then
core.chat_send_player(grantname, name core.chat_send_player(grantname, caller
.. " granted you privileges: " .. " granted you privileges: "
.. core.privs_to_string(grantprivs, ' ')) .. core.privs_to_string(grantprivs, ' '))
end end
return true, "Privileges of " .. grantname .. ": " return true, "Privileges of " .. grantname .. ": "
.. core.privs_to_string( .. core.privs_to_string(
core.get_player_privs(grantname), ' ') core.get_player_privs(grantname), ' ')
end
core.register_chatcommand("grant", {
params = "<name> <privilege>|all",
description = "Give privilege to player",
func = function(name, param)
local grantname, grantprivstr = string.match(param, "([^ ]+) (.+)")
if not grantname or not grantprivstr then
return false, "Invalid parameters (see /help grant)"
end
return handle_grant_command(name, grantname, grantprivstr)
end, end,
}) })
core.register_chatcommand("grantme", {
params = "<privilege>|all",
description = "Grant privileges to yourself",
func = function(name, param)
if param == "" then
return false, "Invalid parameters (see /help grantme)"
end
return handle_grant_command(name, name, param)
end,
})
core.register_chatcommand("revoke", { core.register_chatcommand("revoke", {
params = "<name> <privilege>|all", params = "<name> <privilege>|all",
description = "Remove privilege from player", description = "Remove privilege from player",