import {formatEmoji, Routes, Snowflake} from "discord.js"; import {DiscordClient} from "../Discord/DiscordClient"; export class IconCache { private existingIcons: Map | undefined; constructor( private readonly client: DiscordClient ) { } public get(iconName: string): Snowflake | null { if (!this.existingIcons?.has(iconName)) { return null; } return this.existingIcons?.get(iconName) ?? null; } public getEmoji(iconName: string): string { const id = this.get(iconName); return formatEmoji({ id: id, name: iconName }); } public async set(iconName: string, pngBuffer: Buffer) { const pngBase64 = pngBuffer.toString("base64"); const iconDataUrl = `data:image/png;base64,${pngBase64}`; await this.client.RESTClient.post( Routes.applicationEmojis(this.client.ApplicationId), { body: { name: iconName, image: iconDataUrl } } ) } public async populate() { if (this.existingIcons != null) { return; } const existingEmojis: DiscordIconRequest = await this.client.RESTClient.get( Routes.applicationEmojis(this.client.ApplicationId) ) this.existingIcons = new Map( existingEmojis.items.map((item) => { return [ item.name, item.id ] }) ) } }