From f1251d6454a0861f3f1fee91a9e8f99e6bb4c8aa Mon Sep 17 00:00:00 2001 From: flux <25628292+fluxionary@users.noreply.github.com> Date: Sun, 11 Jul 2021 23:02:21 -0700 Subject: [PATCH] add option to enable a separate 'kick' privilege --- commands.lua | 14 +++++++++++++- imports/sban.lua | 4 ++-- privs.lua | 9 +++++++++ settings.lua | 1 + settingtypes.txt | 3 +++ 5 files changed, 28 insertions(+), 3 deletions(-) diff --git a/commands.lua b/commands.lua index bcb6bc9..adf58af 100644 --- a/commands.lua +++ b/commands.lua @@ -9,6 +9,7 @@ local util = verbana.util local mod_priv = verbana.privs.moderator local admin_priv = verbana.privs.admin +local kick_priv = verbana.privs.kick local debug_mode = settings.debug_mode local parse_timespan = util.parse_timespan @@ -250,11 +251,22 @@ register_chatcommand('unverify', { end }) +local kick_privs = {[mod_priv]=true} +if kick_priv and kick_priv ~= mod_priv then + kick_privs = nil +end + override_chatcommand('kick', { description='Kick a player', params=' []', - privs={[mod_priv]=true}, + privs=kick_privs or {}, func=function(caller, params) + if not kick_privs then + if not (minetest.check_player_privs(caller, {[mod_priv]=true}) or + minetest.check_player_privs(caller, {[kick_priv]=true})) then + return false, "You lack sufficient privileges to run this command" + end + end local player_id, player_name, _, reason = parse_player_status_params(params) if not player_id then return false, reason diff --git a/imports/sban.lua b/imports/sban.lua index c4cffb3..b7f036a 100644 --- a/imports/sban.lua +++ b/imports/sban.lua @@ -1,4 +1,4 @@ -verbana.data.import = verbana.data.import or {} +verbana.import = verbana.import or {} verbana.import.sban = {} local _sban = {} @@ -153,4 +153,4 @@ function _sban.import(filename) end log('action', 'imported from SBAN in %s seconds', os.clock() - start) return true -end -- data.import_from_sban +end -- import_from_sban diff --git a/privs.lua b/privs.lua index c463f81..ec71f0a 100644 --- a/privs.lua +++ b/privs.lua @@ -2,6 +2,7 @@ verbana.privs = {} verbana.privs.admin = verbana.settings.admin_priv verbana.privs.moderator = verbana.settings.moderator_priv +verbana.privs.kick = verbana.settings.kick_priv if not minetest.registered_privileges[verbana.privs.admin] then minetest.register_privilege(verbana.privs.admin, 'Verbana administrator') @@ -11,6 +12,14 @@ if not minetest.registered_privileges[verbana.privs.moderator] then minetest.register_privilege(verbana.privs.moderator, 'Verbana moderator') end +minetest.registered_privileges['kick'] = nil + +if verbana.privs.kick then + if not minetest.registered_privileges[verbana.privs.kick] then + minetest.register_privilege(verbana.privs.kick, 'Verbana kicker') + end +end + function verbana.privs.is_admin(name) return minetest.check_player_privs(name, {[verbana.privs.admin] = true}) end diff --git a/settings.lua b/settings.lua index e01d99f..8b0f63d 100644 --- a/settings.lua +++ b/settings.lua @@ -50,6 +50,7 @@ verbana.settings.asn_data_path = get_setting('verbana.asn_data_path', ('%s/data- verbana.settings.admin_priv = get_setting('verbana.admin_priv', 'ban_admin') verbana.settings.moderator_priv = get_setting('verbana.moderator_priv', 'ban') +verbana.settings.kick_priv = get_setting('verbana.kick_priv', nil) verbana.settings.verified_privs = minetest.string_to_privs(get_setting('default_privs', 'shout,interact')) verbana.settings.unverified_privs = minetest.string_to_privs(get_setting('verbana.unverified_privs', 'shout')) diff --git a/settingtypes.txt b/settingtypes.txt index 9a42836..ff71a44 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -13,6 +13,9 @@ verbana.admin_priv (Priv required for Verbana administration) string ban_admin # The privilege of the Verbana moderator(s) verbana.moderator_priv (Priv required for Verbana moderation) string ban +# A privilege for the "kick" command, if needed +verbana.kick_priv (additional priv for "kick" command) string + # Comma delimited verbana.unverified_privs (Privs for unverified users) string shout