whitelist/init.lua

94 lines
2.2 KiB
Lua

--[[
-- Whitelist mod by ShadowNinja
-- Uses dedecated priv and toggle thanks to CWz
-- License: WTFPL
--]]
minetest.register_privilege("whitelist", {
description = "may add new names to whitelist.",
give_to_singleplayer= false,
})
local worldpath = minetest.get_worldpath()
local whitelist = {}
local admin = minetest.setting_get("name")
local function load_whitelist()
local file, err = io.open(worldpath.."/whitelist.txt", "r")
if err then
return
end
for line in file:lines() do
table.insert(whitelist, line)
end
file:close()
end
local function save_whitelist()
local file, err = io.open(worldpath.."/whitelist.txt", "w")
if err then
return
end
for _, item in pairs(whitelist) do
file:write(item.."\n")
end
file:close()
end
load_whitelist()
minetest.register_on_prejoinplayer(function(name, ip)
if name == admin or name == "singleplayer" or minetest.setting_getbool("lockdown") == false then
return
end
for _, whitename in pairs(whitelist) do
if name == whitename then
return
end
end
return "This server is whitelisted and you are not on the whitelist."
end)
minetest.register_chatcommand("whitelist", {
params = "{add|remove} <nick>",
help = "Manipulate the whitelist",
privs = {whitelist=true},
func = function(name, param)
local action, whitename = param:match("^([^ ]+) ([^ ]+)$")
if action == "add" then
local alreadyin = false
for i, listname in pairs(whitelist) do
if listname == whitename then
alreadyin = true
end
end
if not alreadyin then
table.insert(whitelist, whitename)
save_whitelist()
minetest.chat_send_player(name, "Added "
..whitename.." to the whitelist.")
else
minetest.chat_send_player(name, whitename
.." is already on the whitelist.")
end
elseif action == "remove" then
local removed = false
for i, listname in pairs(whitelist) do
if listname == whitename then
table.remove(whitelist, i)
removed = true
end
end
if removed then
save_whitelist()
minetest.chat_send_player(name, "Removed "
..whitename.." from the whitelist.")
else
minetest.chat_send_player(name, whitename
.." is not on the whitelist.")
end
else
minetest.chat_send_player(name, "Invalid action.")
end
end,
})