From fdab0d93baa602e20ca39c9530a77b71d873f873 Mon Sep 17 00:00:00 2001 From: ayntee Date: Mon, 8 Mar 2021 18:13:01 +0400 Subject: [PATCH] feat: change Guild.emojis to use collection (#388) * feat(guild): change Guild.emojis to use collection * idk --- src/api/controllers/guilds.ts | 7 +++++-- src/api/handlers/guild.ts | 6 ++++-- src/api/structures/guild.ts | 6 +++++- src/types/options.ts | 5 +++-- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/api/controllers/guilds.ts b/src/api/controllers/guilds.ts index 0f428f597..48d49af19 100644 --- a/src/api/controllers/guilds.ts +++ b/src/api/controllers/guilds.ts @@ -8,6 +8,7 @@ import { UpdateGuildPayload, } from "../../types/mod.ts"; import { cache } from "../../util/cache.ts"; +import { Collection } from "../../util/collection.ts"; import { structures } from "../structures/mod.ts"; import { cacheHandlers } from "./cache.ts"; @@ -115,13 +116,15 @@ export async function handleInternalGuildEmojisUpdate(data: DiscordPayload) { if (!guild) return; const cachedEmojis = guild.emojis; - guild.emojis = payload.emojis; + guild.emojis = new Collection( + payload.emojis.map((emoji) => [emoji.id ?? emoji.name, emoji]), + ); cacheHandlers.set("guilds", payload.guild_id, guild); eventHandlers.guildEmojisUpdate?.( guild, - payload.emojis, + guild.emojis, cachedEmojis, ); } diff --git a/src/api/handlers/guild.ts b/src/api/handlers/guild.ts index 9aff87160..7a9023a9c 100644 --- a/src/api/handlers/guild.ts +++ b/src/api/handlers/guild.ts @@ -402,7 +402,9 @@ export async function getEmojis(guildID: string, addToCache = true) { if (addToCache) { const guild = await cacheHandlers.get("guilds", guildID); if (!guild) throw new Error(Errors.GUILD_NOT_FOUND); - guild.emojis = result; + + result.forEach((emoji) => guild.emojis.set(emoji.id ?? emoji.name, emoji)); + cacheHandlers.set("guilds", guildID, guild); } @@ -426,7 +428,7 @@ export async function getEmoji( if (addToCache) { const guild = await cacheHandlers.get("guilds", guildID); if (!guild) throw new Error(Errors.GUILD_NOT_FOUND); - guild.emojis.push(result); + guild.emojis.set(result.id ?? result.name, result); cacheHandlers.set( "guilds", guildID, diff --git a/src/api/structures/guild.ts b/src/api/structures/guild.ts index f1cc711cb..63e4c9b18 100644 --- a/src/api/structures/guild.ts +++ b/src/api/structures/guild.ts @@ -138,6 +138,7 @@ export async function createGuild(data: CreateGuildPayload, shardID: number) { channels = [], members, presences = [], + emojis, ...rest } = data; @@ -187,6 +188,9 @@ export async function createGuild(data: CreateGuildPayload, shardID: number) { new Collection(presences.map((p: Presence) => [p.user.id, p])), ), memberCount: createNewProp(memberCount), + emojis: createNewProp( + new Collection(emojis.map((emoji) => [emoji.id ?? emoji.name, emoji])), + ), voiceStates: createNewProp( new Collection( voiceStates.map((vs: VoiceState) => [ @@ -229,7 +233,7 @@ export interface Guild { /** Explicit content filter level */ explicitContentFilter: number; /** The custom guild emojis */ - emojis: Emoji[]; + emojis: Collection; /** Enabled guild features */ features: GuildFeatures[]; /** System channel flags */ diff --git a/src/types/options.ts b/src/types/options.ts index 770d031e2..72db39794 100644 --- a/src/types/options.ts +++ b/src/types/options.ts @@ -5,6 +5,7 @@ import { Message, Role, } from "../api/structures/mod.ts"; +import { Collection } from "../util/collection.ts"; import { DiscordPayload, Emoji, @@ -141,8 +142,8 @@ export interface EventHandlers { /** Sent when a guild's emojis have been updated. */ guildEmojisUpdate?: ( guild: Guild, - emojis: Emoji[], - cachedEmojis: Emoji[], + emojis: Collection, + cachedEmojis: Collection, ) => unknown; /** Sent when a new user joins a guild. */ guildMemberAdd?: (guild: Guild, member: Member) => unknown;