plugins/muc/muc.lib: Turn get_default_role into an event
authordaurnimator <quae@daurnimator.com>
Thu, 03 Apr 2014 18:36:28 -0400
changeset 6220 4e7d205f49f7
parent 6219 a90159cfa530
child 6221 f321536afeec
plugins/muc/muc.lib: Turn get_default_role into an event
plugins/muc/muc.lib.lua
--- a/plugins/muc/muc.lib.lua	Thu Apr 03 18:10:16 2014 -0400
+++ b/plugins/muc/muc.lib.lua	Thu Apr 03 18:36:28 2014 -0400
@@ -39,16 +39,30 @@
 end
 
 function room_mt:get_default_role(affiliation)
-	if affiliation == "owner" or affiliation == "admin" then
+	local role = module:fire_event("muc-get-default-role", {
+		room = self;
+		affiliation = affiliation;
+		affiliation_rank = valid_affiliations[affiliation or "none"];
+	});
+	return role, valid_roles[role or "none"];
+end
+module:hook("muc-get-default-role", function(event)
+	if event.affiliation_rank >= valid_affiliations.admin then
 		return "moderator";
-	elseif affiliation == "member" then
+	elseif event.affiliation_rank >= valid_affiliations.member then
 		return "participant";
-	elseif not affiliation then
-		if not self:get_members_only() then
-			return self:get_moderated() and "visitor" or "participant";
-		end
+	end
+end);
+module:hook("muc-get-default-role", function(event)
+	if not event.affiliation and event.room:get_members_only() then
+		return false;
 	end
-end
+end);
+module:hook("muc-get-default-role", function(event)
+	if not event.affiliation then
+		return event.room:get_moderated() and "visitor" or "participant";
+	end
+end, -1);
 
 --- Occupant functions
 function room_mt:new_occupant(bare_real_jid, nick)