From 51fc0c2e0176d9c3249d78f6ad4416a8f64d87fd Mon Sep 17 00:00:00 2001 From: Rory& Date: Thu, 26 Mar 2026 11:47:33 +0100 Subject: [PATCH] User: use single query to determine taken discriminators --- src/util/entities/User.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/util/entities/User.ts b/src/util/entities/User.ts index 0fd513347..65f425ffe 100644 --- a/src/util/entities/User.ts +++ b/src/util/entities/User.ts @@ -261,13 +261,12 @@ export class User extends BaseClass { // randomly generates a discriminator between 1 and 9999 and checks max five times if it already exists // TODO: is there any better way to generate a random discriminator only once, without checking if it already exists in the database? - for (let tries = 0; tries < 5; tries++) { + const takenDiscriminators = (await User.find({ where: { username }, select: { discriminator: true } })).map((x) => x.discriminator); + if (takenDiscriminators.length >= 9999) return undefined; + + for (let tries = 0; tries < 15; tries++) { const discriminator = Random.nextInt(1, 9999).toString().padStart(4, "0"); - const exists = await User.findOne({ - where: { discriminator, username: username }, - select: { id: true }, - }); - if (!exists) return discriminator; + if (!takenDiscriminators.includes(discriminator)) return discriminator; } return undefined;