featured antispawn by appgurueu

master
mckayshirou 2023-07-17 21:22:13 -04:00
parent fe39979ad2
commit e50a08e5d3
2 changed files with 69 additions and 0 deletions

65
antispawn.lua Normal file
View File

@ -0,0 +1,65 @@
local PLAYERS_MSG = {}
local PLAYERS_FREQ = {}
local SPAM_SPEED = 5
local SPAM_SPEED_MSECS = SPAM_SPEED * 1e6
local SPAM_WARN = 5
-- In seconds
local SPAM_KICK = SPAM_WARN + 5
local RESET_TIME = 30
-- Convert to microsecs
local RESET_TIME_MSECS = RESET_TIME * 1e6
local WARNING_COLOR = minetest.get_color_escape_sequence"#FFBB33"
minetest.register_on_leaveplayer(function(player)
PLAYERS_MSG[player:get_player_name()] = nil
PLAYERS_FREQ[player:get_player_name()] = nil
end)
minetest.register_on_joinplayer(function(player)
PLAYERS_MSG[player:get_player_name()] = {}
end)
minetest.register_on_chat_message(function(name, message)
for msg, info in pairs(PLAYERS_MSG[name]) do
if minetest.get_us_time() - info[2] >= RESET_TIME_MSECS then PLAYERS_MSG[name][msg] = nil end
end
if PLAYERS_MSG[name][message] then
local amount = PLAYERS_MSG[name][message][1] + 1
PLAYERS_MSG[name][message][1] = amount
PLAYERS_MSG[name][message][2] = minetest.get_us_time()
if amount >= SPAM_KICK then minetest.kick_player(name, "Kicked for spamming.")
elseif amount >= SPAM_WARN then
minetest.chat_send_player(name, WARNING_COLOR .. "Warning! You've sent the message '" .. message .. "' too often. Wait at least " .. RESET_TIME .. " seconds before sending it again.")
end
else PLAYERS_MSG[name][message] = { 1, minetest.get_us_time() } end
if not PLAYERS_FREQ[name] then
PLAYERS_FREQ[name] = {
0,
0,
minetest.get_us_time(),
0
}
return
end
local warns = PLAYERS_FREQ[name][4]
local amount = PLAYERS_FREQ[name][2]
local speed = PLAYERS_FREQ[name][1]
local delay = minetest.get_us_time() - PLAYERS_FREQ[name][3]
speed = (speed * amount + delay) / (amount + 1)
if amount >= SPAM_WARN then
if warns + 1 == SPAM_KICK - SPAM_WARN then minetest.kick_player(name, "Kicked for spamming.")
elseif speed <= SPAM_SPEED_MSECS then
minetest.chat_send_player(name, WARNING_COLOR .. "Warning! You are sending messages too fast. Wait at least " .. SPAM_SPEED .. " seconds before sending another message.")
warns = warns + 1
speed = SPAM_SPEED_MSECS
amount = SPAM_WARN
else
speed = 0
amount = 0
warns = 0
end
end
PLAYERS_FREQ[name] = {
speed,
amount + 1,
minetest.get_us_time(),
warns
}
end)

View File

@ -24,6 +24,7 @@ local moddefault = minetest.get_modpath("default") -- path of default mod if ava
local modkillme = minetest.get_modpath("killme") -- if killme is present as mod if available, otherwise we use own
local modcommand = minetest.get_modpath("game_commands") -- updated killme is present as mod if available, otherwise we use own
local modcreative = minetest.get_modpath("creative") -- if creative is available, otherwise false/nil
local modantispawn = minetest.get_modpath("antispam") -- if rnd1 anticheat mod is loaded, cos only wolrs with mt4
local modanticheat = minetest.get_modpath("anticheat") -- if rnd1 anticheat mod is loaded, cos only wolrs with mt4
local modbeowulf = minetest.get_modpath("beowulf") -- if rnd1 anticheat mod is loaded, cos only wolrs with mt4
local checkapikey = minetest.settings:get("governing.checkapikey") or "" -- need for geoip improved ip information, then geoip normal will be used
@ -92,6 +93,7 @@ governing.modmail = modmail -- path of the mail mod if available for sending mes
governing.moddefault = moddefault -- path of default mod if available, otherwise false/nil
governing.modkillme = modkillme -- if killme is present as mod if available, otherwise we use own
governing.modcommand = modcommand -- if same killme and commands is present as mod if available, otherwise we use own
governing.modantispawn = modantispawn -- autodetect if older mod antispan by appguru are present
governing.modanticheat = modanticheat -- if rnd1 anticheat mod is present cos only works with mt4
governing.modbeowulf = modbeowulf -- if beowulf anticheat mod is present cos only works with mt5
governing.checkapikey = checkapikey -- need for geoip improved ip information, then geoip normal will be used
@ -179,6 +181,8 @@ dofile(governing.modpath.."/geoip.lua") -- format the geoip responses managed b
dofile(governing.modpath.."/anticheats.lua") -- load anticheat mod that combined rnd + beowulf + fairplay
dofile(governing.modpath.."/antispawn.lua") -- load antispawn chat features only if mod antispan is not loaded
dofile(governing.modpath.."/commands.lua") -- must be at end. so relies on others functionalities
--[[ end of include code files mod features ]]