diff --git a/src/structures/channel.ts b/src/structures/channel.ts index da2fe761f..c716a8ac1 100644 --- a/src/structures/channel.ts +++ b/src/structures/channel.ts @@ -115,6 +115,14 @@ export async function createDiscordenoChannel(data: Channel, guildId?: bigint) { ); }); + (Object.keys(rest) as (keyof typeof rest)[]).forEach((key) => { + eventHandlers.debug?.("loop", `Running forEach loop in createDiscordenoChannel function.`); + + props[key] = createNewProp( + CHANNEL_SNOWFLAKES.includes(key) ? (rest[key] ? snowflakeToBigint(rest[key] as string) : undefined) : rest[key] + ); + }); + // Set the guildId seperately because sometimes guildId is not included props.guildId = createNewProp(snowflakeToBigint(guildId?.toString() || data.guildId || "")); diff --git a/src/structures/guild.ts b/src/structures/guild.ts index b4ed5cd9a..363d26c78 100644 --- a/src/structures/guild.ts +++ b/src/structures/guild.ts @@ -268,17 +268,19 @@ export async function createDiscordenoGuild(data: Guild, shardId: number) { ); const props: Record> = {}; - for (const [key, value] of Object.entries(rest)) { + (Object.keys(rest) as (keyof typeof rest)[]).forEach((key) => { eventHandlers.debug?.("loop", `Running for of loop in createDiscordenoGuild function.`); const toggleBits = guildToggles[key as keyof typeof guildToggles]; if (toggleBits) { - bitfield |= value ? toggleBits : 0n; - continue; + bitfield |= rest[key] ? toggleBits : 0n; + return; } - props[key] = createNewProp(GUILD_SNOWFLAKES.includes(key) ? (value ? snowflakeToBigint(value) : undefined) : value); - } + props[key] = createNewProp( + GUILD_SNOWFLAKES.includes(key) ? (rest[key] ? snowflakeToBigint(rest[key] as string) : undefined) : rest[key] + ); + }); const hashes = [ { name: "icon", toggle: guildToggles.animatedIcon, value: icon }, diff --git a/src/structures/member.ts b/src/structures/member.ts index 7166f34ea..62e187d34 100644 --- a/src/structures/member.ts +++ b/src/structures/member.ts @@ -137,32 +137,31 @@ export async function createDiscordenoMember( let bitfield = 0n; const props: Record> = {}; - - for (const [key, value] of Object.entries(user)) { + (Object.keys(user) as (keyof typeof user)[]).forEach((key) => { eventHandlers.debug?.("loop", `Running for of for Object.keys(user) loop in DiscordenoMember function.`); const toggleBits = memberToggles[key as keyof typeof memberToggles]; if (toggleBits) { - bitfield |= value ? toggleBits : 0n; - continue; + bitfield |= user[key] ? toggleBits : 0n; + return; } if (key === "avatar") { - const transformed = value ? iconHashToBigInt(value) : undefined; + const transformed = user[key] ? iconHashToBigInt(user[key] as string) : undefined; if (transformed?.animated) bitfield |= memberToggles.animatedAvatar; props.avatar = createNewProp(transformed?.bigint); - continue; + return; } if (key === "discriminator") { - props.discriminator = createNewProp(Number(value)); - continue; + props.discriminator = createNewProp(Number(user[key])); + return; } props[key] = createNewProp( - MEMBER_SNOWFLAKES.includes(key) ? (value ? snowflakeToBigint(value) : undefined) : value + MEMBER_SNOWFLAKES.includes(key) ? (user[key] ? snowflakeToBigint(user[key] as string) : undefined) : user[key] ); - } + }); const member: DiscordenoMember = Object.create(baseMember, { ...props, @@ -230,7 +229,9 @@ export interface DiscordenoMember extends Omit & { joinedAt?: number; premiumSince?: number; diff --git a/src/structures/message.ts b/src/structures/message.ts index 8a68805db..10112ed94 100644 --- a/src/structures/message.ts +++ b/src/structures/message.ts @@ -209,22 +209,22 @@ export async function createDiscordenoMessage(data: Message) { let bitfield = 0n; const props: Record> = {}; - for (const [key, value] of Object.entries(rest)) { + (Object.keys(rest) as (keyof typeof rest)[]).forEach((key) => { eventHandlers.debug?.("loop", `Running for of loop in createDiscordenoMessage function.`); const toggleBits = messageToggles[key as keyof typeof messageToggles]; if (toggleBits) { - bitfield |= value ? toggleBits : 0n; - continue; + bitfield |= rest[key] ? toggleBits : 0n; + return; } // Don't add member to props since it would overwrite the message.member getter - if (key === "member") continue; + if (key === "member") return; props[key] = createNewProp( - MESSAGE_SNOWFLAKES.includes(key) ? (value ? snowflakeToBigint(value) : undefined) : value + MESSAGE_SNOWFLAKES.includes(key) ? (rest[key] ? snowflakeToBigint(rest[key] as string) : undefined) : rest[key] ); - } + }); props.authorId = createNewProp(snowflakeToBigint(author.id)); props.isBot = createNewProp(author.bot || false); diff --git a/src/structures/role.ts b/src/structures/role.ts index 8d6d7d88c..9a1105a39 100644 --- a/src/structures/role.ts +++ b/src/structures/role.ts @@ -115,17 +115,19 @@ export async function createDiscordenoRole( let bitfield = 0n; const props: Record> = {}; - for (const [key, value] of Object.entries(rest)) { + (Object.keys(rest) as (keyof typeof rest)[]).forEach((key) => { eventHandlers.debug?.("loop", `Running for of loop in createDiscordenoRole function.`); const toggleBits = roleToggles[key as keyof typeof roleToggles]; if (toggleBits) { - bitfield |= value ? toggleBits : 0n; - continue; + bitfield |= rest[key] ? toggleBits : 0n; + return; } - props[key] = createNewProp(ROLE_SNOWFLAKES.includes(key) ? (value ? snowflakeToBigint(value) : undefined) : value); - } + props[key] = createNewProp( + ROLE_SNOWFLAKES.includes(key) ? (rest[key] ? snowflakeToBigint(rest[key] as string) : undefined) : rest[key] + ); + }); const role: DiscordenoRole = Object.create(baseRole, { ...props, diff --git a/src/structures/voice_state.ts b/src/structures/voice_state.ts index 9cfc133f6..dd82b0f94 100644 --- a/src/structures/voice_state.ts +++ b/src/structures/voice_state.ts @@ -81,22 +81,26 @@ export async function createDiscordenoVoiceState(guildId: bigint, data: VoiceSta let bitfield = 0n; const props: Record> = {}; - for (const [key, value] of Object.entries(data)) { + (Object.keys(data) as (keyof typeof data)[]).forEach((key) => { eventHandlers.debug?.("loop", `Running for of loop in createDiscordenoVoiceState function.`); // We don't need to cache member twice. It will be in cache.members - if (key === "member") continue; + if (key === "member") return; const toggleBits = voiceStateToggles[key as keyof typeof voiceStateToggles]; if (toggleBits) { - bitfield |= value ? toggleBits : 0n; - continue; + bitfield |= data[key] ? toggleBits : 0n; + return; } props[key] = createNewProp( - VOICE_STATE_SNOWFLAKES.includes(key) ? (value ? snowflakeToBigint(value) : undefined) : value + VOICE_STATE_SNOWFLAKES.includes(key) + ? data[key] + ? snowflakeToBigint(data[key] as string) + : undefined + : data[key] ); - } + }); const voiceState: DiscordenoVoiceState = Object.create(baseRole, { ...props,