diff options
-rw-r--r-- | plugins/muc/muc.lib.lua | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/plugins/muc/muc.lib.lua b/plugins/muc/muc.lib.lua index 1e433db0..aea6848c 100644 --- a/plugins/muc/muc.lib.lua +++ b/plugins/muc/muc.lib.lua @@ -491,6 +491,7 @@ function room_mt:handle_normal_presence(origin, stanza) is_first_session = is_first_dest_session; is_last_session = is_last_orig_session; }; + local orig_nick = dest_occupant and dest_occupant.jid; if orig_occupant == nil then event_name = "muc-occupant-pre-join"; event.occupant = dest_occupant; @@ -503,6 +504,7 @@ function room_mt:handle_normal_presence(origin, stanza) event.dest_occupant = dest_occupant; end if module:fire_event(event_name, event) then return true; end + local nick_overridden = dest_occupant and orig_nick ~= dest_occupant.nick; -- Check for nick conflicts if dest_occupant ~= nil and not is_first_dest_session and bare_jid ~= jid_bare(dest_occupant.bare_jid) then -- new nick or has different bare real jid @@ -555,6 +557,7 @@ function room_mt:handle_normal_presence(origin, stanza) dest_nick = nil; -- set dest_nick to nil; so general populance doesn't see it for whole orig_occupant end end + self:save_occupant(orig_occupant); self:publicise_occupant_status(orig_occupant, orig_x, dest_nick); @@ -575,6 +578,9 @@ function room_mt:handle_normal_presence(origin, stanza) if orig_occupant == nil and self:get_whois() == "anyone" then dest_x:tag("status", {code = "100"}):up(); end + if nick_overridden then + dest_x:tag("status", {code = "210"}):up(); + end self:save_occupant(dest_occupant); if orig_occupant == nil or muc_x then |