Mercurial > prosody-modules
comparison mod_muc_moderation_delay/config.lib.lua @ 5938:959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
author | John Livingston <git@john-livingston.fr> |
---|---|
date | Fri, 26 Jul 2024 15:36:05 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
5937:da942a3f3660 | 5938:959382fac20c |
---|---|
1 -- SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> | |
2 -- SPDX-License-Identifier: AGPL-3.0-only | |
3 | |
4 -- Getter/Setter | |
5 local function get_moderation_delay(room) | |
6 return room._data.moderation_delay or nil; | |
7 end | |
8 | |
9 local function set_moderation_delay(room, delay) | |
10 if delay == 0 then | |
11 delay = nil; | |
12 end | |
13 if delay ~= nil then | |
14 delay = assert(tonumber(delay), "Moderation delay is not a valid number"); | |
15 if delay < 0 then | |
16 delay = nil; | |
17 end | |
18 end | |
19 | |
20 if get_moderation_delay(room) == delay then return false; end | |
21 | |
22 room._data.moderation_delay = delay; | |
23 return true; | |
24 end | |
25 | |
26 -- Discovering support | |
27 local function add_disco_form(event) | |
28 table.insert(event.form, { | |
29 name = "muc#roominfo_moderation_delay"; | |
30 value = ""; | |
31 }); | |
32 event.formdata["muc#roominfo_moderation_delay"] = get_moderation_delay(event.room); | |
33 end | |
34 | |
35 | |
36 -- Config form declaration | |
37 local function add_form_option(event) | |
38 table.insert(event.form, { | |
39 name = "muc#roomconfig_moderation_delay"; | |
40 type = "text-single"; | |
41 datatype = "xs:integer"; | |
42 range_min = 0; | |
43 range_max = 60; -- do not allow too big values, it does not make sense. | |
44 label = "Moderation delay (0=disabled, any positive integer= messages will be delayed for X seconds for non-moderator participants.)"; | |
45 -- desc = ""; | |
46 value = get_moderation_delay(event.room); | |
47 }); | |
48 end | |
49 | |
50 local function config_submitted(event) | |
51 set_moderation_delay(event.room, event.value); | |
52 -- no need to 104 status, this feature is invisible for regular participants. | |
53 end | |
54 | |
55 return { | |
56 set_moderation_delay = set_moderation_delay; | |
57 get_moderation_delay = get_moderation_delay; | |
58 add_disco_form = add_disco_form; | |
59 add_form_option = add_form_option; | |
60 config_submitted = config_submitted; | |
61 } |