dont repeat messages if user is in multiple channels together

This commit is contained in:
zefie
2025-06-20 23:35:12 -04:00
parent 54faaa888a
commit fbbe4ed8ba

View File

@@ -3004,12 +3004,17 @@ class WTVIRC {
broadcastUser(username, message, exceptSocket = null) { broadcastUser(username, message, exceptSocket = null) {
// Broadcast a message to all users in any channels that the specified user is in, except the one specified // Broadcast a message to all users in any channels that the specified user is in, except the one specified
const alreadyNotified = [];
for (const [channel, channelObj] of this.channelData.entries()) { for (const [channel, channelObj] of this.channelData.entries()) {
if (channelObj.users.has(username)) { if (channelObj.users.has(username)) {
for (const user of channelObj.users) { for (const user of channelObj.users) {
const sock = Array.from(this.nicknames.keys()).find(s => this.nicknames.get(s) === user); const sock = Array.from(this.nicknames.keys()).find(s => this.nicknames.get(s) === user);
if (alreadyNotified.includes(sock)) {
continue;
}
if (sock && sock !== exceptSocket) { if (sock && sock !== exceptSocket) {
sock.write(message); sock.write(message);
alreadyNotified.push(sock);
} }
} }
} }
@@ -3018,6 +3023,7 @@ class WTVIRC {
broadcastChannel(channel, message, exceptSocket = null) { broadcastChannel(channel, message, exceptSocket = null) {
// Broadcast a message to all users in a specific channel, except the one specified // Broadcast a message to all users in a specific channel, except the one specified
const alreadyNotified = [];
if (this.channelData.has(channel)) { if (this.channelData.has(channel)) {
const channelObj = this.channelData.get(channel); const channelObj = this.channelData.get(channel);
for (const user of channelObj.users) { for (const user of channelObj.users) {
@@ -3026,15 +3032,23 @@ class WTVIRC {
const user_modes = this.getUserModes(user); const user_modes = this.getUserModes(user);
if (user_modes.includes('z')) { if (user_modes.includes('z')) {
const sock = Array.from(this.nicknames.keys()).find(s => this.nicknames.get(s) === user); const sock = Array.from(this.nicknames.keys()).find(s => this.nicknames.get(s) === user);
if (alreadyNotified.includes(sock)) {
continue;
}
if (sock && sock !== exceptSocket) { if (sock && sock !== exceptSocket) {
sock.write(message); sock.write(message);
alreadyNotified.push(sock);
} }
} }
} }
else { else {
const sock = Array.from(this.nicknames.keys()).find(s => this.nicknames.get(s) === user); const sock = Array.from(this.nicknames.keys()).find(s => this.nicknames.get(s) === user);
if (alreadyNotified.includes(sock)) {
continue;
}
if (sock && sock !== exceptSocket) { if (sock && sock !== exceptSocket) {
sock.write(message); sock.write(message);
alreadyNotified.push(sock);
} }
} }
} }
@@ -3042,7 +3056,7 @@ class WTVIRC {
} }
broadcastChannelWebTV(channel, message, exceptSocket = null) { broadcastChannelWebTV(channel, message, exceptSocket = null) {
// Broadcast a message to all users in a specific channel, except the one specified // Broadcast a message to all WebTV users in a specific channel, except the one specified
if (this.channelData.has(channel)) { if (this.channelData.has(channel)) {
const channelObj = this.channelData.get(channel); const channelObj = this.channelData.get(channel);
for (const user of channelObj.users) { for (const user of channelObj.users) {