From 8ca6a6df83b3967ce659c7eacb17bca081f940bf Mon Sep 17 00:00:00 2001 From: Elliot Maisl Date: Fri, 7 Aug 2026 19:49:34 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20duplicated=20welcome=20mes?= =?UTF-8?q?sages=20by=20adding=20nonce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/listeners/client/guildMemberAdd.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/listeners/client/guildMemberAdd.ts b/src/listeners/client/guildMemberAdd.ts index f7738fdc..d8d3b43f 100644 --- a/src/listeners/client/guildMemberAdd.ts +++ b/src/listeners/client/guildMemberAdd.ts @@ -5,14 +5,7 @@ import * as messages from '#config/messages'; import { channels } from '#config/settings'; export class GuildMemberAddListener extends Listener { - private deduplication = new Set(); - public override async run(member: GuildMember): Promise { - if (this.deduplication.has(member.id)) return; - - this.deduplication.add(member.id); - setTimeout(() => this.deduplication.delete(member.id), 60_000); - await this._greet(member); } @@ -24,6 +17,11 @@ export class GuildMemberAddListener extends Listener { if (!channel || !channel.isTextBased()) return; const content = pupa(randomMessage, { member }); - await channel.send(content); + + // Keep welcome sends idempotent. + const joinedTimestamp = member.joinedTimestamp ?? Date.now(); + const nonce = `${member.id}:${joinedTimestamp}`; + + await channel.send({ content, nonce, enforceNonce: true }); } }