diff mod_slack_webhooks/mod_slack_webhooks.lua @ 3147:82689acd1294

mod_slack_webhooks: Forward info about clicked button to hook
author Kim Alvefur <zash@zash.se>
date Sun, 03 Jun 2018 02:02:56 +0200
parents 662423cea3f4
children 8c7b8b2c3237
line wrap: on
line diff
--- a/mod_slack_webhooks/mod_slack_webhooks.lua	Sun Jun 03 02:02:51 2018 +0200
+++ b/mod_slack_webhooks/mod_slack_webhooks.lua	Sun Jun 03 02:02:56 2018 +0200
@@ -23,6 +23,7 @@
 	end
 end
 
+local button_ns = "xmpp:prosody.im/community/mod_slack_webhooks#buttons";
 local routing = module:get_option("outgoing_webhook_routing") or {};
 local listen_path = module:get_option("incoming_webhook_path") or "/webhook";
 local default_from_nick = module:get_option("incoming_webhook_default_nick") or "Bot";
@@ -59,6 +60,28 @@
 		team_domain = from_host,
 		user_name = from_nick,
 	};
+
+	local form = stanza:get_child("x", "jabber:x:form");
+	if form and form.attr.type == "submit" then
+		local callback_id, button_name, button_value;
+		for field in form:childtags("field") do
+			if field.attr.var == "callback_id" then
+				button_name = field:get_child_text("text");
+			elseif field.attr.var == "button_name" then
+				button_name = field:get_child_text("text");
+			elseif field.attr.var ~= "FORM_TYPE" or field:get_child_text("text") ~= button_ns then
+				callback_id, button_name, button_value = nil, nil, nil;
+				break;
+			end
+		end
+		if callback_id and button_name and button_value then
+			json_out.callback_id = callback_id;
+			json_out.actions = {
+				{ type = "button", name = button_name, value = button_value }
+			};
+		end
+	end
+
 	local stanzaid = stanza:get_child("id");
 	if stanzaid and string.sub(stanzaid,1,string.len("webhookbot"))=="webhookbot" then
 		json_out["bot_id"] = "webhookbot";
@@ -147,7 +170,7 @@
 					message:add_direct_child(dataform.new({
 						{
 							type = "hidden", name = "FORM_TYPE",
-							value = "xmpp:prosody.im/community/mod_slack_webhooks#buttons",
+							value = button_ns,
 						},
 						{
 							type = "hidden", name = "callback_id",