future_ban_list = {} local file = io.open(minetest.get_worldpath().."/future_banlist.txt", "r") if file then future_ban_list = minetest.deserialize(file:read("*all")) file:close() if not future_ban_list then future_ban_list = {} end end local function save_file() local file = io.open(minetest.get_worldpath().."/future_banlist.txt", "w") if file then file:write(minetest.serialize(future_ban_list)) file:close() end end minetest.register_chatcommand("future_ban", { params = " | leave playername out to see the future ban list", description = "The player will be banned when trying to join", privs = {ban=true}, func = function(name, param) if param == "" then minetest.chat_send_player(name, "Future ban list: " .. dump(future_ban_list)) return end for _,n in ipairs(future_ban_list) do if n == param then minetest.chat_send_player(name, param .. " is already in future ban list.") return end end if not minetest.get_player_by_name(param) then table.insert(future_ban_list, param) minetest.chat_send_player(name, param .. " to future ban list added.") minetest.log("action", name .. " added " .. param .. " to future ban list.") save_file() return end if not minetest.ban_player(param) then table.insert(future_ban_list, param) minetest.chat_send_player(name, param .. " to future ban list added.") minetest.log("action", name .. " added " .. param .. " to future ban list.") save_file() else local desc = minetest.get_ban_description(param) minetest.chat_send_player(name, "Banned " .. desc .. ".") minetest.log("action", name .. " bans " .. desc .. ".") end end }) minetest.register_on_joinplayer(function(player) local name = player:get_player_name() for i,n in ipairs(future_ban_list) do if n == name then if not minetest.ban_player(name) then minetest.chat_send_player(name, "Failed to ban player " .. name .. " (from future ban list).") else local desc = minetest.get_ban_description(name) minetest.log("action", desc .. " banned (from future ban list).") table.remove(future_ban_list, i) save_file() end end end end)