add option to enable a separate 'kick' privilege

master
flux 2021-07-11 23:02:21 -07:00
parent c867a0b34b
commit f1251d6454
5 changed files with 28 additions and 3 deletions

View File

@ -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='<player_name> [<reason>]',
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

View File

@ -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

View File

@ -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

View File

@ -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'))

View File

@ -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