Browse Source

Add hook for creating lobby before participants join (#7273)

* Add hook for create lobby

* Remove duplicated code
master^2
abora8x8 4 years ago
parent
commit
5b89709483
No account linked to committer's email address
1 changed files with 28 additions and 7 deletions
  1. 28
    7
      resources/prosody-plugins/mod_muc_lobby_rooms.lua

+ 28
- 7
resources/prosody-plugins/mod_muc_lobby_rooms.lua View File

@@ -153,6 +153,20 @@ function filter_session(session)
153 153
     end
154 154
 end
155 155
 
156
+function attach_lobby_room(room)
157
+    local node = jid_split(room.jid);
158
+    local lobby_room_jid = node .. '@' .. lobby_muc_component_config;
159
+    if not lobby_muc_service.get_room_from_jid(lobby_room_jid) then
160
+        local new_room = lobby_muc_service.create_room(lobby_room_jid);
161
+        module:log("debug","Lobby room jid = %s created",lobby_room_jid);
162
+        new_room.main_room = room;
163
+        room._data.lobbyroom = new_room;
164
+        room:save(true);
165
+        return true
166
+    end
167
+    return false
168
+end
169
+
156 170
 -- process a host module directly if loaded or hooks to wait for its load
157 171
 function process_host_module(name, callback)
158 172
     local function process_host(host)
@@ -251,15 +265,14 @@ process_host_module(main_muc_component_config, function(host_module, host)
251 265
     -- hooks when lobby is enabled to create its room, only done here or by admin
252 266
     host_module:hook('muc-config-submitted', function(event)
253 267
         local actor, room = event.actor, event.room;
268
+        local actor_node = jid_split(actor);
269
+        if actor_node == 'focus' then
270
+            return;
271
+        end
254 272
         local members_only = event.fields['muc#roomconfig_membersonly'] and true or nil;
255 273
         if members_only then
256
-            local node = jid_split(room.jid);
257
-
258
-            local lobby_room_jid = node .. '@' .. lobby_muc_component_config;
259
-            if not lobby_muc_service.get_room_from_jid(lobby_room_jid) then
260
-                local new_room = lobby_muc_service.create_room(lobby_room_jid);
261
-                new_room.main_room = room;
262
-                room._data.lobbyroom = new_room;
274
+            local lobby_created = attach_lobby_room(room);
275
+            if lobby_created then
263 276
                 event.status_codes['104'] = true;
264 277
                 notify_lobby_enabled(room, actor, true);
265 278
             end
@@ -373,6 +386,14 @@ function update_session(event)
373 386
     end
374 387
 end
375 388
 
389
+function handle_create_lobby(event)
390
+    local room = event.room;
391
+    room:set_members_only(true);
392
+    module:log("info","Set room jid = %s as members only",room.jid);
393
+    attach_lobby_room(room)
394
+end
395
+
376 396
 module:hook_global('bosh-session', update_session);
377 397
 module:hook_global('websocket-session', update_session);
378 398
 module:hook_global('config-reloaded', load_config);
399
+module:hook_global('create-lobby-room', handle_create_lobby);

Loading…
Cancel
Save