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 1/5] 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, From 75b3f72116f50b6047ed13e4b5a41e8c22213c29 Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Sun, 23 May 2021 20:59:22 +0000 Subject: [PATCH 2/5] whoopsies --- src/handlers/misc/USER_UPDATE.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/handlers/misc/USER_UPDATE.ts b/src/handlers/misc/USER_UPDATE.ts index 39f1ea151..791f6636c 100644 --- a/src/handlers/misc/USER_UPDATE.ts +++ b/src/handlers/misc/USER_UPDATE.ts @@ -19,13 +19,11 @@ export async function handleUserUpdate(data: DiscordGatewayPayload) { // 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; - } + // Update the avatar + member.avatar = hash?.bigint || 0n; + // 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); From cb13bfdfd04d52921f4f2b293f9948acef06bf1a Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Sun, 23 May 2021 21:02:15 +0000 Subject: [PATCH 3/5] fix avatrin tojson --- src/structures/member.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/structures/member.ts b/src/structures/member.ts index f6fecb3d8..d83f6ca4f 100644 --- a/src/structures/member.ts +++ b/src/structures/member.ts @@ -16,7 +16,7 @@ import type { DiscordImageSize } from "../types/misc/image_size.ts"; import type { User } from "../types/users/user.ts"; import { snowflakeToBigint } from "../util/bigint.ts"; import { Collection } from "../util/collection.ts"; -import { iconHashToBigInt } from "../util/hash.ts"; +import { iconBigintToHash, iconHashToBigInt } from "../util/hash.ts"; import { createNewProp } from "../util/utils.ts"; import { DiscordenoGuild } from "./guild.ts"; @@ -106,7 +106,7 @@ const baseMember: Partial = { id: this.id?.toString(), username: this.username, discriminator: this.discriminator?.toString(), - avatar: this.avatar, + avatar: this.avatar ? iconBigintToHash(this.avatar) : undefined, bot: this.bot, system: this.system, mfaEnabled: this.mfaEnabled, From 554d7a39a627619cad19277d696d5635805dc024 Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Sun, 23 May 2021 21:04:46 +0000 Subject: [PATCH 4/5] so silly --- src/structures/message.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/structures/message.ts b/src/structures/message.ts index 3c28da6fe..9a6922a82 100644 --- a/src/structures/message.ts +++ b/src/structures/message.ts @@ -16,6 +16,7 @@ import type { EditMessage } from "../types/messages/edit_message.ts"; import type { Message } from "../types/messages/message.ts"; import { bigintToSnowflake, snowflakeToBigint } from "../util/bigint.ts"; import { CHANNEL_MENTION_REGEX } from "../util/constants.ts"; +import { iconBigintToHash } from "../util/hash.ts"; import { createNewProp } from "../util/utils.ts"; import { DiscordenoChannel } from "./channel.ts"; import { DiscordenoGuild } from "./guild.ts"; @@ -152,7 +153,7 @@ const baseMessage: Partial = { id: this.authorId?.toString(), username: this.tag?.substring(0, this.tag.length - 5), discriminator: this.tag?.substring(this.tag.length - 4), - avatar: this.member?.avatar, + avatar: this.member?.avatar ? iconBigintToHash(this.member.avatar) : undefined, bot: this.member?.bot, system: this.member?.system, mfaEnabled: this.member?.mfaEnabled, From 2409841b1d4fe7c2ae259172f1e1bff581f07c50 Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Sun, 23 May 2021 21:16:51 +0000 Subject: [PATCH 5/5] edge case --- src/handlers/misc/USER_UPDATE.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/handlers/misc/USER_UPDATE.ts b/src/handlers/misc/USER_UPDATE.ts index 791f6636c..9c85b8759 100644 --- a/src/handlers/misc/USER_UPDATE.ts +++ b/src/handlers/misc/USER_UPDATE.ts @@ -25,6 +25,10 @@ export async function handleUserUpdate(data: DiscordGatewayPayload) { if (hash?.animated) member.bitfield |= memberToggles.animatedAvatar; else member.bitfield &= ~memberToggles.animatedAvatar; + member.flags = userData.flags; + member.premiumType = userData.premiumType; + member.publicFlags = userData.publicFlags; + await cacheHandlers.set("members", snowflakeToBigint(userData.id), member); eventHandlers.botUpdate?.(userData);