]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
Builtin: Allow to revoke unknown privileges
authorSmallJoker <SmallJoker@users.noreply.github.com>
Sun, 24 Apr 2022 19:08:33 +0000 (21:08 +0200)
committerGitHub <noreply@github.com>
Sun, 24 Apr 2022 19:08:33 +0000 (21:08 +0200)
builtin/game/chat.lua

index 78d6bef981bb6b13064ecadb0af1dfd65d1af47f..c4fb6314e564e2f90e6e7bd9e7190b4863d5040d 100644 (file)
@@ -310,12 +310,7 @@ local function handle_revoke_command(caller, revokename, revokeprivstr)
                        and revokename == core.settings:get("name")
                        and revokename ~= ""
        if revokeprivstr == "all" then
-               revokeprivs = privs
-               privs = {}
-       else
-               for priv, _ in pairs(revokeprivs) do
-                       privs[priv] = nil
-               end
+               revokeprivs = table.copy(privs)
        end
 
        local privs_unknown = ""
@@ -332,7 +327,10 @@ local function handle_revoke_command(caller, revokename, revokeprivstr)
                end
                local def = core.registered_privileges[priv]
                if not def then
-                       privs_unknown = privs_unknown .. S("Unknown privilege: @1", priv) .. "\n"
+                       -- Old/removed privileges might still be granted to certain players
+                       if not privs[priv] then
+                               privs_unknown = privs_unknown .. S("Unknown privilege: @1", priv) .. "\n"
+                       end
                elseif is_singleplayer and def.give_to_singleplayer then
                        irrevokable[priv] = true
                elseif is_admin and def.give_to_admin then
@@ -359,19 +357,22 @@ local function handle_revoke_command(caller, revokename, revokeprivstr)
        end
 
        local revokecount = 0
-
-       core.set_player_privs(revokename, privs)
        for priv, _ in pairs(revokeprivs) do
-               -- call the on_revoke callbacks
-               core.run_priv_callbacks(revokename, priv, caller, "revoke")
+               privs[priv] = nil
                revokecount = revokecount + 1
        end
-       local new_privs = core.get_player_privs(revokename)
 
        if revokecount == 0 then
                return false, S("No privileges were revoked.")
        end
 
+       core.set_player_privs(revokename, privs)
+       for priv, _ in pairs(revokeprivs) do
+               -- call the on_revoke callbacks
+               core.run_priv_callbacks(revokename, priv, caller, "revoke")
+       end
+       local new_privs = core.get_player_privs(revokename)
+
        core.log("action", caller..' revoked ('
                        ..core.privs_to_string(revokeprivs, ', ')
                        ..') privileges from '..revokename)