From c4bc79bebc5eeb9ac5f00807f857fb19bc75b083 Mon Sep 17 00:00:00 2001 From: Rory& Date: Thu, 11 Jun 2026 00:20:41 +0200 Subject: [PATCH] Assertions first, use exists rather than count/find --- src/util/entities/Member.ts | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/util/entities/Member.ts b/src/util/entities/Member.ts index abbbdc149..f7b69d3de 100644 --- a/src/util/entities/Member.ts +++ b/src/util/entities/Member.ts @@ -312,17 +312,17 @@ export class Member extends BaseClassWithoutId { console.log("[Member.addToGuild]", ...data, `[${totalSw.elapsed().toString()} (+${incSw.getElapsedAndReset().totalMilliseconds}ms)]`); }; - const user = await User.getPublicUser(user_id); - logTrace("Get user"); - - const isBanned = await Ban.findOne({ where: { guild_id, user_id }, select: { id: true } }); + const isBanned = await Ban.exists({ where: { guild_id, user_id } }); if (isBanned) throw DiscordApiErrors.USER_BANNED; - logTrace("Check ban"); + logTrace("Check bans"); + + if (await Member.exists({ where: { id: user_id, guild_id } })) throw new HTTPError("You are already a member of this guild", 400); + logTrace("Check existing membership"); const { maxGuilds } = Config.get().limits.user; const guild_count = await Member.count({ where: { id: user_id } }); if (guild_count >= maxGuilds) { - throw new HTTPError(`You are at the ${maxGuilds} server limit.`, 403); + throw new HTTPError(`You are at the ${maxGuilds} guild limit.`, 403); } logTrace("Enforce max guilds"); @@ -359,14 +359,6 @@ export class Member extends BaseClassWithoutId { ).map((member) => member.toPublicMember()); logTrace("Calculate member preview"); - if ( - await Member.count({ - where: { id: user.id, guild: { id: guild_id } }, - }) - ) - throw new HTTPError("You are already a member of this guild", 400); - logTrace("Check existing membership"); - const member = { id: user_id, guild_id, @@ -401,6 +393,9 @@ export class Member extends BaseClassWithoutId { // Member.save is needed because else the roles relations wouldn't be updated }); + const user = await User.getPublicUser(user_id); + logTrace("Get user"); + await Promise.all([ newMember.save(), Guild.increment({ id: guild_id }, "member_count", 1),