Compare commits

...

5 Commits

Author SHA1 Message Date
Anand S b3d58cd83d Add desc. and depends to mod.conf 2018-06-29 23:23:52 -07:00
Auke Kok 9de8a2e6f7 Add screenshot. 2018-05-28 17:49:30 -07:00
Anand S a820ae6503 Priv-check before unmuting 2018-04-25 20:04:39 -07:00
rubenwardy 99100857af Fix conflict with chat commands 2018-02-05 23:03:19 -08:00
rubenwardy 9422add415 Add support for the email mod 2018-02-05 23:03:19 -08:00
5 changed files with 52 additions and 3 deletions

View File

@ -3,7 +3,7 @@ allow_defined_top = true
read_globals = {
"DIR_DELIM",
"minetest", "core",
"core",
"dump",
"vector", "nodeupdate",
"VoxelManip", "VoxelArea",
@ -11,5 +11,10 @@ read_globals = {
"intllib",
"default",
"rules",
"email",
table = { fields = { "copy", "getn" } }
}
globals = {
"minetest"
}

View File

@ -1 +1,2 @@
rules?
email?

View File

@ -83,10 +83,14 @@ function filter.mute(name, duration)
muted[name] = true
minetest.after(duration * 60, function()
privs = minetest.get_player_privs(name)
if privs.shout == true then
return
end
muted[name] = nil
minetest.chat_send_player(name, "Chat privilege reinstated. Please do not abuse chat.")
local privs = minetest.get_player_privs(name)
privs.shout = true
minetest.set_player_privs(name, privs)
end)
@ -135,10 +139,20 @@ function filter.on_violation(name, message)
end
end
minetest.log("action", "VIOLATION (" .. resolution .. "): <" .. name .. "> ".. message)
local logmsg = "VIOLATION (" .. resolution .. "): <" .. name .. "> ".. message
minetest.log("action", logmsg)
local email_to = minetest.settings:get("filter.email_to")
if email_to and minetest.global_exists("email") then
email.send_mail(name, email_to, logmsg)
end
end
table.insert(minetest.registered_on_chat_messages, 1, function(name, message)
if message:sub(1, 1) == "/" then
return
end
local privs = minetest.get_player_privs(name)
if not privs.shout and muted[name] then
minetest.chat_send_player(name, "You are temporarily muted.")
@ -151,6 +165,33 @@ table.insert(minetest.registered_on_chat_messages, 1, function(name, message)
end
end)
local function make_checker(old_func)
return function(name, param)
if not filter.check_message(name, param) then
filter.on_violation(name, param)
return false
end
return old_func(name, param)
end
end
for name, def in pairs(minetest.registered_chatcommands) do
if def.privs and def.privs.shout then
def.func = make_checker(def.func)
end
end
local old_register_chatcommand = minetest.register_chatcommand
function minetest.register_chatcommand(name, def)
if def.privs and def.privs.shout then
def.func = make_checker(def.func)
end
return old_register_chatcommand(name, def)
end
local function step()
for name, v in pairs(violations) do
violations[name] = math.floor(v * 0.5)

View File

@ -1 +1,3 @@
name = filter
description = A chat filter for servers.
optional_depends = rules,email

BIN
screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB