From fc5824d0b8a91170faf0dc1c74d8c72b608773ea Mon Sep 17 00:00:00 2001 From: BrunoMine Date: Thu, 19 Jul 2018 21:00:03 -0300 Subject: [PATCH] Recurso AntiFlood --- init.lua | 1 + recursos/antiflood.lua | 50 ++++++++++++++++++++++++++++++++++++++++++ recursos/conf.lua | 13 +++++++++++ 3 files changed, 64 insertions(+) create mode 100644 recursos/antiflood.lua diff --git a/init.lua b/init.lua index 5a2672c..3b90409 100644 --- a/init.lua +++ b/init.lua @@ -37,5 +37,6 @@ dofile(modpath.."/recursos/moderadores.lua") dofile(modpath.."/recursos/regras.lua") dofile(modpath.."/recursos/penalidades.lua") dofile(modpath.."/recursos/censura.lua") +dofile(modpath.."/recursos/antiflood.lua") dofile(modpath.."/recursos/alerta_de_crash.lua") notificar("OK") diff --git a/recursos/antiflood.lua b/recursos/antiflood.lua new file mode 100644 index 0000000..6151da6 --- /dev/null +++ b/recursos/antiflood.lua @@ -0,0 +1,50 @@ +--[[ + 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 . + + Recurso para sistema Anti Flood para o chat + ]] + +-- Variavel de controle +local antiflood = minetest.settings:get_bool("gestor_sistema_antflood", false) or false + +-- Controle de acessos +local acessos = {} +minetest.register_on_joinplayer(function(player) + acessos[player:get_player_name()] = 0 +end) +minetest.register_on_leaveplayer(function(player) + acessos[player:get_player_name()] = nil +end) + +-- reduzir limitador de falas +local red_fala = function(name) + if acessos[name] == nil then return end + -- Verifica se ja está zerado + if acessos[name] == 0 then return end + + -- Reduz 1 + acessos[name] = acessos[name] - 1 +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 antiflood == false then return end + + if acessos[name] == nil then return end + + if acessos[name] >= 3 then + minetest.chat_send_player(name, "Proibido floddar o chat com muitas mensagens") + return true + else + acessos[name] = acessos[name] + 1 + minetest.after(7.5, red_fala, name) + end +end) + + diff --git a/recursos/conf.lua b/recursos/conf.lua index 126e7d2..f387adf 100644 --- a/recursos/conf.lua +++ b/recursos/conf.lua @@ -280,6 +280,19 @@ local lista_configs = { minetest.settings:set("basic_privs", value) end, }, + -- AntiFlood + { + name = "AntiFlood", + format = "bool", + desc = "Sistema que evita que jogadores enviem mensagens em demasia no bate-papo", + checkbox_name = "AntiFlood", + get_value = function() + return minetest.settings:get("gestor_sistema_antflood") or "false" + end, + set_value = function(value) + minetest.settings:set("gestor_sistema_antflood", value) + end, + }, -- AntiCheat { name = "AntiCheat",