only reserve nicks if not reserved already

This commit is contained in:
zefie
2025-06-22 21:55:41 -04:00
parent d46de27a5e
commit 0a1c412df1

View File

@@ -483,7 +483,9 @@ class WTVIRC {
const expiry = parseInt(parts[2]) || 0; const expiry = parseInt(parts[2]) || 0;
const reservedNick = parts[3]; const reservedNick = parts[3];
var reason = parts.slice(4).join(' ') || ''; var reason = parts.slice(4).join(' ') || '';
this.reservednicks.push(reservedNick); if (!this.reservednicks.includes(reservedNick)) {
this.reservednicks.push(reservedNick);
}
if (expiry > 0) { if (expiry > 0) {
setTimeout(() => { setTimeout(() => {
const index = this.reservednicks.indexOf(reservedNick); const index = this.reservednicks.indexOf(reservedNick);
@@ -765,8 +767,8 @@ class WTVIRC {
if (serverUsers && typeof serverUsers.delete === 'function') { if (serverUsers && typeof serverUsers.delete === 'function') {
const nickToRemove = this.findUserByUniqueId(sourceUniqueId); const nickToRemove = this.findUserByUniqueId(sourceUniqueId);
serverUsers.delete(nickToRemove); serverUsers.delete(nickToRemove);
this.cleanupUserSession(nickToRemove);
} }
this.cleanupUserSession(user_name);
await this.broadcastToAllServers(`:${nickname}!${user_name}@${this.servername} QUIT :${message}\r\n`, socket); await this.broadcastToAllServers(`:${nickname}!${user_name}@${this.servername} QUIT :${message}\r\n`, socket);
break; break;
case 'JOIN': case 'JOIN':
@@ -2984,16 +2986,17 @@ class WTVIRC {
socket.signedoff = true; // Just in case socket.signedoff = true; // Just in case
} }
if (socket.isserver) { if (socket.isserver) {
for (const [srvSocket, users] of this.serverusers.entries()) { const srvUsers = this.serverusers.get(socket) || [];
if (srvSocket === socket) { for (const nickname of srvUsers) {
for (const nickname of users) { // Remove all user data for this server
// Remove all user data for this server this.debugLog('debug', `Removing user ${nickname} from server ${socket.servername}`);
this.cleanupUserSession(nickname); if (users && typeof users.delete === 'function') {
} users.delete(nickname);
} }
this.cleanupUserSession(nickname);
} }
this.servers.filter(s => s !== socket); this.servers.delete(socket);
this.serverusers.filter(s => s !== socket); this.serverusers.delete(socket);
} else { } else {
this.clients.filter(c => c !== socket); this.clients.filter(c => c !== socket);
} }