MUC: Add support for separate events for disco#info queries with a 'node'
authorMatthew Wild <mwild1@gmail.com>
Mon, 03 Sep 2018 12:19:20 +0100
changeset 9241 0c1a1172d942
parent 9240 b86c2e135797
child 9242 03e37f7d6c97
MUC: Add support for separate events for disco#info queries with a 'node' Reserved nickname discovery uses this
plugins/muc/muc.lib.lua
--- a/plugins/muc/muc.lib.lua	Mon Sep 03 12:18:13 2018 +0100
+++ b/plugins/muc/muc.lib.lua	Mon Sep 03 12:19:20 2018 +0100
@@ -334,13 +334,23 @@
 end
 
 function room_mt:get_disco_info(stanza)
-	local reply = st.reply(stanza):query("http://jabber.org/protocol/disco#info");
-	local form = dataform.new {
-		{ name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/muc#roominfo" };
-	};
-	local formdata = {};
-	module:fire_event("muc-disco#info", {room = self; reply = reply; form = form, formdata = formdata ;});
-	reply:add_child(form:form(formdata, "result"));
+	local node = stanza.tags[1].attr.node or "";
+	local reply = st.reply(stanza):query("http://jabber.org/protocol/disco#info", { node = node });
+	local event_name = "muc-disco#info";
+	local event_data = { room = self, reply = reply, stanza = stanza };
+
+	if node ~= "" then
+		event_name = event_name.."/"..node;
+	else
+		event_data.form = dataform.new {
+			{ name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/muc#roominfo" };
+		};
+		event_data.formdata = {};
+	end
+	module:fire_event(event_name, event_data);
+	if event_data.form then
+		reply:add_child(event_data.form:form(event_data.formdata, "result"));
+	end
 	return reply;
 end
 module:hook("muc-disco#info", function(event)