mirror of
https://github.com/bjc/prosody.git
synced 2025-04-04 21:57:45 +03:00
mod_groups: Support for public groups, and extra logging
This commit is contained in:
parent
1fadaf4fa7
commit
78e3f4adf5
1 changed files with 21 additions and 7 deletions
|
@ -1,6 +1,6 @@
|
|||
|
||||
local groups = { default = {} };
|
||||
local members = {};
|
||||
local members = { [false] = {} };
|
||||
|
||||
local groups_file;
|
||||
|
||||
|
@ -14,9 +14,7 @@ function inject_roster_contacts(username, host, roster)
|
|||
local bare_jid = username.."@"..host;
|
||||
if not members[bare_jid] then return; end -- Not a member of any groups
|
||||
|
||||
-- Find groups this JID is a member of
|
||||
for _, group_name in ipairs(members[bare_jid]) do
|
||||
-- Find other people in the same group
|
||||
local function import_jids_to_roster(group_name)
|
||||
for jid in pairs(groups[group_name]) do
|
||||
-- Add them to roster
|
||||
--module:log("debug", "processing jid %s in group %s", tostring(jid), tostring(group_name));
|
||||
|
@ -31,6 +29,16 @@ function inject_roster_contacts(username, host, roster)
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Find groups this JID is a member of
|
||||
for _, group_name in ipairs(members[bare_jid]) do
|
||||
import_jids_to_roster(group_name);
|
||||
end
|
||||
|
||||
-- Import public groups
|
||||
for _, group_name in ipairs(members[false]) do
|
||||
import_jids_to_roster(group_name);
|
||||
end
|
||||
end
|
||||
|
||||
function remove_virtual_contacts(username, host, datastore, data)
|
||||
|
@ -55,16 +63,22 @@ function module.load()
|
|||
datamanager.add_callback(remove_virtual_contacts);
|
||||
|
||||
groups = { default = {} };
|
||||
|
||||
members = { [false] = {} };
|
||||
local curr_group = "default";
|
||||
for line in io.lines(groups_file) do
|
||||
if line:match("^%[%w+%]$") then
|
||||
curr_group = line:match("^%[(%w+)%]$");
|
||||
if line:match("^%s*%[.-%]%s*$") then
|
||||
curr_group = line:match("^%s*%[(.-)%]%s*$");
|
||||
if curr_group:match("^%+") then
|
||||
curr_group = curr_group:gsub("^%+", "");
|
||||
members[false][#members[false]+1] = curr_group; -- Is a public group
|
||||
end
|
||||
module:log("debug", "New group: %s", tostring(curr_group));
|
||||
groups[curr_group] = groups[curr_group] or {};
|
||||
else
|
||||
-- Add JID
|
||||
local jid = jid_prep(line);
|
||||
if jid then
|
||||
module:log("debug", "New member of %s: %s", tostring(curr_group), tostring(jid));
|
||||
groups[curr_group][jid] = true;
|
||||
members[jid] = members[jid] or {};
|
||||
members[jid][#members[jid]+1] = curr_group;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue