Merge pull request #1007 from discordeno/change-to-object-keys

change: structure loops use Object.keys
This commit is contained in:
Skillz4Killz
2021-05-30 08:49:17 -04:00
committed by GitHub
6 changed files with 41 additions and 34 deletions

View File

@@ -107,11 +107,11 @@ export async function createDiscordenoChannel(data: Channel, guildId?: bigint) {
const { lastPinTimestamp, permissionOverwrites = [], ...rest } = data;
const props: Record<string, PropertyDescriptor> = {};
Object.entries(rest).forEach(([key, value]) => {
(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) ? (value ? snowflakeToBigint(value) : undefined) : value
CHANNEL_SNOWFLAKES.includes(key) ? (rest[key] ? snowflakeToBigint(rest[key] as string) : undefined) : rest[key]
);
});

View File

@@ -268,17 +268,19 @@ export async function createDiscordenoGuild(data: Guild, shardId: number) {
);
const props: Record<string, ReturnType<typeof createNewProp>> = {};
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 },

View File

@@ -137,32 +137,31 @@ export async function createDiscordenoMember(
let bitfield = 0n;
const props: Record<string, ReturnType<typeof createNewProp>> = {};
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,

View File

@@ -209,22 +209,22 @@ export async function createDiscordenoMessage(data: Message) {
let bitfield = 0n;
const props: Record<string, ReturnType<typeof createNewProp>> = {};
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);

View File

@@ -115,17 +115,19 @@ export async function createDiscordenoRole(
let bitfield = 0n;
const props: Record<string, ReturnType<typeof createNewProp>> = {};
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,

View File

@@ -81,22 +81,26 @@ export async function createDiscordenoVoiceState(guildId: bigint, data: VoiceSta
let bitfield = 0n;
const props: Record<string, ReturnType<typeof createNewProp>> = {};
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,