Software /
code /
prosody
Comparison
plugins/muc/muc.lib.lua @ 9599:5a2135964ed3 0.11
MUC: Announce affiliation changes for JIDs that are not in the room
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 31 Oct 2018 13:13:05 +0000 |
parent | 9547:a06419532efb |
child | 9612:abf9bacf77d4 |
comparison
equal
deleted
inserted
replaced
9597:17d43543f9b6 | 9599:5a2135964ed3 |
---|---|
1311 else | 1311 else |
1312 x:tag("status", {code="321"}):up(); -- affiliation change | 1312 x:tag("status", {code="321"}):up(); -- affiliation change |
1313 end | 1313 end |
1314 end | 1314 end |
1315 local is_semi_anonymous = self:get_whois() == "moderators"; | 1315 local is_semi_anonymous = self:get_whois() == "moderators"; |
1316 for occupant, old_role in pairs(occupants_updated) do | 1316 |
1317 self:publicise_occupant_status(occupant, x, nil, actor, reason); | 1317 if next(occupants_updated) ~= nil then |
1318 if occupant.role == nil then | 1318 for occupant, old_role in pairs(occupants_updated) do |
1319 module:fire_event("muc-occupant-left", {room = self; nick = occupant.nick; occupant = occupant;}); | 1319 self:publicise_occupant_status(occupant, x, nil, actor, reason); |
1320 elseif is_semi_anonymous and | 1320 if occupant.role == nil then |
1321 (old_role == "moderator" and occupant.role ~= "moderator") or | 1321 module:fire_event("muc-occupant-left", {room = self; nick = occupant.nick; occupant = occupant;}); |
1322 (old_role ~= "moderator" and occupant.role == "moderator") then -- Has gained or lost moderator status | 1322 elseif is_semi_anonymous and |
1323 -- Send everyone else's presences (as jid visibility has changed) | 1323 (old_role == "moderator" and occupant.role ~= "moderator") or |
1324 for real_jid in occupant:each_session() do | 1324 (old_role ~= "moderator" and occupant.role == "moderator") then -- Has gained or lost moderator status |
1325 self:send_occupant_list(real_jid, function(occupant_jid, occupant) --luacheck: ignore 212 433 | 1325 -- Send everyone else's presences (as jid visibility has changed) |
1326 return occupant.bare_jid ~= jid; | 1326 for real_jid in occupant:each_session() do |
1327 end); | 1327 self:send_occupant_list(real_jid, function(occupant_jid, occupant) --luacheck: ignore 212 433 |
1328 end | 1328 return occupant.bare_jid ~= jid; |
1329 end | 1329 end); |
1330 end | |
1331 end | |
1332 end | |
1333 else | |
1334 -- Announce affiliation change for a user that is not currently in the room, | |
1335 -- XEP-0045 (v1.31.2) example 195 | |
1336 -- add_item(x, affiliation, role, jid, nick, actor_nick, actor_jid, reason) | |
1337 local announce_msg = st.message({ from = self.jid }) | |
1338 :add_child(add_item(st.clone(x), affiliation, nil, jid, nil, nil, nil, reason)); | |
1339 local min_role = is_semi_anonymous and "moderator" or "none"; | |
1340 self:broadcast(announce_msg, muc_util.only_with_min_role(min_role)); | |
1330 end | 1341 end |
1331 | 1342 |
1332 self:save(true); | 1343 self:save(true); |
1333 | 1344 |
1334 module:fire_event("muc-set-affiliation", { | 1345 module:fire_event("muc-set-affiliation", { |