diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 858223f07d..50ae9b25f6 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -97,6 +97,10 @@ function onConnection(socket) { socket.on('disconnect', () => { onDisconnect(socket); }); + + socket.on('disconnecting', () => { + onDisconnecting(socket); + }); } function onDisconnect(socket) { @@ -104,6 +108,19 @@ function onDisconnect(socket) { plugins.hooks.fire('action:sockets.disconnect', { socket: socket }); } +async function onDisconnecting(socket) { + if (socket.uid > 0) { + for (const roomName of socket.rooms) { + if (roomName.startsWith('chat_room') && !roomName.includes('public')) { + Sockets.server.in(roomName).emit('event:chats.user-online', { + uid: socket.uid, + state: 0, + }); + } + } + } +} + async function onConnect(socket) { try { await validateSession(socket, '[[error:invalid-session]]');