mirror of
https://github.com/mt-mods/mail.git
synced 2025-04-30 08:21:44 -04:00
Add ability to use maillist in messages and receive messages from them
This commit is contained in:
parent
85a5e525be
commit
2443cc5dec
4 changed files with 87 additions and 16 deletions
Binary file not shown.
12
gui.lua
12
gui.lua
|
@ -645,10 +645,14 @@ function mail.handle_receivefields(player, formname, fields)
|
|||
local recipients = mail.parse_player_list(fields.to)
|
||||
local isNew = true
|
||||
for r_,recipient in ipairs(recipients) do
|
||||
for c_,contact in ipairs(contacts) do
|
||||
if contact.name == recipient then
|
||||
isNew = false
|
||||
break
|
||||
if mail.split(recipient, "@")[1] == "" then -- in case of maillist
|
||||
isNew = false
|
||||
else
|
||||
for c_,contact in ipairs(contacts) do
|
||||
if contact.name == recipient then
|
||||
isNew = false
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if isNew then
|
||||
|
|
77
storage.lua
77
storage.lua
|
@ -33,8 +33,7 @@ function mail.getPlayerMessages(playername)
|
|||
if msg.bcc then
|
||||
bcc = msg.bcc
|
||||
end
|
||||
|
||||
local receivers = mail.split((msg.to .. "," .. cc .. "," .. bcc),",") -- split players into table
|
||||
local receivers = mail.extractMaillists((msg.to .. "," .. (msg.cc or "") .. "," .. (msg.bcc or "")),",") -- extracted maillists from all receivers
|
||||
for _, receiver in ipairs(receivers) do
|
||||
receiver = string.gsub(receiver, " ", "") -- avoid blank spaces (ex : " singleplayer" instead of "singleplayer")
|
||||
if receiver == playername then -- check if player is a receiver
|
||||
|
@ -79,7 +78,7 @@ end
|
|||
|
||||
function mail.addMessage(message)
|
||||
local messages = mail.getMessages()
|
||||
if #messages > 0 then
|
||||
if messages[1] then
|
||||
local previousMsg = messages[1]
|
||||
message.id = previousMsg.id + 1
|
||||
else
|
||||
|
@ -89,7 +88,24 @@ function mail.addMessage(message)
|
|||
if mail.write_json_file(mail.maildir .. "/mail.messages.json", messages) then
|
||||
-- add default status (unread for receivers) of this message
|
||||
local isSenderAReceiver = false
|
||||
local receivers = mail.split((message.to .. "," .. (message.cc or "") .. "," .. (message.bcc or "")),",")
|
||||
|
||||
local receivers = mail.extractMaillists((message.to .. "," .. (message.cc or "") .. "," .. (message.bcc or "")),",") -- extracted maillists from all receivers
|
||||
|
||||
-- extract players from mailing lists
|
||||
for _, receiver in ipairs(globalReceivers) do
|
||||
local receiverInfo = mail.split(receiver, "@") -- @maillist
|
||||
if receiverInfo[1] == "" and receiverInfo[2] then -- in case of maillist
|
||||
local players_ml = mail.getPlayersInMaillist(mail.getMaillistIdFromName(receiverInfo[2]))
|
||||
if players_ml then
|
||||
for _, player in ipairs(players_ml) do
|
||||
table.insert(receivers, 1, player)
|
||||
end
|
||||
end
|
||||
else -- in case of player
|
||||
table.insert(receivers, 1, receiver)
|
||||
end
|
||||
end
|
||||
|
||||
for _, receiver in ipairs(receivers) do
|
||||
if minetest.player_exists(receiver) then -- avoid blank names
|
||||
mail.addStatus(receiver, message.id, "unread")
|
||||
|
@ -188,7 +204,7 @@ end
|
|||
|
||||
function mail.addMaillist(maillist, players_string)
|
||||
local maillists = mail.getMaillists()
|
||||
if #maillists > 0 then
|
||||
if maillists[1] then
|
||||
local previousMl = maillists[1]
|
||||
maillist.id = previousMl.id + 1
|
||||
else
|
||||
|
@ -211,9 +227,34 @@ function mail.addMaillist(maillist, players_string)
|
|||
end
|
||||
end
|
||||
|
||||
function mail.getMaillistIdFromName(ml_name)
|
||||
local maillists = mail.getMaillists()
|
||||
local ml_id = 0
|
||||
for _, maillist in ipairs(maillists) do
|
||||
if maillist.name == ml_name then
|
||||
ml_id = maillist.id
|
||||
break
|
||||
end
|
||||
end
|
||||
return ml_id
|
||||
end
|
||||
|
||||
function mail.getPlayersInMaillists()
|
||||
local messagesStatus = mail.read_json_file(mail.maildir .. "/mail.maillists_players.json")
|
||||
return messagesStatus
|
||||
local players_mls = mail.read_json_file(mail.maildir .. "/mail.maillists_players.json")
|
||||
return players_mls
|
||||
end
|
||||
|
||||
function mail.getPlayersInMaillist(ml_id)
|
||||
local players_mls = mail.getPlayersInMaillists() -- players from all maillists
|
||||
local player_ml = {} -- players from this maillist
|
||||
if players_mls[1] then
|
||||
for _, playerInfo in ipairs(players_mls) do
|
||||
if playerInfo.id == ml_id then
|
||||
table.insert(player_ml, 1, playerInfo.player)
|
||||
end
|
||||
end
|
||||
end
|
||||
return player_ml
|
||||
end
|
||||
|
||||
function mail.addPlayerToMaillist(player, ml_id, status)
|
||||
|
@ -258,6 +299,28 @@ function mail.deleteMaillist(ml_id)
|
|||
end
|
||||
end
|
||||
|
||||
function mail.extractMaillists(receivers)
|
||||
local globalReceivers = mail.split(receivers,",") -- receivers including maillists
|
||||
local receivers = {} -- extracted receivers
|
||||
|
||||
-- extract players from mailing lists
|
||||
for _, receiver in ipairs(globalReceivers) do
|
||||
local receiverInfo = mail.split(receiver, "@") -- @maillist
|
||||
if receiverInfo[1] == "" and receiverInfo[2] then -- in case of maillist
|
||||
local players_ml = mail.getPlayersInMaillist(mail.getMaillistIdFromName(receiverInfo[2]))
|
||||
if players_ml then
|
||||
for _, player in ipairs(players_ml) do
|
||||
table.insert(receivers, 1, player)
|
||||
end
|
||||
end
|
||||
else -- in case of player
|
||||
table.insert(receivers, 1, receiver)
|
||||
end
|
||||
end
|
||||
|
||||
return receivers
|
||||
end
|
||||
|
||||
function mail.pairsByKeys(t, f)
|
||||
-- http://www.lua.org/pil/19.3.html
|
||||
local a = {}
|
||||
|
|
|
@ -6,11 +6,15 @@ and add individual player names to recipient list
|
|||
--]]
|
||||
function mail.normalize_players_and_add_recipients(field, recipients, undeliverable)
|
||||
local order = mail.parse_player_list(field)
|
||||
for _, player_name in ipairs(order) do
|
||||
if not minetest.player_exists(player_name) then
|
||||
undeliverable[player_name] = true
|
||||
else
|
||||
recipients[player_name] = true
|
||||
for _, recipient_name in ipairs(order) do
|
||||
if mail.split(recipient_name, "@")[1] == "" then -- in case of maillist
|
||||
recipients[recipient_name] = true
|
||||
else -- in case of playerˇ
|
||||
if not minetest.player_exists(recipient_name) then
|
||||
undeliverable[recipient_name] = true
|
||||
else
|
||||
recipients[recipient_name] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
return mail.concat_player_list(order)
|
||||
|
|
Loading…
Add table
Reference in a new issue