Software /
code /
prosody-modules
Diff
mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua @ 5969:d58e4c70feb2
mod_muc_anonymize_moderation_actions: first commit.
author | John Livingston <git@john-livingston.fr> |
---|---|
date | Fri, 26 Jul 2024 17:07:05 +0200 |
child | 5973:a316fee71bed |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_muc_anonymize_moderation_actions/mod_muc_anonymize_moderation_actions.lua Fri Jul 26 17:07:05 2024 +0200 @@ -0,0 +1,44 @@ +-- mod_muc_anonymize_moderation_actions +-- +-- SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> +-- SPDX-License-Identifier: AGPL-3.0-only + +-- form_position: the position in the room config form (this value will be passed as priority for the "muc-config-form" hook). +-- By default, field will be between muc#roomconfig_changesubject and muc#roomconfig_moderatedroom +local form_position = module:get_option_number("anonymize_moderation_actions_form_position") or 80-2; + +local function get_anonymize_moderation_actions(room) + return room._data.anonymize_moderation_actions or false; +end + +local function set_anonymize_moderation_actions(room, anonymize_moderation_actions) + anonymize_moderation_actions = anonymize_moderation_actions and true or nil; + if get_anonymize_moderation_actions(room) == anonymize_moderation_actions then return false; end + room._data.anonymize_moderation_actions = anonymize_moderation_actions; + return true; +end + +-- Config form declaration +local function add_form_option(event) + table.insert(event.form, { + name = "muc#roomconfig_anonymize_moderation_actions"; + type = "boolean"; + label = "Anonymize moderation actions"; + desc = "When this is enabled, moderation actions will be anonymized, to avoid disclosing who is banning/kicking/… occupants."; + value = get_anonymize_moderation_actions(event.room); + }); +end + +local function config_submitted(event) + set_anonymize_moderation_actions(event.room, event.value); +end + +local function remove_actor(event) + if (event.room and get_anonymize_moderation_actions(event.room)) then + event.actor = nil; + end +end + +module:hook("muc-config-submitted/muc#roomconfig_anonymize_moderation_actions", config_submitted); +module:hook("muc-config-form", add_form_option, form_position); +module:hook("muc-broadcast-presence", remove_actor);