Sistema de censura de termos proibidos

master
BrunoMine 2018-07-19 17:28:44 -03:00
parent f142aa1b70
commit 0a4942b5f2
5 changed files with 124 additions and 14 deletions

View File

@ -9,16 +9,5 @@ COMANDOS
/gestor | Abre o painel do gestor administrativo
/serializar <arquivo/nome> <largura> <altura> | Salva uma estrutura no diretorio de estruturas
(toma a posicao do jogador como a menos em x, y e z)
/deserializar <arquivo/nome> <largura> <altura> | Cria uma estrutura do diretorio de estruturas
(toma a posicao do jogador como a menos em x, y e z)
ESTRUTURAS
Estruturas ficam salvas na pasta `diretório_do_mundo/gestor/estruturas` e são compostas por dois arquivos `.mts` e `.meta`
ALERTA DE CRASH
Configurar funcionamento a partir do painel em jogo
DADOS
O banco de termos proibidos fica armazenada no diretorio do mundo e subdiretorio ´gestor/censura/bad_words_list´ portanto sendo possivel repassar a lista de termos para outro servidor substituindo esse arquivo.

View File

@ -35,5 +35,6 @@ dofile(modpath.."/recursos/desligar.lua")
dofile(modpath.."/recursos/conf.lua")
dofile(modpath.."/recursos/moderadores.lua")
dofile(modpath.."/recursos/penalidades.lua")
dofile(modpath.."/recursos/censura.lua")
dofile(modpath.."/recursos/alerta_de_crash.lua")
notificar("OK")

117
recursos/censura.lua Normal file
View File

@ -0,0 +1,117 @@
--[[
Mod Gestor para Minetest
Gestor v2.0 Copyright (C) 2018 BrunoMine (https://github.com/BrunoMine)
Recebeste uma cópia da GNU Lesser General
Public License junto com esse software,
se não, veja em <http://www.gnu.org/licenses/>.
Recurso para censurar palavras no chat publico
]]
-- Lista de termos proibidos
if gestor.bd.verif("censura", "bad_words_list") == false then
gestor.bd.salvar("censura", "bad_words_list", {})
end
-- Variavel de controle
local censurar = minetest.settings:get_bool("gestor_censurar_termos_proibidos", false) or false
-- Tabelas de uso
local bad_words = {}
local update_tb_bad_words = function()
bad_words = gestor.bd.pegar("censura", "bad_words_list")
end
update_tb_bad_words()
-- Controle de acessos
local acessos = {}
minetest.register_on_joinplayer(function(player)
acessos[player:get_player_name()] = {}
end)
minetest.register_on_leaveplayer(function(player)
acessos[player:get_player_name()] = nil
end)
-- Registrar aba 'desligar'
gestor.registrar_aba("censura", {
titulo = "Termos Proibidos",
get_formspec = function(name)
-- Gera string dos moderadores listados
local bad_words_string = ""
for _,bad_word in pairs(gestor.bd.pegar("censura", "bad_words_list")) do
if bad_words_string ~= "" then bad_words_string = bad_words_string .. "," end
bad_words_string = bad_words_string .. bad_word
end
local formspec = "label[3.5,1;Termos Proibidos]"
.."label[9,1;Lista de Termos Proibidos]"
.."textlist[9,1.5;4.5,3;bad_words_list;"..bad_words_string.."]"
.."field[3.8,2.3;5,1;new_word;Termo;]"
.."button[3.5,2.9;5,1;add_word;Adicionar Termo]"
.."button[3.5,3.8;5,1;rem_word;Remover Termo]"
.."checkbox[3.5,4.6;bad_words_status;Censurar Termos Proibidos;"..tostring(minetest.settings:get("gestor_censurar_termos_proibidos", false)).."]"
return formspec
end,
on_receive_fields = function(player, fields)
local name = player:get_player_name()
-- Selecionar item
if fields.bad_words_list and table.maxn(gestor.bd.pegar("censura", "bad_words_list")) > 0 then
local n = string.split(fields.bad_words_list, ":")
acessos[name].escolha = tonumber(n[2]) or 1
gestor.menu_principal(name)
-- Adicionar moderador
elseif fields.add_word and string.lower(fields.new_word) ~= "" then
local bad_words_list = gestor.bd.pegar("censura", "bad_words_list")
table.insert(bad_words_list, string.lower(fields.new_word))
gestor.bd.salvar("censura", "bad_words_list", bad_words_list)
update_tb_bad_words()
gestor.menu_principal(name)
-- Remover moderador
elseif fields.rem_word and acessos[name].escolha then
local bad_words_list = gestor.bd.pegar("censura", "bad_words_list")
table.remove(bad_words_list, acessos[name].escolha)
gestor.bd.salvar("censura", "bad_words_list", bad_words_list)
update_tb_bad_words()
gestor.menu_principal(name)
-- Interditar
elseif fields.bad_words_status then
minetest.settings:set("gestor_censurar_termos_proibidos", fields.bad_words_status)
minetest.settings:write()
censurar = minetest.settings:get_bool("gestor_censurar_termos_proibidos", false)
-- Sair
elseif fields.exit then
acessos[name].escolha = nil
end
end,
})
-- Impedir jogadores silenciados de falaram no chat e restaura o priv de fala se estiver acabado o periodo de penalidade
minetest.register_on_chat_message(function(name, message)
if censurar == false then return end
-- Deixa todas as palavras no minusculo
local m = string.lower(message)
-- Tenta encontrar cada um dos termos os termos
for _,w in ipairs(bad_words) do
-- Varre a mensagem em busca do termo
if string.match(m, w) then
-- Caso encontrar, notifica o jogador
minetest.chat_send_player(name, "Proibido usar o termo "..minetest.colorize("#FF0000", m))
return true
end
end
end)

View File

@ -77,6 +77,7 @@ gestor.registrar_aba("moderadores", {
-- Interditar
elseif fields.interditar then
minetest.settings:set("gestor_interditado", fields.interditar)
minetest.settings:write()
gestor.interditar_servidor()
-- Redefir mensagem de interdição
@ -91,7 +92,7 @@ gestor.registrar_aba("moderadores", {
-- Interditar_servidor
gestor.interditado = minetest.settings:get_bool("gestor_interditado", false)
gestor.interditado = minetest.settings:get_bool("gestor_interditado", false) or false
gestor.interditar_servidor = function()
-- Altera variavel global de controle
gestor.interditado = true

View File

@ -67,6 +67,8 @@ for _,name in ipairs(tempos_penas) do
tempos_penas_list_string = tempos_penas_list_string .. name
end
-- Termos proibidos
-- Registrar aba 'diretrizes'
gestor.registrar_aba("penalidades", {