X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=plugins%2Fmuc%2Fmuc.lib.lua;h=60b12ac835088b0a5bb57e15ac9ae00d06fa5136;hb=bb3d585c15eca14af1873f067697d7aad580612a;hp=75caa233938f49d627df9aefae1c84d2d67935f7;hpb=12909a656ed52b0bc6820584e971d85f0a536e41;p=prosody.git diff --git a/plugins/muc/muc.lib.lua b/plugins/muc/muc.lib.lua index 75caa233..60b12ac8 100644 --- a/plugins/muc/muc.lib.lua +++ b/plugins/muc/muc.lib.lua @@ -187,15 +187,15 @@ end -- Takes the x element that goes into the stanzas function room_mt:publicise_occupant_status(occupant, base_x, nick, actor, reason) -- Build real jid and (optionally) occupant jid template presences - local base_presence; - if occupant.role ~= nil then + local base_presence do -- Try to use main jid's presence local pr = occupant:get_presence(); - if pr ~= nil then + if pr and (pr.attr.type ~= "unavailable" or occupant.role == nil) then base_presence = st.clone(pr); + else -- user is leaving but didn't send a leave presence. make one for them + base_presence = st.presence {from = occupant.nick; type = "unavailable";}; end end - base_presence = base_presence or st.presence {from = occupant.nick; type = "unavailable";}; -- Fire event (before full_p and anon_p are created) local event = { @@ -1146,7 +1146,7 @@ function room_mt:set_role(actor, occupant_jid, role, reason) else -- Can't do anything to other owners or admins local occupant_affiliation = self:get_affiliation(occupant.bare_jid); - if occupant_affiliation == "owner" and occupant_affiliation == "admin" then + if occupant_affiliation == "owner" or occupant_affiliation == "admin" then return nil, "cancel", "not-allowed"; end @@ -1178,58 +1178,10 @@ function room_mt:set_role(actor, occupant_jid, role, reason) return true; end -local affiliation_notify = module:require "muc/affiliation_notify"; - -local name = module:require "muc/name"; -room_mt.get_name = name.get; -room_mt.set_name = name.set; - -local description = module:require "muc/description"; -room_mt.get_description = description.get; -room_mt.set_description = description.set; - -local hidden = module:require "muc/hidden"; -room_mt.get_hidden = hidden.get; -room_mt.set_hidden = hidden.set; -function room_mt:get_public() - return not self:get_hidden(); -end -function room_mt:set_public(public) - return self:set_hidden(not public); -end - -local password = module:require "muc/password"; -room_mt.get_password = password.get; -room_mt.set_password = password.set; - local whois = module:require "muc/whois"; room_mt.get_whois = whois.get; room_mt.set_whois = whois.set; -local members_only = module:require "muc/members_only"; -room_mt.get_members_only = members_only.get; -room_mt.set_members_only = members_only.set; - -local moderated = module:require "muc/moderated"; -room_mt.get_moderated = moderated.get; -room_mt.set_moderated = moderated.set; - -local persistent = module:require "muc/persistent"; -room_mt.get_persistent = persistent.get; -room_mt.set_persistent = persistent.set; - -local subject = module:require "muc/subject"; -room_mt.get_changesubject = subject.get_changesubject; -room_mt.set_changesubject = subject.set_changesubject; -room_mt.get_subject = subject.get; -room_mt.set_subject = subject.set; -room_mt.send_subject = subject.send; - -local history = module:require "muc/history"; -room_mt.send_history = history.send; -room_mt.get_historylength = history.get_length; -room_mt.set_historylength = history.set_length; - local _M = {}; -- module "muc" function _M.new_room(jid, config)