return _get_affiliation(self, jid);
end
function muclib.room_mt:set_affiliation(actor, jid, affiliation, callback, reason)
- if is_admin(jid) then return nil, "modify", "not-acceptable"; end
+ if affiliation ~= "owner" and is_admin(jid) then return nil, "modify", "not-acceptable"; end
return _set_affiliation(self, actor, jid, affiliation, callback, reason);
end
room.route_stanza = room_route_stanza;
room.save = room_save;
rooms[jid] = room;
+ module:fire_event("muc-room-created", { room = room });
return room;
end
return true;
end
if not(restrict_room_creation) or
- (restrict_room_creation == "admin" and is_admin(stanza.attr.from)) or
+ is_admin(stanza.attr.from) or
(restrict_room_creation == "local" and select(2, jid_split(stanza.attr.from)) == module.host:gsub("^[^%.]+%.", "")) then
room = create_room(bare);
end
if room then
room:handle_stanza(origin, stanza);
if not next(room._occupants) and not persistent_rooms[room.jid] then -- empty, non-persistent room
+ module:fire_event("muc-room-destroyed", { room = room });
rooms[bare] = nil; -- discard room
end
else