Software /
code /
prosody-modules
Diff
mod_csi_muc_priorities/mod_csi_muc_priorities.lua @ 6208:e20901443eae draft
Merge
author | Trần H. Trung <xmpp:trần.h.trung@trung.fun> |
---|---|
date | Mon, 17 Mar 2025 23:42:11 +0700 |
parent | 4014:1b68954a743a |
child | 6211:750d64c47ec6 |
line wrap: on
line diff
--- a/mod_csi_muc_priorities/mod_csi_muc_priorities.lua Wed Feb 26 19:36:35 2025 +0700 +++ b/mod_csi_muc_priorities/mod_csi_muc_priorities.lua Mon Mar 17 23:42:11 2025 +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 @@ -108,17 +136,18 @@ end local prioritized_jids = {}; if fields.unimportant then - if fields.unimportant then - for _, jid in ipairs(fields.unimportant) do - prioritized_jids[jid] = false; - end - end - if fields.important then - for _, jid in ipairs(fields.important) do - prioritized_jids[jid] = true; - end + for _, jid in ipairs(fields.unimportant) do + prioritized_jids[jid] = false; end end + if fields.important then + for _, jid in ipairs(fields.important) do + prioritized_jids[jid] = true; + 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);