From a23b09257ff6fa688df1ba57506935cb4a39c1f4 Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Sun, 23 May 2021 20:57:57 +0000 Subject: [PATCH] fix user update --- src/handlers/misc/USER_UPDATE.ts | 21 ++++++++++++++++----- src/structures/member.ts | 4 +++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/handlers/misc/USER_UPDATE.ts b/src/handlers/misc/USER_UPDATE.ts index 3ebc74323..39f1ea151 100644 --- a/src/handlers/misc/USER_UPDATE.ts +++ b/src/handlers/misc/USER_UPDATE.ts @@ -1,8 +1,10 @@ import { eventHandlers } from "../../bot.ts"; import { cacheHandlers } from "../../cache.ts"; +import { memberToggles } from "../../structures/member.ts"; import type { DiscordGatewayPayload } from "../../types/gateway/gateway_payload.ts"; import type { User } from "../../types/users/user.ts"; import { snowflakeToBigint } from "../../util/bigint.ts"; +import { iconHashToBigInt } from "../../util/hash.ts"; export async function handleUserUpdate(data: DiscordGatewayPayload) { const userData = data.d as User; @@ -10,11 +12,20 @@ export async function handleUserUpdate(data: DiscordGatewayPayload) { const member = await cacheHandlers.get("members", snowflakeToBigint(userData.id)); if (!member) return; - Object.entries(userData).forEach(([key, value]) => { - eventHandlers.debug?.("loop", `Running forEach loop in USER_UPDATE file.`); - // @ts-ignore index signatures - if (member[key] !== value) return (member[key] = value); - }); + // Update username + member.username = userData.username; + // Update discriminator + member.discriminator = BigInt(userData.discriminator); + + // Check if a avatar is available + const hash = userData.avatar ? iconHashToBigInt(userData.avatar) : undefined; + if (hash) { + // Update the avatar + member.avatar = hash.bigint; + // Update the animated status if its animated + if (hash.animated) member.bitfield |= memberToggles.animatedAvatar; + else member.bitfield &= ~memberToggles.animatedAvatar; + } await cacheHandlers.set("members", snowflakeToBigint(userData.id), member); diff --git a/src/structures/member.ts b/src/structures/member.ts index f839caa10..f6fecb3d8 100644 --- a/src/structures/member.ts +++ b/src/structures/member.ts @@ -186,11 +186,13 @@ export async function createDiscordenoMember( return member; } -export interface DiscordenoMember extends Omit { +export interface DiscordenoMember extends Omit { /** The user's id */ id: bigint; /** The user's 4-digit discord-tag */ discriminator: bigint; + /** The avatar in bigint format. */ + avatar: bigint; /** The guild related data mapped by guild id */ guilds: Collection< bigint,