change: use Object.keys

This commit is contained in:
ITOH
2021-05-29 22:31:49 +02:00
parent 6e77bad12e
commit a6d0045658
6 changed files with 50 additions and 33 deletions

View File

@@ -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 || ""));

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,
@@ -230,7 +229,9 @@ export interface DiscordenoMember extends Omit<User, "discriminator" | "id" | "a
/** Get the nickname or the username if no nickname */
name(guildId: bigint): string;
/** Get the guild member object for the specified guild */
guildMember(guildId: bigint):
guildMember(
guildId: bigint
):
| (Omit<GuildMember, "joinedAt" | "premiumSince" | "roles"> & {
joinedAt?: number;
premiumSince?: number;

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,