X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=plugins%2Fmod_presence.lua;h=cf762edc880cf6c5cfa8a05fbb8d0015aadf094f;hb=670c0bb01015bf63176eafc5c605c800c7053e1f;hp=64d5a47be8b6a9035952e5dd88f70b5d668a8a6a;hpb=2c5b77cf0f73aa0c7408d61195e438e0de59a0b1;p=prosody.git diff --git a/plugins/mod_presence.lua b/plugins/mod_presence.lua index 64d5a47b..cf762edc 100644 --- a/plugins/mod_presence.lua +++ b/plugins/mod_presence.lua @@ -178,6 +178,7 @@ function handle_outbound_presence_subscriptions_and_probes(origin, stanza, from_ end core_post_stanza(origin, stanza); send_presence_of_available_resources(node, host, to_bare, origin); + core_post_stanza(origin, st.presence({ type = "probe", from = from_bare, to = to_bare })); elseif stanza.attr.type == "unsubscribed" then -- 1. send unavailable -- 2. route stanza @@ -357,3 +358,27 @@ module:hook("resource-unbind", function(event) session.directed = nil; end end); + +module:hook("roster-item-removed", function (event) + local username = event.username; + local session = event.origin; + local roster = event.roster or session and session.roster; + local jid = event.jid; + local item = event.item; + local from_jid = session.full_jid or (username .. "@" .. module.host); + + local subscription = item and item.subscription or "none"; + local ask = item and item.ask; + local pending = roster and roster[false].pending[jid]; + + if subscription == "both" or subscription == "from" or pending then + core_post_stanza(session, st.presence({type="unsubscribed", from=from_jid, to=jid})); + end + + if subscription == "both" or subscription == "to" or ask then + send_presence_of_available_resources(username, module.host, jid, session, st.presence({type="unavailable"})); + core_post_stanza(session, st.presence({type="unsubscribe", from=from_jid, to=jid})); + end + +end, -1); +