diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-04-09 18:57:41 +0300 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-04-09 18:57:41 +0300 |
commit | b1f043d010b6260422615c82c3af6a3b80fdd3c9 (patch) | |
tree | 65fbad289f1a97312c2940bf259ad219249e0096 | |
parent | 251c0c850881e024e71d0e04e4ab7c429a899fa5 (diff) | |
download | minetest-b1f043d010b6260422615c82c3af6a3b80fdd3c9.tar.gz minetest-b1f043d010b6260422615c82c3af6a3b80fdd3c9.tar.bz2 minetest-b1f043d010b6260422615c82c3af6a3b80fdd3c9.zip |
Add basic_privs privilege
-rw-r--r-- | builtin/chatcommands.lua | 24 | ||||
-rw-r--r-- | builtin/privileges.lua | 1 |
2 files changed, 23 insertions, 2 deletions
diff --git a/builtin/chatcommands.lua b/builtin/chatcommands.lua index d2bf62c6a..047cfc692 100644 --- a/builtin/chatcommands.lua +++ b/builtin/chatcommands.lua @@ -111,8 +111,13 @@ minetest.register_chatcommand("privs", { minetest.register_chatcommand("grant", { params = "<name> <privilege>|all", description = "Give privilege to player", - privs = {privs=true}, + privs = {}, func = function(name, param) + if not minetest.check_player_privs(name, {privs=true}) and + not minetest.check_player_privs(name, {basic_privs=true}) then + minetest.chat_send_player(name, "Your privileges are insufficient.") + return + end local grantname, grantprivstr = string.match(param, "([^ ]+) (.+)") if not grantname or not grantprivstr then minetest.chat_send_player(name, "Invalid parameters (see /help grant)") @@ -125,6 +130,10 @@ minetest.register_chatcommand("grant", { local privs = minetest.get_player_privs(grantname) local privs_known = true for priv, _ in pairs(grantprivs) do + if priv ~= "interact" and priv ~= "shout" and not minetest.check_player_privs(name, {privs=true}) then + minetest.chat_send_player(name, "Your privileges are insufficient.") + return + end if not minetest.registered_privileges[priv] then minetest.chat_send_player(name, "Unknown privilege: "..priv) privs_known = false @@ -144,8 +153,13 @@ minetest.register_chatcommand("grant", { minetest.register_chatcommand("revoke", { params = "<name> <privilege>|all", description = "Remove privilege from player", - privs = {privs=true}, + privs = {}, func = function(name, param) + if not minetest.check_player_privs(name, {privs=true}) and + not minetest.check_player_privs(name, {basic_privs=true}) then + minetest.chat_send_player(name, "Your privileges are insufficient.") + return + end local revokename, revokeprivstr = string.match(param, "([^ ]+) (.+)") if not revokename or not revokeprivstr then minetest.chat_send_player(name, "Invalid parameters (see /help revoke)") @@ -153,6 +167,12 @@ minetest.register_chatcommand("revoke", { end local revokeprivs = minetest.string_to_privs(revokeprivstr) local privs = minetest.get_player_privs(revokename) + for priv, _ in pairs(revokeprivs) do + if priv ~= "interact" and priv ~= "shout" and not minetest.check_player_privs(name, {privs=true}) then + minetest.chat_send_player(name, "Your privileges are insufficient.") + return + end + end if revokeprivstr == "all" then privs = {} else diff --git a/builtin/privileges.lua b/builtin/privileges.lua index 5db0ca942..6cb42c103 100644 --- a/builtin/privileges.lua +++ b/builtin/privileges.lua @@ -30,6 +30,7 @@ minetest.register_privilege("teleport", "Can use /teleport command") minetest.register_privilege("bring", "Can teleport other players") minetest.register_privilege("settime", "Can use /time") minetest.register_privilege("privs", "Can modify privileges") +minetest.register_privilege("basic_privs", "Can modify 'shout' and 'interact' privileges") minetest.register_privilege("server", "Can do server maintenance stuff") minetest.register_privilege("shout", "Can speak in chat") minetest.register_privilege("ban", "Can ban and unban players") |