123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- -- Advanced Ban [advancedban] by srifqi
- advancedban = {}
- -- parameter
- local FILE_NAME = "bannedplayerlist.txt"
- local BAN_MESSAGE = "Your username is banned."
- function advancedban.is_banned(name)
- if not file_exists(minetest.get_worldpath() .. DIR_DELIM .. FILE_NAME) then
- return false
- end
- local list = io.open(minetest.get_worldpath() .. DIR_DELIM .. FILE_NAME, "r")
- for username in list:lines() do
- if name == username then
- list:close()
- return true
- end
- end
- list:close()
- return false
- end
- function advancedban.ban(name)
- if advancedban.is_banned(name) then
- -- minetest.log("info", name .. " is already in advancedban list.") -- print debug
- return false
- else
- local list = io.open(minetest.get_worldpath() .. DIR_DELIM .. FILE_NAME, "a")
- list:write(name .. "\n")
- list:close()
- minetest.log("action", name .. " has been added to advancedban list.") -- print debug
- return true
- end
- end
- function advancedban.unban(name)
- local found = false
- if file_exists(minetest.get_worldpath() .. DIR_DELIM .. FILE_NAME) then
- local list = io.open(minetest.get_worldpath() .. DIR_DELIM .. FILE_NAME, "r")
- local text = ""
- for username in list:lines() do
- if name == username then
- found = true
- else
- text = text .. username .. "\n"
- end
- end
- list:close()
- local list = io.open(minetest.get_worldpath() .. DIR_DELIM .. FILE_NAME, "w")
- list:write(text)
- list:close()
- end
- if found then
- minetest.log("action", name .. " has been removed from advancedban list.") -- print debug
- end
- return found
- end
- minetest.register_chatcommand("abancheck", {
- params = "<player name>",
- description = "Check ban for a player with given name",
- privs = {},
- func = function(name, param)
- if advancedban.is_banned(param) then
- minetest.chat_send_player(name, param .. " is in advancedban list.")
- else
- minetest.chat_send_player(name, param .. " is not in advancedban list.")
- end
- end
- })
- minetest.register_chatcommand("aban", {
- params = "<player name>",
- description = "Ban a player with given name",
- privs = {ban = true},
- func = function(name, param)
- if advancedban.ban(param) then
- minetest.chat_send_player(name, param .. " has been added to advancedban list.")
- else
- minetest.chat_send_player(name, param .. " is already in advancedban list.")
- end
- end
- })
- minetest.register_chatcommand("abankick", {
- params = "<player name>",
- description = "Ban and kick a player with given name",
- privs = {ban = true, kick = true},
- func = function(name, param)
- local kick = ", but failed to kick the player."
- if minetest.kick_player(param) then
- kick = " and has been kicked."
- end
- if advancedban.ban(param) then
- minetest.chat_send_player(name, param .. " has been added to advancedban list" .. kick)
- else
- minetest.chat_send_player(name, param .. " is already in advancedban list" .. kick)
- end
- end
- })
- minetest.register_chatcommand("aban+", {
- params = "<player name>",
- description = "Ban a player and its IP with given name",
- privs = {ban = true},
- func = function(name, param)
- local IP = ", but failed to ban IP of the player."
- if minetest.ban_player(param) then
- IP = " and IP of the player is banned."
- end
- if advancedban.ban(param) then
- minetest.chat_send_player(name, param .. " has been added to advancedban list" .. IP)
- else
- minetest.chat_send_player(name, param .. " is already in advancedban list" .. IP)
- end
- end
- })
- minetest.register_chatcommand("unaban", {
- params = "<player name>",
- description = "Remove player ban with given name",
- privs = {ban = true},
- func = function(name, param)
- if advancedban.unban(param) then
- minetest.chat_send_player(name, param .. " has been removed from advancedban list.")
- else
- minetest.chat_send_player(name, param .. " is not found in advancedban list.")
- end
- end
- })
- minetest.register_chatcommand("unaban+", {
- params = "<player name>",
- description = "Remove player ban and its IP with given name",
- privs = {ban = true},
- func = function(name, param)
- local IP = ", but failed to unban IP of the player"
- if minetest.unban_player_or_ip(param) then
- IP = " and IP of the player is unbanned."
- end
- if advancedban.unban(param) then
- minetest.chat_send_player(name, param .. " has been removed from advancedban list" .. IP)
- else
- minetest.chat_send_player(name, param .. " is not found in advancedban list" .. IP)
- end
- end
- })
- -- prevent advancedbanned player to join
- minetest.register_on_prejoinplayer(function(name)
- if advancedban.is_banned(name) then
- return BAN_MESSAGE
- end
- end)
- -- Minetest library - misc_helpers.lua
- function file_exists(filename)local f=io.open(filename,"r");if f==nil then return false else f:close() return true end end
|