From d07e1b38b16ac8102e285f21ec54877fec71a485 Mon Sep 17 00:00:00 2001 From: zefie Date: Mon, 16 Jun 2025 22:53:44 -0400 Subject: [PATCH] implement +Z kick via service mode --- zefie_wtvp_minisrv/includes/classes/WTVIRC.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/zefie_wtvp_minisrv/includes/classes/WTVIRC.js b/zefie_wtvp_minisrv/includes/classes/WTVIRC.js index 2be00a59..5829bd66 100644 --- a/zefie_wtvp_minisrv/includes/classes/WTVIRC.js +++ b/zefie_wtvp_minisrv/includes/classes/WTVIRC.js @@ -924,6 +924,19 @@ class WTVIRC { this.channelkeys.delete(targetUniqueId); } this.channelmodes.set(targetUniqueId, chan_modes); + } else if (flags[i] === '+Z' && this.kick_insecure_on_z) { + // Kick users who do not have user mode +z + const usersInChannel = this.channels.get(targetUniqueId) || new Set(); + for (const user of usersInChannel) { + const userModes = this.usermodes.get(user) || []; + const userSocket = Array.from(this.nicknames.keys()).find(s => this.nicknames.get(s) === user); + if (userSocket && !userModes.includes('z')) { + userSocket.write(`:${nickname}!${username}@${socket.host} KICK ${targetUniqueId} ${userSocket.nickname} :Channel is now +Z (SSL-only, +z usermode required)\r\n`); + this.broadcastChannel(targetUniqueId, `:${nickname}!${username}@${socket.host} KICK ${targetUniqueId} ${userSocket.nickname} :Channel is now +Z (SSL-only, +z usermode required)\r\n`, userSocket); + this.broadcastToAllServers(`:${socket.uniqueId} KICK ${targetUniqueId} ${userSocket.uniqueId} :Channel is now +Z (SSL-only, +z usermode required)\r\n`); + this.channels.get(targetUniqueId).delete(user); + } + } } paramIndex++; }