allow mask search for /who

This commit is contained in:
zefie
2025-06-17 00:23:28 -04:00
parent 117e14ddff
commit 7f38f4d714

View File

@@ -2116,19 +2116,22 @@ class WTVIRC {
socket.write(`:${this.servername} 315 ${socket.nickname} ${target} :End of /WHO list\r\n`); socket.write(`:${this.servername} 315 ${socket.nickname} ${target} :End of /WHO list\r\n`);
} else { } else {
// WHO for nickname // WHO for nickname
let found = false; if (target.includes('*') || target.includes('?')) {
for (const [sock, nick] of this.nicknames.entries()) { // Wildcard mask search for nicknames
if (nick.toLowerCase() === target.toLowerCase()) { const maskRegex = new RegExp('^' + target.replace(/\*/g, '.*').replace(/\?/g, '.') + '$', 'i');
found = true; let found = false;
socket.write(`:${this.servername} 352 ${socket.nickname} * ${nick} ${sock.host} ${this.servername} ${nick} H :0 ${nick}\r\n`); for (const [sock, nick] of this.nicknames.entries()) {
break; 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; break;
case 'PRIVMSG': case 'PRIVMSG':