Mercurial > prosody-modules
view mod_muc_notifications/mod_muc_notifications.lua @ 6253:502963b86fbc
:multble modules: fix tab-> space
diff --git a/mod_admin_blocklist/README.md b/mod_admin_blocklist/README.md
--- a/mod_admin_blocklist/README.md
+++ b/mod_admin_blocklist/README.md
@@ -24,9 +24,9 @@ admin_blocklist_roles = { "prosody:opera
# Compatibility
Prosody-Version Status
- -------------- ------
- trunk* Works
- 13 Works
- 0.12 Works
+ ------------ ------
+ trunk* Works
+ 13 Works
+ 0.12 Works
*as of 2025-06-13
diff --git a/mod_csi_grace_period/README.md b/mod_csi_grace_period/README.md
--- a/mod_csi_grace_period/README.md
+++ b/mod_csi_grace_period/README.md
@@ -16,9 +16,9 @@ pocket is not the best use of radio time
Works with [mod_csi_simple][doc:modules:mod_csi_simple] which is
included with Prosody.
- ------- -------
- trunk* Works
- 13 Works
- 0.12 Works
+ ------- -------
+ trunk* Works
+ 13 Works
+ 0.12 Works
*as of 2025-06-13
diff --git a/mod_http_upload_external/README.md b/mod_http_upload_external/README.md
--- a/mod_http_upload_external/README.md
+++ b/mod_http_upload_external/README.md
@@ -87,10 +87,10 @@ Compatibility
=============
Prosody-Version Status
- ---------------- --------------------
- trunk Works as of 25-06-13
- 13 Works
- 0.12 Works
+ ---------------- --------------------
+ trunk Works as of 25-06-13
+ 13 Works
+ 0.12 Works
Implementation
==============
diff --git a/mod_muc_moderation/README.md b/mod_muc_moderation/README.md
--- a/mod_muc_moderation/README.md
+++ b/mod_muc_moderation/README.md
@@ -27,11 +27,10 @@ modules_enabled = {
# Compatibility
- ------- ---------------
- trunk Works^[as of 2025-06-13]
- 13 Works
- 0.12 Works
- ------- ---------------
+ ------- ---------------
+ trunk Works^[as of 2025-06-13]
+ 13 Works
+ 0.12 Works
## XEP version
diff --git a/mod_s2s_idle_timeout/README.md b/mod_s2s_idle_timeout/README.md
--- a/mod_s2s_idle_timeout/README.md
+++ b/mod_s2s_idle_timeout/README.md
@@ -25,10 +25,9 @@ Compatibility
=============
Prosody Version Status
- ----------------- -----------
- trunk[^1] Works
- 13 Works
- 0.12 Works
- ----------------- -----------
+ ----------------- -----------
+ trunk[^1] Works
+ 13 Works
+ 0.12 Works
[^1]: as of 2025-06-13
diff --git a/mod_s2s_keepalive/README.md b/mod_s2s_keepalive/README.md
--- a/mod_s2s_keepalive/README.md
+++ b/mod_s2s_keepalive/README.md
@@ -34,10 +34,9 @@ Compatibility
=============
Prosody Version Status
- ----------------- -----------
- trunk[^1] Works
- 13 Works
- 0.12 Works
- ----------------- -----------
+ ----------------- -----------
+ trunk[^1] Works
+ 13 Works
+ 0.12 Works
[^1]: as of 2025-06-13
| author | Menel <menel@snikket.de> |
|---|---|
| date | Fri, 13 Jun 2025 09:58:51 +0200 |
| parents | ef752c5115f7 |
| children |
line wrap: on
line source
-- mod_muc_notifications -- -- Copyright (C) 2019 Marcos de Vera Piquero <marcos.devera@quobis.com> -- -- This file is MIT/X11 licensed. -- -- A module to notify non-present members of messages in a group chat -- local id = require"util.id" local st = require"util.stanza" local use_invite = module:get_option_boolean("muc_notification_invite", false) -- Given a stanza, compute if it qualifies as important (notifiable) -- return true for message stanzas with non-empty body -- Should probably use something similar to muc-message-is-historic event local function is_important(stanza) local body = stanza:find("body#") return body and #body end local function handle_muc_message(event) -- event.room and event.stanza are available local room = event.room local stanza = event.stanza for jid, aff in pairs(room._affiliations) do if aff ~= "outcast" then local is_occupant = false for _, occupant in pairs(room._occupants) do if occupant.bare_jid == jid then is_occupant = true break end end if not is_occupant and is_important(stanza) then -- send notification to jid local attrs = { to = jid, id = id.short(), from = room.jid, } local not_attrs = { xmlns = "http://quobis.com/xmpp/muc#push", jid = room.jid, } local reason = "You have messages in group chat "..(room:get_name() or room.jid) local notification = st.message(attrs) :body(reason):up() :tag("notification", not_attrs):up() :tag("no-store", {xmlns = "urn:xmpp:hints"}) local invite = st.message(attrs):tag("x", {xmlns = "http://jabber.org/protocol/muc#user"}) :tag("invite", {from = stanza.attr.from}) :tag("reason"):text(reason):up():up():up() :tag("notification", not_attrs):up() :tag("no-store", {xmlns = "urn:xmpp:hints"}) module:log("debug", "notifying with %s", tostring(use_invite and invite or notification)) module:send(use_invite and invite or notification) module:log("debug", "sent notification of MUC message %s", use_invite and invite or notification) end end end end module:hook("muc-broadcast-message", handle_muc_message) module:log("debug", "Module loaded")
