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", {