Mercurial > prosody-modules
comparison mod_groups_internal/mod_groups_internal.lua @ 5822:fe3bde6ef95a
mod_groups_internal: Sync MUC affiliations for multi-MUC groups
This was overlooked when multi-MUC support was added.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 12 Jan 2024 15:38:56 +0000 |
parents | c9279845fc41 |
children | f1e816df1f73 |
comparison
equal
deleted
inserted
replaced
5821:c9279845fc41 | 5822:fe3bde6ef95a |
---|---|
224 return nil, "group-not-found"; | 224 return nil, "group-not-found"; |
225 end | 225 end |
226 if not group_memberships:set(group_id, username, {}) then | 226 if not group_memberships:set(group_id, username, {}) then |
227 return nil, "internal-server-error"; | 227 return nil, "internal-server-error"; |
228 end | 228 end |
229 | |
229 if group_info.muc_jid then | 230 if group_info.muc_jid then |
230 local room = muc_host.get_room_from_jid(group_info.muc_jid); | 231 local room = muc_host.get_room_from_jid(group_info.muc_jid); |
231 if room then | 232 if room then |
232 local user_jid = username .. "@" .. host; | 233 local user_jid = username .. "@" .. host; |
233 room:set_affiliation(true, user_jid, "member"); | 234 room:set_affiliation(true, user_jid, "member"); |
239 }):up()); | 240 }):up()); |
240 module:log("debug", "set user %s to be member in %s and sent invite", username, group_info.muc_jid); | 241 module:log("debug", "set user %s to be member in %s and sent invite", username, group_info.muc_jid); |
241 else | 242 else |
242 module:log("warn", "failed to update affiliation for %s in %s", username, group_info.muc_jid); | 243 module:log("warn", "failed to update affiliation for %s in %s", username, group_info.muc_jid); |
243 end | 244 end |
244 end | 245 elseif group_info.mucs then |
246 local user_jid = username .. "@" .. host; | |
247 for i = #group_info.mucs, 1, -1 do | |
248 local muc_jid = group_info.mucs[i]; | |
249 local room = muc_host.get_room_from_jid(muc_jid); | |
250 if not room then | |
251 -- MUC no longer available, for some reason | |
252 -- Let's remove it from the circle metadata... | |
253 table.remove(group_info.mucs, i); | |
254 group_info_store:set_key(group_id, "mucs", group_info.mucs); | |
255 else | |
256 room:set_affiliation(true, user_jid, "member"); | |
257 module:send(st.message( | |
258 { from = muc_jid, to = user_jid } | |
259 ):tag("x", { | |
260 xmlns = "jabber:x:conference", | |
261 jid = muc_jid | |
262 }):up()); | |
263 module:log("debug", "set user %s to be member in %s and sent invite", username, muc_jid); | |
264 end | |
265 end | |
266 end | |
267 | |
245 module:fire_event( | 268 module:fire_event( |
246 "group-user-added", | 269 "group-user-added", |
247 { | 270 { |
248 id = group_id, | 271 id = group_id, |
249 user = username, | 272 user = username, |
271 local user_jid = username .. "@" .. host; | 294 local user_jid = username .. "@" .. host; |
272 room:set_affiliation(true, user_jid, nil); | 295 room:set_affiliation(true, user_jid, nil); |
273 else | 296 else |
274 module:log("warn", "failed to update affiliation for %s in %s", username, group_info.muc_jid); | 297 module:log("warn", "failed to update affiliation for %s in %s", username, group_info.muc_jid); |
275 end | 298 end |
276 end | 299 elseif group_info.mucs then |
300 local user_jid = username .. "@" .. host; | |
301 for _, muc_jid in ipairs(group_info.mucs) do | |
302 local room = muc_host.get_room_from_jid(muc_jid); | |
303 if room then | |
304 room:set_affiliation(true, user_jid, nil); | |
305 else | |
306 module:log("warn", "failed to update affiliation for %s in %s", username, muc_jid); | |
307 end | |
308 end | |
309 end | |
310 | |
277 module:fire_event( | 311 module:fire_event( |
278 "group-user-removed", | 312 "group-user-removed", |
279 { | 313 { |
280 id = group_id, | 314 id = group_id, |
281 user = username, | 315 user = username, |
298 local muc_jid, room = _create_muc_room(name); | 332 local muc_jid, room = _create_muc_room(name); |
299 if not muc_jid then return nil, room; end | 333 if not muc_jid then return nil, room; end |
300 room:save(); -- This ensures the room is committed to storage | 334 room:save(); -- This ensures the room is committed to storage |
301 | 335 |
302 table.insert(mucs, muc_jid); | 336 table.insert(mucs, muc_jid); |
337 | |
303 if group_info.muc_jid then -- COMPAT include old muc_jid into array | 338 if group_info.muc_jid then -- COMPAT include old muc_jid into array |
304 table.insert(mucs, group_info.muc_jid); | 339 table.insert(mucs, group_info.muc_jid); |
305 end | 340 end |
306 local store_ok, store_err = group_info_store:set_key(group_id, "mucs", mucs); | 341 local store_ok, store_err = group_info_store:set_key(group_id, "mucs", mucs); |
307 if not store_ok then | 342 if not store_ok then |