Mercurial > prosody-modules
diff mod_muc_webchat_url/mod_muc_webchat_url.lua @ 3672:b8bcea17ccd6
mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 17 Sep 2019 17:12:59 +0200 |
parents | mod_muc_lang/mod_muc_lang.lua@ef5d52ca31bb |
children | 11ebf1da416b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_muc_webchat_url/mod_muc_webchat_url.lua Tue Sep 17 17:12:59 2019 +0200 @@ -0,0 +1,61 @@ +local jid_split = require "util.jid".split; +module:depends"muc"; + +local webchat_baseurl = module:get_option_string("muc_webchat_baseurl", nil); + +local function get_webchat_url(room) + local webchat_url = room._data.webchat_url; + if webchat_url then -- explicitly configured + return webchat_url; + end + if not webchat_baseurl then + -- no template + return nil; + end + if room:get_hidden() or room:get_members_only() or room:get_password() then + -- not a public room + return nil; + end + return (webchat_baseurl:gsub("{(%w+)}", { + jid = room.jid, + node = select(1, jid_split(room.jid)), + host = select(2, jid_split(room.jid)), + })); +end + +module:hook("muc-config-form", function(event) + local room, form = event.room, event.form; + table.insert(form, { + name = "muc#roomconfig_webchat_url", + type = "text-single", + label = "URL where this room can be joined", + value = get_webchat_url(room), + }); +end); + +module:hook("muc-config-submitted", function(event) + local room, fields, changed = event.room, event.fields, event.changed; + local new = fields["muc#roomconfig_webchat_url"]; + if new ~= room._data.webchat_url then + room._data.webchat_url = new; + if type(changed) == "table" then + changed["muc#roomconfig_webchat_url"] = true; + else + event.changed = true; + end + end +end); + +module:hook("muc-disco#info", function (event) + local room, form, formdata = event.room, event.form, event.formdata; + + local webchat_url = get_webchat_url(room); + if not webchat_url or webchat_url == "" then + return; + end + table.insert(form, { + name = "muc#roominfo_webchat_url", + }); + formdata["muc#roominfo_webchat_url"] = webchat_url; +end); +