Here is the patch for mod_csi_muc_priorities to allow for specifying to
default to low priority mucs that I have been working on in the Prosody
Developer chatroom. I tried to document as much as I could in the patch
and updated the documentation, but let me know if you have any testing
or feedback.
--
You received this message because you are subscribed to the Google Groups
"prosody-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/prosody-dev/031fab65-ca1e-4246-8417-3d4bcdbe25e6%40jmad.org.
# HG changeset patch
# User aereaux <[email protected]>
# Date 1727017989 25200
# Sun Sep 22 08:13:09 2024 -0700
# Node ID 0ad0d21b2c01fba2ac61520113277c4d697ffcf0
# Parent bdfb0ed563992e71299a95e71680772c36ac4977
mod_csi_muc_priorities: Allow setting the default priority for mucs to low
Move the priority checking after the mention check so that if there is a
mention we return true.
Add an option to the form to set the default priority to low.
Return `nil` in cases where we determite that the priority should be high, as
with `mod_csi_simple` this causes normal MUC messages to be marked important
while allowing mod_csi_grace_period and unneeded messages to be queued.
diff -r bdfb0ed56399 -r 0ad0d21b2c01 mod_csi_muc_priorities/README.markdown
--- a/mod_csi_muc_priorities/README.markdown Fri Sep 20 18:47:59 2024 +0200
+++ b/mod_csi_muc_priorities/README.markdown Sun Sep 22 08:13:09 2024 -0700
@@ -1,7 +1,7 @@
# Introduction
This module lets users specify which of the group chats they are in are
-less important. This influences when
+more or less important. This influences when
[mod_csi_simple][doc:modules:mod_csi_simple] decides to send
stanzas vs waiting until there is more to send. Users in many large
public channels might benefit from this.
@@ -12,16 +12,17 @@
chat priorities* that should appear in the menus of compatible clients.
The command presents a form that accepts a list of XMPP addresses.
-Currently there is a single priority, *Lower priority*, which is
-suitable for e.g. noisy public channels. mod_csi_simple considers
-groupchat messages important by default on the assumptions that smaller
-and more important private chats are more common among most users.
+Currently you can specify channels as lower priority (which is suitable
+for e.g. noisy public channels) or higher priority (which is suitable
+for e.g. small private channels where immediate message delivery is
+desired). You can also specify whether mucs default to lower priority
+or not.
-A message of type groupchat from an address in this list will not be
-considered important enough to send it to an inactive client, unless it
-is from the current user or mentions of their nickname. **Note** that
-mention support require the separate module [mod_track_muc_joins]
-to also be loaded.
+A message of type groupchat from an address in the low priority list will
+not be considered important enough to send it to an inactive client,
+unless it is from the current user or mentions of their nickname.
+**Note** that mention support require the separate module
+[mod_track_muc_joins] to also be loaded.
``` {.lua}
modules_enabled = {
diff -r bdfb0ed56399 -r 0ad0d21b2c01 mod_csi_muc_priorities/mod_csi_muc_priorities.lua
--- a/mod_csi_muc_priorities/mod_csi_muc_priorities.lua Fri Sep 20 18:47:59 2024 +0200
+++ b/mod_csi_muc_priorities/mod_csi_muc_priorities.lua Sun Sep 22 08:13:09 2024 -0700
@@ -12,14 +12,6 @@
local username = session.username;
local priorities = user_sessions[username].csi_muc_priorities;
- if priorities then
- local priority = priorities[room_jid];
- if priority ~= nil then
- event.reason = "muc priority";
- return priority;
- end
- end
-
-- Look for mention
local rooms = session.rooms_joined;
if rooms then
@@ -33,12 +25,33 @@
end
-- Your own messages
if stanza.attr.from == (room_jid .. "/" .. room_nick) then
- event.reason = "muc own message";
+ event.reason = "muc own message";
return true;
end
end
end
+ -- No mentions found, check other logic:
+ -- deflaultlow=f or nil defaultlow=t
+ -- in high prio nil nil
+ -- in low prio false false
+ -- not in either nil false
+ --
+ -- true means: important (always send immediately)
+ -- nil means: normal (respect other mods for stuff like grace period/reactions/etc)
+ -- false means: unimportant (delay sending)
+ if priorities then
+ local priority = priorities[room_jid];
+ if priority == false then -- low priority
+ event.reason = "muc priority";
+ return false;
+ end
+ if priorities[false] and priorities[false]["defaultlow"] and not priority then -- defaultlow is false or nil or not high priority
+ event.reason = "muc user default low";
+ return false;
+ end
+ end
+
-- Standard importance and no mention, leave to other modules to decide for now
return nil;
end
@@ -74,6 +87,12 @@
label = "Lower priority";
desc = "E.g. large noisy public channels";
};
+ {
+ type = "boolean";
+ name = "defaultlow";
+ label = "Default to lower priority";
+ desc = "Mark all channels lower priority as default";
+ };
}
local store = module:open_store();
@@ -87,20 +106,29 @@
local prioritized_jids = user_sessions[username].csi_muc_priorities or store:get(username);
local important = {};
local unimportant = {};
+ local defaultlow = false; -- Default to high priority
if prioritized_jids then
for jid, priority in pairs(prioritized_jids) do
- if priority then
- table.insert(important, jid);
- else
- table.insert(unimportant, jid);
+ if jid then
+ if priority then
+ table.insert(important, jid);
+ else
+ table.insert(unimportant, jid);
+ end
end
end
table.sort(important);
table.sort(unimportant);
+
+ if prioritized_jids[false] then
+ defaultlow = prioritized_jids[false]["defaultlow"];
+ end
end
+
return {
important = important;
unimportant = unimportant;
+ defaultlow = defaultlow
};
end, function(fields, form_err, data)
if form_err then
@@ -118,6 +146,9 @@
end
end
+ local misc_data = {defaultlow = fields.defaultlow};
+ prioritized_jids[false] = misc_data;
+
local username = jid_split(data.from);
local ok, err = store:set(username, prioritized_jids);
if ok then