From 7f38f4d714fa9460d293c6c7d6fa1e91130aaaa2 Mon Sep 17 00:00:00 2001 From: zefie Date: Tue, 17 Jun 2025 00:23:28 -0400 Subject: [PATCH] allow mask search for /who --- zefie_wtvp_minisrv/includes/classes/WTVIRC.js | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/zefie_wtvp_minisrv/includes/classes/WTVIRC.js b/zefie_wtvp_minisrv/includes/classes/WTVIRC.js index 486490e8..1a836d2f 100644 --- a/zefie_wtvp_minisrv/includes/classes/WTVIRC.js +++ b/zefie_wtvp_minisrv/includes/classes/WTVIRC.js @@ -2116,19 +2116,22 @@ class WTVIRC { socket.write(`:${this.servername} 315 ${socket.nickname} ${target} :End of /WHO list\r\n`); } else { // WHO for nickname - let found = false; - for (const [sock, nick] of this.nicknames.entries()) { - if (nick.toLowerCase() === target.toLowerCase()) { - found = true; - socket.write(`:${this.servername} 352 ${socket.nickname} * ${nick} ${sock.host} ${this.servername} ${nick} H :0 ${nick}\r\n`); - break; + if (target.includes('*') || target.includes('?')) { + // Wildcard mask search for nicknames + const maskRegex = new RegExp('^' + target.replace(/\*/g, '.*').replace(/\?/g, '.') + '$', 'i'); + let found = false; + for (const [sock, nick] of this.nicknames.entries()) { + if (maskRegex.test(nick)) { + found = true; + socket.write(`:${this.servername} 352 ${socket.nickname} * ${nick} ${sock.host} ${this.servername} ${nick} H :0 ${nick}\r\n`); + } } + if (!found) { + 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; } - if (!found) { - 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; case 'PRIVMSG':