Mercurial > prosody-modules
view mod_csi_muc_priorities/mod_csi_muc_priorities.lua @ 5491:7842502c1157
mod_http_debug: Log some extended info about requests
If you point something external at this module, you don't get the
response body back, hence it can be useful to see some details in the
log as well.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 26 May 2023 15:37:15 +0200 |
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"));