Mercurial > prosody-modules
view mod_csi_muc_priorities/mod_csi_muc_priorities.lua @ 5243:d5dc8edb2695
mod_http_oauth2: Use more compact IDs
UUIDs are nice but so verbose!
The reduction in entropy for the nonce should be fine since the
timestamp is also counts towards this, and it changes every second
(modulo clock shenanigans), so the chances of someone managing to get
the same client_secret by registering with the same information at the
same time as another entity should be negligible.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 11 Mar 2023 22:46:27 +0100 |
parents | 1b68954a743a |
children |
line wrap: on
line source
local jid_bare, jid_split = import("util.jid", "bare", "split"); -- luacheck: ignore 122 local user_sessions = prosody.hosts[module.host].sessions; module:hook("csi-is-stanza-important", function (event) local stanza, session = event.stanza, event.session; if stanza.name == "message" then if stanza.attr.type == "groupchat" then local room_jid = jid_bare(stanza.attr.from); 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 local body = stanza:get_child_text("body"); if not body then return end local room_nick = rooms[room_jid]; if room_nick then if body:find(room_nick, 1, true) then event.reason = "muc mention"; return true; end -- Your own messages if stanza.attr.from == (room_jid .. "/" .. room_nick) then event.reason = "muc own message"; return true; end end end -- Standard importance and no mention, leave to other modules to decide for now return nil; end end end); module:depends("adhoc"); local dataform = require"util.dataforms"; local adhoc_inital_data = require "util.adhoc".new_initial_data_form; local instructions = [[ These settings affect battery optimizations performed by the server while your client has indicated that it is inactive. ]] local priority_settings_form = dataform.new { title = "Prioritize addresses of group chats"; instructions = instructions; { type = "hidden"; name = "FORM_TYPE"; value = "xmpp:modules.prosody.im/mod_"..module.name; }; { type = "jid-multi"; name = "important"; label = "Higher priority"; desc = "Group chats more important to you"; }; { type = "jid-multi"; name = "unimportant"; label = "Lower priority"; desc = "E.g. large noisy public channels"; }; } local store = module:open_store(); module:hook("resource-bind", function (event) local username = event.session.username; user_sessions[username].csi_muc_priorities = store:get(username); end); local adhoc_command_handler = adhoc_inital_data(priority_settings_form, function (data) local username = jid_split(data.from); local prioritized_jids = user_sessions[username].csi_muc_priorities or store:get(username); local important = {}; local unimportant = {}; if prioritized_jids then for jid, priority in pairs(prioritized_jids) do if priority then table.insert(important, jid); else table.insert(unimportant, jid); end end table.sort(important); table.sort(unimportant); end return { important = important; unimportant = unimportant; }; end, function(fields, form_err, data) if form_err then return { status = "completed", error = { message = "Problem in submitted form" } }; 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 end end local username = jid_split(data.from); local ok, err = store:set(username, prioritized_jids); if ok then user_sessions[username].csi_muc_priorities = prioritized_jids; return { status = "completed", info = "Priorities updated" }; else return { status = "completed", error = { message = "Error saving priorities: "..err } }; end end); module:add_item("adhoc", module:require "adhoc".new("Configure group chat priorities", "xmpp:modules.prosody.im/mod_"..module.name, adhoc_command_handler, "local_user"));