Added ignore private messages and optional requirement on shout privilege
parent
8ae77cf703
commit
13c9caaa88
60
init.lua
60
init.lua
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue