Mercurial > prosody-hg
comparison plugins/muc/muc.lib.lua @ 6454:6842b07fc7bc
plugins/muc/muc.lib: Fire muc-occupant-left from other places an occupant may leave the room
| author | daurnimator <quae@daurnimator.com> |
|---|---|
| date | Fri, 26 Sep 2014 17:44:14 -0400 |
| parents | 14b62ad88d8a |
| children | 3c815a64042b |
comparison
equal
deleted
inserted
replaced
| 6453:14b62ad88d8a | 6454:6842b07fc7bc |
|---|---|
| 322 :tag('status'):text(error_message)); | 322 :tag('status'):text(error_message)); |
| 323 self:save_occupant(occupant); | 323 self:save_occupant(occupant); |
| 324 local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user";}) | 324 local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user";}) |
| 325 :tag("status", {code = "307"}) | 325 :tag("status", {code = "307"}) |
| 326 self:publicise_occupant_status(occupant, x); | 326 self:publicise_occupant_status(occupant, x); |
| 327 if occupant.jid == real_jid then -- Was last session | |
| 328 module:fire_event("muc-occupant-left", {room = self; nick = occupant.nick; occupant = occupant;}); | |
| 329 end | |
| 327 return true; | 330 return true; |
| 328 end | 331 end |
| 329 | 332 |
| 330 -- Give the room creator owner affiliation | 333 -- Give the room creator owner affiliation |
| 331 module:hook("muc-room-pre-create", function(event) | 334 module:hook("muc-room-pre-create", function(event) |
| 1048 end | 1051 end |
| 1049 end | 1052 end |
| 1050 local is_semi_anonymous = self:get_whois() == "moderators"; | 1053 local is_semi_anonymous = self:get_whois() == "moderators"; |
| 1051 for occupant, old_role in pairs(occupants_updated) do | 1054 for occupant, old_role in pairs(occupants_updated) do |
| 1052 self:publicise_occupant_status(occupant, x, nil, actor, reason); | 1055 self:publicise_occupant_status(occupant, x, nil, actor, reason); |
| 1053 if is_semi_anonymous and | 1056 if occupant.role == nil then |
| 1057 module:fire_event("muc-occupant-left", {room = self; nick = occupant.nick; occupant = occupant;}); | |
| 1058 elseif is_semi_anonymous and | |
| 1054 (old_role == "moderator" and occupant.role ~= "moderator") or | 1059 (old_role == "moderator" and occupant.role ~= "moderator") or |
| 1055 (old_role ~= "moderator" and occupant.role == "moderator") then -- Has gained or lost moderator status | 1060 (old_role ~= "moderator" and occupant.role == "moderator") then -- Has gained or lost moderator status |
| 1056 -- Send everyone else's presences (as jid visibility has changed) | 1061 -- Send everyone else's presences (as jid visibility has changed) |
| 1057 for real_jid in occupant:each_session() do | 1062 for real_jid in occupant:each_session() do |
| 1058 self:send_occupant_list(real_jid, function(occupant_jid, occupant) | 1063 self:send_occupant_list(real_jid, function(occupant_jid, occupant) |
| 1120 x:tag("status", {code = "307"}):up(); | 1125 x:tag("status", {code = "307"}):up(); |
| 1121 end | 1126 end |
| 1122 occupant.role = role; | 1127 occupant.role = role; |
| 1123 self:save_occupant(occupant); | 1128 self:save_occupant(occupant); |
| 1124 self:publicise_occupant_status(occupant, x, nil, actor, reason); | 1129 self:publicise_occupant_status(occupant, x, nil, actor, reason); |
| 1130 if role == nil then | |
| 1131 module:fire_event("muc-occupant-left", {room = self; nick = occupant.nick; occupant = occupant;}); | |
| 1132 end | |
| 1125 return true; | 1133 return true; |
| 1126 end | 1134 end |
| 1127 | 1135 |
| 1128 local affiliation_notify = module:require "muc/affiliation_notify"; | 1136 local affiliation_notify = module:require "muc/affiliation_notify"; |
| 1129 | 1137 |
