Compare commits
5 Commits
a240c39a64
...
b3d58cd83d
Author | SHA1 | Date |
---|---|---|
Anand S | b3d58cd83d | |
Auke Kok | 9de8a2e6f7 | |
Anand S | a820ae6503 | |
rubenwardy | 99100857af | |
rubenwardy | 9422add415 |
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
rules?
|
||||
email?
|
||||
|
|
45
init.lua
45
init.lua
|
@ -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)
|
||||
|
|
2
mod.conf
2
mod.conf
|
@ -1 +1,3 @@
|
|||
name = filter
|
||||
description = A chat filter for servers.
|
||||
optional_depends = rules,email
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
Loading…
Reference in New Issue