Mercurial > prosody-modules
comparison mod_slack_webhooks/mod_slack_webhooks.lua @ 4561:c6b740ccf6ec
Back out 662423cea3f4 (non-standard buttons)
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 21 May 2021 20:58:39 +0200 |
parents | 724003f24308 |
children |
comparison
equal
deleted
inserted
replaced
4560:724003f24308 | 4561:c6b740ccf6ec |
---|---|
10 local jid = require "util.jid"; | 10 local jid = require "util.jid"; |
11 local now = require "util.datetime".datetime; | 11 local now = require "util.datetime".datetime; |
12 local json = require "util.json" | 12 local json = require "util.json" |
13 local formdecode = require "net.http".formdecode; | 13 local formdecode = require "net.http".formdecode; |
14 local http = require "net.http"; | 14 local http = require "net.http"; |
15 local dataform = require "util.dataforms"; | |
16 | 15 |
17 local mod_muc = module:depends"muc"; | 16 local mod_muc = module:depends"muc"; |
18 local rooms = rawget(mod_muc, "rooms"); | 17 local rooms = rawget(mod_muc, "rooms"); |
19 local get_room_from_jid = rawget(mod_muc, "get_room_from_jid") or | 18 local get_room_from_jid = rawget(mod_muc, "get_room_from_jid") or |
20 function (room_jid) | 19 function (room_jid) |
111 end | 110 end |
112 local sender = jid.join(path, module.host, from_nick); | 111 local sender = jid.join(path, module.host, from_nick); |
113 module:log("debug", "message to %s from %s", bare_room, sender); | 112 module:log("debug", "message to %s from %s", bare_room, sender); |
114 module:log("debug", "body: %s", post_body["text"]); | 113 module:log("debug", "body: %s", post_body["text"]); |
115 local message = msg({ to = bare_room, from = sender, type = "groupchat", id="webhookbot" .. now()},post_body["text"]); | 114 local message = msg({ to = bare_room, from = sender, type = "groupchat", id="webhookbot" .. now()},post_body["text"]); |
116 | |
117 if type(post_body["attachments"]) == "table" then -- Buttons? | |
118 -- luacheck: ignore 631 | |
119 -- defensive against JSON having whatever data in it, enjoy | |
120 | |
121 for _, attachment in ipairs(post_body["attachments"]) do | |
122 if type(attachment) == "table" and type(attachment.actions) == "table" and type(attachment.callback_id) == "string" then | |
123 local buttons = {}; | |
124 local button_name; | |
125 for _, action in ipairs(attachment.actions) do | |
126 if type(attachment.text) == "string" then | |
127 buttons.label = attachment.text; | |
128 end | |
129 if type(action) == "table" and action.type == "button" and type(action.name) == "string" and type(action.value) == "string" then | |
130 if not button_name then | |
131 button_name = action.name; | |
132 end | |
133 if button_name == action.name then | |
134 local button = { | |
135 value = action.value; | |
136 }; | |
137 if type(action.text) == "string" then | |
138 button.label = action.text; | |
139 end | |
140 table.insert(buttons, button); | |
141 end | |
142 end | |
143 end | |
144 if button_name then | |
145 message:add_direct_child(dataform.new({ | |
146 { | |
147 type = "hidden", name = "FORM_TYPE", | |
148 value = "xmpp:prosody.im/community/mod_slack_webhooks#buttons", | |
149 }, | |
150 { | |
151 type = "hidden", name = "callback_id", | |
152 value = attachment.callback_id, | |
153 }, | |
154 { | |
155 type = "hidden", name = "button_name", | |
156 value = button_name, | |
157 }, | |
158 { | |
159 type = "list-single", name = "buttons", | |
160 value = "", -- FIXME util.dataforms can't do options without a value | |
161 options = buttons; | |
162 } | |
163 }):form()); | |
164 break; | |
165 end | |
166 end | |
167 end | |
168 end | |
169 dest_room:broadcast_message(message, true); | 115 dest_room:broadcast_message(message, true); |
170 return 201; | 116 return 201; |
171 end | 117 end |
172 | 118 |
173 module:provides("http", { | 119 module:provides("http", { |