Added ignore private messages and optional requirement on shout privilege

master
Michele Viotto 2021-03-08 14:42:25 +01:00
parent 8ae77cf703
commit 13c9caaa88
2 changed files with 64 additions and 0 deletions

View File

@ -1,6 +1,7 @@
betterpm = {}
local modpath = minetest.get_modpath("betterpm")
local storage = minetest.get_mod_storage()
local reply_to = {}
dofile(modpath .. "/settings.lua")
@ -16,6 +17,20 @@ end
local function sendMessage(sender, target, message)
reply_to[sender] = target
reply_to[target] = sender
if not minetest.check_player_privs(sender, { shout=true }) and betterpm.requires_shout then
minetest.chat_send_player(sender,
minetest.colorize("#ff0000", "You don't have the privilege to send private messages"))
return
end
local ignored = minetest.deserialize(storage:get_string(target)) or {}
if ignored[sender] or ignored[":all"] then
minetest.chat_send_player(sender,
minetest.colorize("#ff0000", "You can't send messages to " .. target))
return
end
if minetest.get_player_by_name(target) then
minetest.chat_send_player(target,
minetest.colorize(betterpm.targetPrefixColor, formatPrefix(betterpm.targetPrefix, sender, target) ..
@ -48,7 +63,21 @@ end, {
ChatCmdBuilder.new("r", function(cmd)
cmd:sub(":message:text", function (sender, message)
if not minetest.check_player_privs(sender, { shout=true }) and betterpm.requires_shout then
minetest.chat_send_player(sender,
minetest.colorize("#ff0000", "You don't have the privilege to send private messages"))
return
end
if reply_to[sender] ~= nil then
local ignored = minetest.deserialize(storage:get_string(reply_to[sender])) or {}
if ignored[sender] or ignored[":all"] then
minetest.chat_send_player(sender,
minetest.colorize("#ff0000", "You can't send messages to " .. reply_to[sender]))
return
end
reply_to[reply_to[sender]] = sender
minetest.chat_send_player(reply_to[sender],
minetest.colorize(betterpm.targetPrefixColor, formatPrefix(betterpm.targetPrefix, sender, reply_to[sender]) ..
@ -65,4 +94,35 @@ end, {
params = "<message>",
})
-- ignore private messages
ChatCmdBuilder.new("pmignore", function(cmd)
-- ignore everyone
cmd:sub("", function (sender)
local ignored = minetest.deserialize(storage:get_string(sender)) or {}
if ignored[":all"] then
ignored[":all"] = false
minetest.chat_send_player("You are no longer ignoring private messages")
else
ignored[":all"] = true
minetest.chat_send_player("You are now ignoring private messages")
end
storage:set_string(sender, minetest.serialize(ignored))
end)
cmd:sub(":name", function (sender, name)
local ignored = minetest.deserialize(storage:get_string(sender)) or {}
if ignored[name] then
ignored[name] = false
minetest.chat_send_player("You are no longer ignoring private messages from " .. name)
else
ignored[name] = true
minetest.chat_send_player("You are now ignoring private messages from " .. name)
end
storage:set_string(sender, minetest.serialize(ignored))
end)
end, {
description = "Ignore private messages from specific players or from everyone (/pmignore)",
params = "<name>",
})
minetest.log("action", "[BETTERPM] Mod initialised")

View File

@ -18,3 +18,7 @@ betterpm.targetMsgColor = targetColor
-- {target} is who receives the message, {sender} is who sends the message
betterpm.senderPrefix = "[You -> {target}] " -- the sender will see this
betterpm.targetPrefix = "[{sender} -> You] " -- the target will receive this
-- if players need to have shout privilege to send private messages
betterpm.requires_shout = true