浏览代码

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

* Add hook for create lobby

* Remove duplicated code
j8
abora8x8 4 年前
父节点
当前提交
5b89709483
没有帐户链接到提交者的电子邮件
共有 1 个文件被更改,包括 28 次插入7 次删除
  1. 28
    7
      resources/prosody-plugins/mod_muc_lobby_rooms.lua

+ 28
- 7
resources/prosody-plugins/mod_muc_lobby_rooms.lua 查看文件

153
     end
153
     end
154
 end
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
 -- process a host module directly if loaded or hooks to wait for its load
170
 -- process a host module directly if loaded or hooks to wait for its load
157
 function process_host_module(name, callback)
171
 function process_host_module(name, callback)
158
     local function process_host(host)
172
     local function process_host(host)
251
     -- hooks when lobby is enabled to create its room, only done here or by admin
265
     -- hooks when lobby is enabled to create its room, only done here or by admin
252
     host_module:hook('muc-config-submitted', function(event)
266
     host_module:hook('muc-config-submitted', function(event)
253
         local actor, room = event.actor, event.room;
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
         local members_only = event.fields['muc#roomconfig_membersonly'] and true or nil;
272
         local members_only = event.fields['muc#roomconfig_membersonly'] and true or nil;
255
         if members_only then
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
                 event.status_codes['104'] = true;
276
                 event.status_codes['104'] = true;
264
                 notify_lobby_enabled(room, actor, true);
277
                 notify_lobby_enabled(room, actor, true);
265
             end
278
             end
373
     end
386
     end
374
 end
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
 module:hook_global('bosh-session', update_session);
396
 module:hook_global('bosh-session', update_session);
377
 module:hook_global('websocket-session', update_session);
397
 module:hook_global('websocket-session', update_session);
378
 module:hook_global('config-reloaded', load_config);
398
 module:hook_global('config-reloaded', load_config);
399
+module:hook_global('create-lobby-room', handle_create_lobby);

正在加载...
取消
保存