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 recipients = mail.parse_player_list(fields.to)
|
||||||
local isNew = true
|
local isNew = true
|
||||||
for r_,recipient in ipairs(recipients) do
|
for r_,recipient in ipairs(recipients) do
|
||||||
for c_,contact in ipairs(contacts) do
|
if mail.split(recipient, "@")[1] == "" then -- in case of maillist
|
||||||
if contact.name == recipient then
|
isNew = false
|
||||||
isNew = false
|
else
|
||||||
break
|
for c_,contact in ipairs(contacts) do
|
||||||
|
if contact.name == recipient then
|
||||||
|
isNew = false
|
||||||
|
break
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if isNew then
|
if isNew then
|
||||||
|
|
77
storage.lua
77
storage.lua
|
@ -33,8 +33,7 @@ function mail.getPlayerMessages(playername)
|
||||||
if msg.bcc then
|
if msg.bcc then
|
||||||
bcc = msg.bcc
|
bcc = msg.bcc
|
||||||
end
|
end
|
||||||
|
local receivers = mail.extractMaillists((msg.to .. "," .. (msg.cc or "") .. "," .. (msg.bcc or "")),",") -- extracted maillists from all receivers
|
||||||
local receivers = mail.split((msg.to .. "," .. cc .. "," .. bcc),",") -- split players into table
|
|
||||||
for _, receiver in ipairs(receivers) do
|
for _, receiver in ipairs(receivers) do
|
||||||
receiver = string.gsub(receiver, " ", "") -- avoid blank spaces (ex : " singleplayer" instead of "singleplayer")
|
receiver = string.gsub(receiver, " ", "") -- avoid blank spaces (ex : " singleplayer" instead of "singleplayer")
|
||||||
if receiver == playername then -- check if player is a receiver
|
if receiver == playername then -- check if player is a receiver
|
||||||
|
@ -79,7 +78,7 @@ end
|
||||||
|
|
||||||
function mail.addMessage(message)
|
function mail.addMessage(message)
|
||||||
local messages = mail.getMessages()
|
local messages = mail.getMessages()
|
||||||
if #messages > 0 then
|
if messages[1] then
|
||||||
local previousMsg = messages[1]
|
local previousMsg = messages[1]
|
||||||
message.id = previousMsg.id + 1
|
message.id = previousMsg.id + 1
|
||||||
else
|
else
|
||||||
|
@ -89,7 +88,24 @@ function mail.addMessage(message)
|
||||||
if mail.write_json_file(mail.maildir .. "/mail.messages.json", messages) then
|
if mail.write_json_file(mail.maildir .. "/mail.messages.json", messages) then
|
||||||
-- add default status (unread for receivers) of this message
|
-- add default status (unread for receivers) of this message
|
||||||
local isSenderAReceiver = false
|
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
|
for _, receiver in ipairs(receivers) do
|
||||||
if minetest.player_exists(receiver) then -- avoid blank names
|
if minetest.player_exists(receiver) then -- avoid blank names
|
||||||
mail.addStatus(receiver, message.id, "unread")
|
mail.addStatus(receiver, message.id, "unread")
|
||||||
|
@ -188,7 +204,7 @@ end
|
||||||
|
|
||||||
function mail.addMaillist(maillist, players_string)
|
function mail.addMaillist(maillist, players_string)
|
||||||
local maillists = mail.getMaillists()
|
local maillists = mail.getMaillists()
|
||||||
if #maillists > 0 then
|
if maillists[1] then
|
||||||
local previousMl = maillists[1]
|
local previousMl = maillists[1]
|
||||||
maillist.id = previousMl.id + 1
|
maillist.id = previousMl.id + 1
|
||||||
else
|
else
|
||||||
|
@ -211,9 +227,34 @@ function mail.addMaillist(maillist, players_string)
|
||||||
end
|
end
|
||||||
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()
|
function mail.getPlayersInMaillists()
|
||||||
local messagesStatus = mail.read_json_file(mail.maildir .. "/mail.maillists_players.json")
|
local players_mls = mail.read_json_file(mail.maildir .. "/mail.maillists_players.json")
|
||||||
return messagesStatus
|
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
|
end
|
||||||
|
|
||||||
function mail.addPlayerToMaillist(player, ml_id, status)
|
function mail.addPlayerToMaillist(player, ml_id, status)
|
||||||
|
@ -258,6 +299,28 @@ function mail.deleteMaillist(ml_id)
|
||||||
end
|
end
|
||||||
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)
|
function mail.pairsByKeys(t, f)
|
||||||
-- http://www.lua.org/pil/19.3.html
|
-- http://www.lua.org/pil/19.3.html
|
||||||
local a = {}
|
local a = {}
|
||||||
|
|
|
@ -6,11 +6,15 @@ and add individual player names to recipient list
|
||||||
--]]
|
--]]
|
||||||
function mail.normalize_players_and_add_recipients(field, recipients, undeliverable)
|
function mail.normalize_players_and_add_recipients(field, recipients, undeliverable)
|
||||||
local order = mail.parse_player_list(field)
|
local order = mail.parse_player_list(field)
|
||||||
for _, player_name in ipairs(order) do
|
for _, recipient_name in ipairs(order) do
|
||||||
if not minetest.player_exists(player_name) then
|
if mail.split(recipient_name, "@")[1] == "" then -- in case of maillist
|
||||||
undeliverable[player_name] = true
|
recipients[recipient_name] = true
|
||||||
else
|
else -- in case of playerˇ
|
||||||
recipients[player_name] = true
|
if not minetest.player_exists(recipient_name) then
|
||||||
|
undeliverable[recipient_name] = true
|
||||||
|
else
|
||||||
|
recipients[recipient_name] = true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return mail.concat_player_list(order)
|
return mail.concat_player_list(order)
|
||||||
|
|
Loading…
Add table
Reference in a new issue