From 960e3306e467110e61c9122580c333578717dd17 Mon Sep 17 00:00:00 2001 From: Izan Gil <66965250+SrIzan10@users.noreply.github.com> Date: Fri, 6 Mar 2026 23:42:20 +0100 Subject: [PATCH] chore(chat): exclude chat grants from adding numbers to viewer count --- apps/chat/src/index.ts | 18 ++++++++++++------ apps/chat/src/types/chat.ts | 2 ++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/apps/chat/src/index.ts b/apps/chat/src/index.ts index 7ceba1b..e49d105 100644 --- a/apps/chat/src/index.ts +++ b/apps/chat/src/index.ts @@ -436,6 +436,7 @@ app.get( socket.personalChannel = personalChannel; socket.viewerId = randomString(10); socket.isModerator = isModerator; + socket.excludeFromViewerCount = Boolean(dbGrant); socketState.targetUsername = username; socketState.channelId = channel.id; @@ -443,6 +444,7 @@ app.get( socketState.personalChannel = personalChannel; socketState.viewerId = socket.viewerId; socketState.isModerator = isModerator; + socketState.excludeFromViewerCount = Boolean(dbGrant); socket.send( JSON.stringify({ @@ -497,7 +499,9 @@ app.get( if (!streamInfo) return; - await redis.del(`viewer:${socketState.targetUsername}:${socketState.viewerId}`); + if (!socketState.excludeFromViewerCount) { + await redis.del(`viewer:${socketState.targetUsername}:${socketState.viewerId}`); + } }, async onMessage(evt, ws) { try { @@ -506,11 +510,13 @@ app.get( const msg = JSON.parse(evt.data.toString()) as IncomingMessage; if (msg.type === 'ping') { - await redis.setex( - `viewer:${socketState.targetUsername}:${socketState.viewerId}`, - 30, - '1' - ); + if (!socketState.excludeFromViewerCount) { + await redis.setex( + `viewer:${socketState.targetUsername}:${socketState.viewerId}`, + 30, + '1' + ); + } socket.send(JSON.stringify({ type: 'pong' })); return; } diff --git a/apps/chat/src/types/chat.ts b/apps/chat/src/types/chat.ts index c68c184..54a6f30 100644 --- a/apps/chat/src/types/chat.ts +++ b/apps/chat/src/types/chat.ts @@ -39,6 +39,7 @@ export interface ChatSocket { personalChannel?: any; viewerId?: string; isModerator?: boolean; + excludeFromViewerCount?: boolean; raw?: | (ModifiedWebSocket & { targetUsername?: string; @@ -46,6 +47,7 @@ export interface ChatSocket { chatUser?: ChatUser | null; personalChannel?: any; isModerator?: boolean; + excludeFromViewerCount?: boolean; }) | null; }