forked from Mirrorlandia_minetest/minetest
Add new command /revokeme <priv> (#9584)
This commit is contained in:
parent
68f45fc130
commit
2fe4641c1e
@ -239,57 +239,76 @@ core.register_chatcommand("grantme", {
|
|||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local function handle_revoke_command(caller, revokename, revokeprivstr)
|
||||||
|
local caller_privs = core.get_player_privs(caller)
|
||||||
|
if not (caller_privs.privs or caller_privs.basic_privs) then
|
||||||
|
return false, "Your privileges are insufficient."
|
||||||
|
end
|
||||||
|
|
||||||
|
if not core.get_auth_handler().get_auth(revokename) then
|
||||||
|
return false, "Player " .. revokename .. " does not exist."
|
||||||
|
end
|
||||||
|
|
||||||
|
local revokeprivs = core.string_to_privs(revokeprivstr)
|
||||||
|
local privs = core.get_player_privs(revokename)
|
||||||
|
local basic_privs =
|
||||||
|
core.string_to_privs(core.settings:get("basic_privs") or "interact,shout")
|
||||||
|
for priv, _ in pairs(revokeprivs) do
|
||||||
|
if not basic_privs[priv] and not caller_privs.privs then
|
||||||
|
return false, "Your privileges are insufficient."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if revokeprivstr == "all" then
|
||||||
|
revokeprivs = privs
|
||||||
|
privs = {}
|
||||||
|
else
|
||||||
|
for priv, _ in pairs(revokeprivs) do
|
||||||
|
privs[priv] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for priv, _ in pairs(revokeprivs) do
|
||||||
|
-- call the on_revoke callbacks
|
||||||
|
core.run_priv_callbacks(revokename, priv, caller, "revoke")
|
||||||
|
end
|
||||||
|
|
||||||
|
core.set_player_privs(revokename, privs)
|
||||||
|
core.log("action", caller..' revoked ('
|
||||||
|
..core.privs_to_string(revokeprivs, ', ')
|
||||||
|
..') privileges from '..revokename)
|
||||||
|
if revokename ~= caller then
|
||||||
|
core.chat_send_player(revokename, caller
|
||||||
|
.. " revoked privileges from you: "
|
||||||
|
.. core.privs_to_string(revokeprivs, ' '))
|
||||||
|
end
|
||||||
|
return true, "Privileges of " .. revokename .. ": "
|
||||||
|
.. core.privs_to_string(
|
||||||
|
core.get_player_privs(revokename), ' ')
|
||||||
|
end
|
||||||
|
|
||||||
core.register_chatcommand("revoke", {
|
core.register_chatcommand("revoke", {
|
||||||
params = "<name> (<privilege> | all)",
|
params = "<name> (<privilege> | all)",
|
||||||
description = "Remove privileges from player",
|
description = "Remove privileges from player",
|
||||||
privs = {},
|
privs = {},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
if not core.check_player_privs(name, {privs=true}) and
|
local revokename, revokeprivstr = string.match(param, "([^ ]+) (.+)")
|
||||||
not core.check_player_privs(name, {basic_privs=true}) then
|
if not revokename or not revokeprivstr then
|
||||||
return false, "Your privileges are insufficient."
|
|
||||||
end
|
|
||||||
local revoke_name, revoke_priv_str = string.match(param, "([^ ]+) (.+)")
|
|
||||||
if not revoke_name or not revoke_priv_str then
|
|
||||||
return false, "Invalid parameters (see /help revoke)"
|
return false, "Invalid parameters (see /help revoke)"
|
||||||
elseif not core.get_auth_handler().get_auth(revoke_name) then
|
|
||||||
return false, "Player " .. revoke_name .. " does not exist."
|
|
||||||
end
|
|
||||||
local revoke_privs = core.string_to_privs(revoke_priv_str)
|
|
||||||
local privs = core.get_player_privs(revoke_name)
|
|
||||||
local basic_privs =
|
|
||||||
core.string_to_privs(core.settings:get("basic_privs") or "interact,shout")
|
|
||||||
for priv, _ in pairs(revoke_privs) do
|
|
||||||
if not basic_privs[priv] and
|
|
||||||
not core.check_player_privs(name, {privs=true}) then
|
|
||||||
return false, "Your privileges are insufficient."
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if revoke_priv_str == "all" then
|
|
||||||
revoke_privs = privs
|
|
||||||
privs = {}
|
|
||||||
else
|
|
||||||
for priv, _ in pairs(revoke_privs) do
|
|
||||||
privs[priv] = nil
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
return handle_revoke_command(name, revokename, revokeprivstr)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
for priv, _ in pairs(revoke_privs) do
|
core.register_chatcommand("revokeme", {
|
||||||
-- call the on_revoke callbacks
|
params = "<privilege> | all",
|
||||||
core.run_priv_callbacks(revoke_name, priv, name, "revoke")
|
description = "Revoke privileges from yourself",
|
||||||
|
privs = {},
|
||||||
|
func = function(name, param)
|
||||||
|
if param == "" then
|
||||||
|
return false, "Invalid parameters (see /help revokeme)"
|
||||||
end
|
end
|
||||||
|
return handle_revoke_command(name, name, param)
|
||||||
core.set_player_privs(revoke_name, privs)
|
|
||||||
core.log("action", name..' revoked ('
|
|
||||||
..core.privs_to_string(revoke_privs, ', ')
|
|
||||||
..') privileges from '..revoke_name)
|
|
||||||
if revoke_name ~= name then
|
|
||||||
core.chat_send_player(revoke_name, name
|
|
||||||
.. " revoked privileges from you: "
|
|
||||||
.. core.privs_to_string(revoke_privs, ' '))
|
|
||||||
end
|
|
||||||
return true, "Privileges of " .. revoke_name .. ": "
|
|
||||||
.. core.privs_to_string(
|
|
||||||
core.get_player_privs(revoke_name), ' ')
|
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user