comparison mod_csi_muc_priorities/mod_csi_muc_priorities.lua @ 3754:d77a61d81555

mod_csi_muc_priorities: Add a high priority list (BC) This changes the default priority to mention-only.
author Kim Alvefur <zash@zash.se>
date Sun, 25 Aug 2019 20:59:05 +0200
parents 2444fb3b05b7
children 569f754bd126
comparison
equal deleted inserted replaced
3753:cf3247ec5e01 3754:d77a61d81555
5 5
6 module:hook("csi-is-stanza-important", function (event) 6 module:hook("csi-is-stanza-important", function (event)
7 local stanza, session = event.stanza, event.session; 7 local stanza, session = event.stanza, event.session;
8 if stanza.name == "message" then 8 if stanza.name == "message" then
9 if stanza.attr.type == "groupchat" then 9 if stanza.attr.type == "groupchat" then
10 local body = stanza:get_child_text("body");
11 if not body then return end
12
13 local room_jid = jid_bare(stanza.attr.from); 10 local room_jid = jid_bare(stanza.attr.from);
14 11
15 local username = session.username; 12 local username = session.username;
16 local priorities = user_sessions[username].csi_muc_priorities; 13 local priorities = user_sessions[username].csi_muc_priorities;
17 14
18 if not priorities or priorities[room_jid] ~= false then 15 if priorities then
19 return nil; 16 local priority = priorities[room_jid];
17 if priority ~= nil then
18 return priority;
19 end
20 end 20 end
21 21
22 -- Look for mention 22 -- Look for mention
23 local rooms = session.rooms_joined; 23 local rooms = session.rooms_joined;
24 if rooms then 24 if rooms then
25 local body = stanza:get_child_text("body");
26 if not body then return end
25 local room_nick = rooms[room_jid]; 27 local room_nick = rooms[room_jid];
26 if room_nick then 28 if room_nick then
27 if body:find(room_nick, 1, true) then 29 if body:find(room_nick, 1, true) then
28 return true; 30 return true;
29 end 31 end
32 -- Your own messages
30 if stanza.attr.from == (room_jid .. "/" .. room_nick) then 33 if stanza.attr.from == (room_jid .. "/" .. room_nick) then
31 return true; 34 return true;
32 end 35 end
33 end 36 end
34 elseif session.directed and session.directed[stanza.attr.from] then
35 -- fallback if no mod_track_muc_joins
36 return true;
37 end 37 end
38 38
39 -- Unimportant and no mention 39 -- Standard importance and no mention, leave to other modules to decide for now
40 return false; 40 return nil;
41 end 41 end
42 end 42 end
43 end); 43 end);
44 44
45 module:depends("adhoc"); 45 module:depends("adhoc");
59 name = "FORM_TYPE"; 59 name = "FORM_TYPE";
60 value = "xmpp:modules.prosody.im/mod_"..module.name; 60 value = "xmpp:modules.prosody.im/mod_"..module.name;
61 }; 61 };
62 { 62 {
63 type = "jid-multi"; 63 type = "jid-multi";
64 name = "important";
65 label = "Higher priority";
66 desc = "Group chats more important to you";
67 };
68 {
69 type = "jid-multi";
64 name = "unimportant"; 70 name = "unimportant";
65 label = "Lower priority"; 71 label = "Lower priority";
66 desc = "E.g. large noisy public channels"; 72 desc = "E.g. large noisy public channels";
67 }; 73 };
68 } 74 }
74 end); 80 end);
75 81
76 local adhoc_command_handler = adhoc_inital_data(priority_settings_form, function (data) 82 local adhoc_command_handler = adhoc_inital_data(priority_settings_form, function (data)
77 local username = jid_split(data.from); 83 local username = jid_split(data.from);
78 local prioritized_jids = user_sessions[username].csi_muc_priorities or store:get(username); 84 local prioritized_jids = user_sessions[username].csi_muc_priorities or store:get(username);
85 local important = {};
79 local unimportant = {}; 86 local unimportant = {};
80 if prioritized_jids then 87 if prioritized_jids then
81 for jid in pairs(prioritized_jids) do 88 for jid, priority in pairs(prioritized_jids) do
82 table.insert(unimportant, jid); 89 if priority then
90 table.insert(important, jid);
91 else
92 table.insert(unimportant, jid);
93 end
83 end 94 end
95 table.sort(important);
84 table.sort(unimportant); 96 table.sort(unimportant);
85 end 97 end
86 return { unimportant = unimportant }; 98 return {
99 important = important;
100 unimportant = unimportant;
101 };
87 end, function(fields, form_err, data) 102 end, function(fields, form_err, data)
88 if form_err then 103 if form_err then
89 return { status = "completed", error = { message = "Problem in submitted form" } }; 104 return { status = "completed", error = { message = "Problem in submitted form" } };
90 end 105 end
91 local prioritized_jids = {}; 106 local prioritized_jids = {};
92 if fields.unimportant then 107 if fields.unimportant then
93 for _, jid in ipairs(fields.unimportant) do 108 for _, jid in ipairs(fields.unimportant) do
94 prioritized_jids[jid] = false; 109 prioritized_jids[jid] = false;
110 end
111 for _, jid in ipairs(fields.important) do
112 prioritized_jids[jid] = true;
95 end 113 end
96 end 114 end
97 115
98 local username = jid_split(data.from); 116 local username = jid_split(data.from);
99 local ok, err = store:set(username, prioritized_jids); 117 local ok, err = store:set(username, prioritized_jids);