summary refs log tree commit diff
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-03-26 11:47:33 +0100
committerRory& <root@rory.gay>2026-03-26 11:47:33 +0100
commit51fc0c2e0176d9c3249d78f6ad4416a8f64d87fd (patch)
tree34edfadb4eaa57d203a3c34032b15b1bd8be1a09
parentEmbeds: factor out from postMessage (diff)
downloadserver-ts-51fc0c2e0176d9c3249d78f6ad4416a8f64d87fd.tar.xz
User: use single query to determine taken discriminators
-rw-r--r--src/util/entities/User.ts11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/util/entities/User.ts b/src/util/entities/User.ts

index 0fd51334..65f425ff 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;