570cf788ec
* Implement non-player recipients * Add API callback specifically for players receiving mail * Exclude sender from (mailing list) recipients * Complement test * Fixup typos in complemented test * Expand aliases at toplevel if the current expansion is at toplevel This should allow players to send mail to their own aliases * Also test on_(player_)receive callbacks * Fix oversight in test case
52 lines
1.6 KiB
Lua
52 lines
1.6 KiB
Lua
local S = minetest.get_translator("mail")
|
|
local has_canonical_name = minetest.get_modpath("canonical_name")
|
|
|
|
mail.register_on_player_receive(function(name, msg)
|
|
-- add to inbox
|
|
local entry = mail.get_storage_entry(name)
|
|
table.insert(entry.inbox, msg)
|
|
mail.set_storage_entry(name, entry)
|
|
|
|
-- notify recipients that happen to be online
|
|
local mail_alert = S("You have a new message from @1! Subject: @2", msg.from, msg.subject) ..
|
|
"\n" .. S("To view it, type /mail")
|
|
local inventory_alert = S("You could also use the button in your inventory.")
|
|
local player = minetest.get_player_by_name(name)
|
|
if player then
|
|
if mail.get_setting(name, "chat_notifications") == true then
|
|
minetest.chat_send_player(name, mail_alert)
|
|
if minetest.get_modpath("unified_inventory") or minetest.get_modpath("sfinv_buttons") then
|
|
minetest.chat_send_player(name, inventory_alert)
|
|
end
|
|
end
|
|
if mail.get_setting(name, "sound_notifications") == true then
|
|
minetest.sound_play("mail_notif", {to_player=name})
|
|
end
|
|
local receiver_entry = mail.get_storage_entry(name)
|
|
local receiver_messages = receiver_entry.inbox
|
|
mail.hud_update(name, receiver_messages)
|
|
end
|
|
end)
|
|
|
|
mail.register_recipient_handler(function(_, pname)
|
|
if not minetest.player_exists(pname) then
|
|
return nil
|
|
end
|
|
return true, function(msg)
|
|
for _, on_player_receive in ipairs(mail.registered_on_player_receives) do
|
|
if on_player_receive(pname, msg) then
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
if has_canonical_name then
|
|
mail.register_recipient_handler(function(_, name)
|
|
local realname = canonical_name.get(name)
|
|
if realname then
|
|
return true, realname
|
|
end
|
|
end)
|
|
end
|