diff options
author | Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> | 2021-10-16 00:34:07 +0200 |
---|---|---|
committer | Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> | 2021-10-16 00:35:20 +0200 |
commit | afaf55195ca1abdab9a869c1f82fbdca1fdae1d9 (patch) | |
tree | ea80856bf70922d478c553b5e58601d610e44bc2 /gateway | |
parent | :bug: fix #450 (only if user is a bot application) (diff) | |
download | server-afaf55195ca1abdab9a869c1f82fbdca1fdae1d9.tar.xz |
:sparkles: lazy loading of guilds for bots closes #451
Diffstat (limited to 'gateway')
-rw-r--r-- | gateway/src/opcodes/Identify.ts | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/gateway/src/opcodes/Identify.ts b/gateway/src/opcodes/Identify.ts index 88b514b2..006dc83c 100644 --- a/gateway/src/opcodes/Identify.ts +++ b/gateway/src/opcodes/Identify.ts @@ -42,6 +42,14 @@ export async function onIdentify(this: WebSocket, data: Payload) { return this.close(CLOSECODES.Authentication_failed); } this.user_id = decoded.id; + + const user = await User.findOneOrFail({ + where: { id: this.user_id }, + relations: ["relationships", "relationships.to"], + select: [...PrivateUserProjection, "relationships"], + }); + if (!user) return this.close(CLOSECODES.Authentication_failed); + if (!identify.intents) identify.intents = BigInt("0b11111111111111"); this.intents = new Intents(identify.intents); if (identify.shard) { @@ -83,7 +91,25 @@ export async function onIdentify(this: WebSocket, data: Payload) { }, ]; }) as PublicMember[][]; - const guilds = members.map((x) => ({ ...x.guild, joined_at: x.joined_at })); + let guilds = members.map((x) => ({ ...x.guild, joined_at: x.joined_at })); + + // @ts-ignore + guilds = guilds.map((guild) => { + if (user.bot) { + setTimeout(() => { + Send(this, { + op: OPCODES.Dispatch, + t: EVENTEnum.GuildCreate, + s: this.sequence++, + d: guild, + }); + }, 500); + return { id: guild.id, unavailable: true }; + } + + return guild; + }); + const user_guild_settings_entries = members.map((x) => x.settings); const recipients = await Recipient.find({ @@ -103,12 +129,6 @@ export async function onIdentify(this: WebSocket, data: Payload) { } return x.channel; }); - const user = await User.findOneOrFail({ - where: { id: this.user_id }, - relations: ["relationships", "relationships.to"], - select: [...PrivateUserProjection, "relationships"], - }); - if (!user) return this.close(CLOSECODES.Authentication_failed); for (let relation of user.relationships) { const related_user = relation.to; |