Mercurial > prosody-modules
comparison mod_roster_allinall/mod_roster_allinall.lua @ 1545:a104a159697d
mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 05 Nov 2014 12:12:49 +0100 |
parents | |
children | 3ae8c81a348b |
comparison
equal
deleted
inserted
replaced
1544:814398c7139b | 1545:a104a159697d |
---|---|
1 local rostermanager = require"core.rostermanager"; | |
2 local jid_join = require"util.jid".join; | |
3 local jid_split = require"util.jid".split; | |
4 local host = module.host; | |
5 local sessions = hosts[host].sessions; | |
6 | |
7 -- Make a *one-way* subscription. User will see when contact is online, | |
8 -- contact will not see when user is online. | |
9 local function subscribe(user, contact) | |
10 local user_jid, contact_jid = jid_join(user, host), jid_join(contact, host); | |
11 | |
12 -- Update user's roster to say subscription request is pending... | |
13 rostermanager.set_contact_pending_out(user, host, contact_jid); | |
14 -- Update contact's roster to say subscription request is pending... | |
15 rostermanager.set_contact_pending_in(contact, host, user_jid); | |
16 -- Update contact's roster to say subscription request approved... | |
17 rostermanager.subscribed(contact, host, user_jid); | |
18 -- Update user's roster to say subscription request approved... | |
19 rostermanager.process_inbound_subscription_approval(user, host, contact_jid); | |
20 | |
21 rostermanager.roster_push(user, host, contact_jid); | |
22 rostermanager.roster_push(contact, host, user_jid); | |
23 end | |
24 | |
25 | |
26 module:hook("resource-bind", function(event) | |
27 local session = event.session; | |
28 local roster = session.roster; | |
29 local user = session.username; | |
30 local user_jid = jid_join(user, host); | |
31 local contact_jid; | |
32 for contact, contact_session in pairs(sessions) do | |
33 if contact ~= user then | |
34 contact_jid = jid_join(contact, host); | |
35 if not rostermanager.is_contact_subscribed(user, host, contact_jid) then | |
36 subscribe(contact, user); | |
37 end | |
38 if not rostermanager.is_contact_subscribed(contact, host, user_jid) then | |
39 subscribe(user, contact); | |
40 end | |
41 end | |
42 end | |
43 end); | |
44 |