diff --git a/szutil_idlekick/init.lua b/szutil_idlekick/init.lua index 082631b..0851679 100644 --- a/szutil_idlekick/init.lua +++ b/szutil_idlekick/init.lua @@ -17,6 +17,10 @@ minetest.register_privilege(modname, { give_to_admin = false }) +local function kickable(pname) + return (not minetest.check_player_privs(pname, modname)) == (not invert) +end + local function now() return minetest.get_us_time() / 1000000 end local times = {} @@ -26,17 +30,21 @@ minetest.register_chatcommand(modname, { description = "Check player idle time and last action", privs = {server = true}, func = function(_, param) - local time = times[param] - if not time then + if not minetest.get_player_by_name(param) then return true, string_format("Player %q not found", param) end - local active = (not minetest.check_player_privs(param, modname)) - == (not invert) + if not kickable(param) then + return true, string_format("Player %q exempt", param) + end + local time = times[param] + if not time then + return true, string_format("Player %q no data", param) + end return true, string_format( - "Player %q idle %0.2f/%s last action %q", + "Player %q idle %0.2f/%0.2f last action %q", param, now() - time, - active and string_format("%.2f", timeout) or "never", + timeout, actions[param] or "unknown") end }) @@ -85,11 +93,12 @@ local function checkplayer(player, pname) end minetest.register_globalstep(function() for _, player in pairs(minetest.get_connected_players()) do - if (not minetest.check_player_privs(player, modname)) ~= (not invert) then return end local pname = player:get_player_name() - checkplayer(player, pname) - if now() - times[pname] >= timeout then - minetest.kick_player(pname, reason) + if kickable(pname) then + checkplayer(player, pname) + if now() - times[pname] >= timeout then + minetest.kick_player(pname, reason) + end end end end)