From 92c26a02b0fe0f3537393306a25982ae99af59ec Mon Sep 17 00:00:00 2001 From: zefie Date: Tue, 17 Jun 2025 00:27:29 -0400 Subject: [PATCH] fix WHO :D --- zefie_wtvp_minisrv/includes/classes/WTVIRC.js | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/zefie_wtvp_minisrv/includes/classes/WTVIRC.js b/zefie_wtvp_minisrv/includes/classes/WTVIRC.js index 1a836d2f..0451277b 100644 --- a/zefie_wtvp_minisrv/includes/classes/WTVIRC.js +++ b/zefie_wtvp_minisrv/includes/classes/WTVIRC.js @@ -2122,6 +2122,10 @@ class WTVIRC { let found = false; for (const [sock, nick] of this.nicknames.entries()) { if (maskRegex.test(nick)) { + const usermodes = this.usermodes.get(nick) || []; + if (usermodes.includes('s')) { + continue; + } found = true; socket.write(`:${this.servername} 352 ${socket.nickname} * ${nick} ${sock.host} ${this.servername} ${nick} H :0 ${nick}\r\n`); } @@ -2131,6 +2135,23 @@ class WTVIRC { } socket.write(`:${this.servername} 315 ${socket.nickname} ${target} :End of /WHO list\r\n`); break; + } else { + const whoisSocket = Array.from(this.nicknames.keys()).find( + s => this.nicknames.get(s).toLowerCase() === target.toLowerCase() + ); + if (whoisSocket) { + const usermodes = this.usermodes.get(whoisSocket.nickname) || []; + if (usermodes.includes('s')) { + // Skip invisible users + socket.write(`:${this.servername} 315 ${socket.nickname} ${target} :End of /WHO list\r\n`); + break; + } + socket.write(`:${this.servername} 352 ${socket.nickname} * ${whoisSocket.nickname} ${whoisSocket.host} ${this.servername} ${whoisSocket.nickname} H :0 ${whoisSocket.nickname}\r\n`); + } else { + socket.write(`:${this.servername} 401 ${socket.nickname} ${target} :No such nick/channel\r\n`); + } + socket.write(`:${this.servername} 315 ${socket.nickname} ${target} :End of /WHO list\r\n`); + break; } } break;