view mod_muc_notifications/mod_muc_notifications.lua @ 6217:694f8fab07d4

: mod_sasl2*** : Update Compability for all of them diff --git a/mod_sasl2/README.md b/mod_sasl2/README.md --- a/mod_sasl2/README.md +++ b/mod_sasl2/README.md @@ -31,6 +31,7 @@ This module requires Prosody **trunk** a Prosody Version Status ----------------------- ---------------- - trunk as of 2024-11-24 Works + trunk as of 2025-05-25 Works + 0.13 Works 0.12 Does not work ----------------------- ---------------- diff --git a/mod_sasl2_bind2/README.md b/mod_sasl2_bind2/README.md --- a/mod_sasl2_bind2/README.md +++ b/mod_sasl2_bind2/README.md @@ -16,5 +16,6 @@ This module depends on [mod_sasl2]. It e Prosody-Version Status --------------- ---------------------- - trunk Works as of 2024-12-21 + trunk Works as of 2025-05-25 + 0.13 Works 0.12 Does not work diff --git a/mod_sasl2_fast/README.md b/mod_sasl2_fast/README.md --- a/mod_sasl2_fast/README.md +++ b/mod_sasl2_fast/README.md @@ -33,5 +33,6 @@ clients being logged out unexpectedly. Prosody-Version Status --------------- ---------------------- - trunk Works as of 2024-12-21 + trunk Works as of 2025-05-25 + 0.13 Work 0.12 Does not work diff --git a/mod_sasl2_sm/README.md b/mod_sasl2_sm/README.md --- a/mod_sasl2_sm/README.md +++ b/mod_sasl2_sm/README.md @@ -17,5 +17,6 @@ configuration options. Prosody-Version Status --------------- ---------------------- - trunk Works as of 2024-12-21 + trunk Works as of 2025-05-25 + 0.13 Work 0.12 Does not work diff --git a/mod_sasl_ssdp/README.md b/mod_sasl_ssdp/README.md --- a/mod_sasl_ssdp/README.md +++ b/mod_sasl_ssdp/README.md @@ -18,8 +18,8 @@ There are no configuration options for t # Compatibility -For SASL2 (XEP-0388) clients, it is compatible with the mod_sasl2 community module. - -For clients using RFC 6120 SASL, it requires Prosody trunk 33e5edbd6a4a or -later. It is not compatible with Prosody 0.12 (it will load, but simply -won't do anything) for "legacy SASL". + Prosody-Version Status + --------------- ---------------------- + trunk Works as of 2025-05-25 + 0.13 Works + 0.12 Does not work
author Menel <menel@snikket.de>
date Mon, 12 May 2025 11:07:45 +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")