Mercurial > prosody-modules
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 3146:662423cea3f4 | 3147:82689acd1294 |
|---|---|
| 21 elseif mod_muc.rooms then | 21 elseif mod_muc.rooms then |
| 22 return mod_muc.rooms[room_jid]; -- COMPAT 0.9, 0.10 | 22 return mod_muc.rooms[room_jid]; -- COMPAT 0.9, 0.10 |
| 23 end | 23 end |
| 24 end | 24 end |
| 25 | 25 |
| 26 local button_ns = "xmpp:prosody.im/community/mod_slack_webhooks#buttons"; | |
| 26 local routing = module:get_option("outgoing_webhook_routing") or {}; | 27 local routing = module:get_option("outgoing_webhook_routing") or {}; |
| 27 local listen_path = module:get_option("incoming_webhook_path") or "/webhook"; | 28 local listen_path = module:get_option("incoming_webhook_path") or "/webhook"; |
| 28 local default_from_nick = module:get_option("incoming_webhook_default_nick") or "Bot"; | 29 local default_from_nick = module:get_option("incoming_webhook_default_nick") or "Bot"; |
| 29 | 30 |
| 30 function postcallback(_, code) | 31 function postcallback(_, code) |
| 57 timestamp = now(), | 58 timestamp = now(), |
| 58 text = body, | 59 text = body, |
| 59 team_domain = from_host, | 60 team_domain = from_host, |
| 60 user_name = from_nick, | 61 user_name = from_nick, |
| 61 }; | 62 }; |
| 63 | |
| 64 local form = stanza:get_child("x", "jabber:x:form"); | |
| 65 if form and form.attr.type == "submit" then | |
| 66 local callback_id, button_name, button_value; | |
| 67 for field in form:childtags("field") do | |
| 68 if field.attr.var == "callback_id" then | |
| 69 button_name = field:get_child_text("text"); | |
| 70 elseif field.attr.var == "button_name" then | |
| 71 button_name = field:get_child_text("text"); | |
| 72 elseif field.attr.var ~= "FORM_TYPE" or field:get_child_text("text") ~= button_ns then | |
| 73 callback_id, button_name, button_value = nil, nil, nil; | |
| 74 break; | |
| 75 end | |
| 76 end | |
| 77 if callback_id and button_name and button_value then | |
| 78 json_out.callback_id = callback_id; | |
| 79 json_out.actions = { | |
| 80 { type = "button", name = button_name, value = button_value } | |
| 81 }; | |
| 82 end | |
| 83 end | |
| 84 | |
| 62 local stanzaid = stanza:get_child("id"); | 85 local stanzaid = stanza:get_child("id"); |
| 63 if stanzaid and string.sub(stanzaid,1,string.len("webhookbot"))=="webhookbot" then | 86 if stanzaid and string.sub(stanzaid,1,string.len("webhookbot"))=="webhookbot" then |
| 64 json_out["bot_id"] = "webhookbot"; | 87 json_out["bot_id"] = "webhookbot"; |
| 65 end | 88 end |
| 66 | 89 |
| 145 end | 168 end |
| 146 if button_name then | 169 if button_name then |
| 147 message:add_direct_child(dataform.new({ | 170 message:add_direct_child(dataform.new({ |
| 148 { | 171 { |
| 149 type = "hidden", name = "FORM_TYPE", | 172 type = "hidden", name = "FORM_TYPE", |
| 150 value = "xmpp:prosody.im/community/mod_slack_webhooks#buttons", | 173 value = button_ns, |
| 151 }, | 174 }, |
| 152 { | 175 { |
| 153 type = "hidden", name = "callback_id", | 176 type = "hidden", name = "callback_id", |
| 154 value = attachment.callback_id, | 177 value = attachment.callback_id, |
| 155 }, | 178 }, |
