import type { Client } from '../client/mod.ts'import { Guild } from '../structures/guild.ts'import { MessageSticker } from '../structures/messageSticker.ts'import { CreateGuildStickerOptions, MessageStickerPayload, ModifyGuildStickerOptions} from '../types/channel.ts'import { BaseChildManager } from './baseChild.ts'
export class GuildStickersManager extends BaseChildManager< MessageStickerPayload, MessageSticker> { constructor(client: Client, public guild: Guild) { super(client, client.stickers) }
async fetch(id: string): Promise<MessageSticker> { const sticker = await this.client.stickers.fetch(id) if (sticker.guildID === this.guild.id) throw new Error( `This sticker (${sticker.id}) is not part of Guild ${this.guild.id}` ) return sticker }
async delete(id: string | MessageSticker, reason?: string): Promise<boolean> { return this.client.stickers.delete(this.guild, id, reason) }
async fetchAll(): Promise<MessageSticker[]> { return this.client.stickers.fetchAll(this.guild) }
async create(options: CreateGuildStickerOptions): Promise<MessageSticker> { return this.client.stickers.create(this.guild, options) }
async edit( sticker: string | MessageSticker, options: Partial<ModifyGuildStickerOptions> ): Promise<MessageSticker> { return this.client.stickers.edit(this.guild, sticker, options) }
async keys(): Promise<string[]> { const keys = [] for (const sticker of ((await this.client.cache.array('stickers')) ?? []) as MessageStickerPayload[]) { if (sticker.guild_id === this.guild.id) keys.push(sticker.id) } return keys }
async array(): Promise<MessageSticker[]> { const stickers = [] for (const sticker of ((await this.client.cache.array('stickers')) ?? []) as MessageStickerPayload[]) { if (sticker.guild_id === this.guild.id) stickers.push(new MessageSticker(this.client, sticker)) } return stickers }
async flush(): Promise<void> { for (const sticker of ((await this.client.cache.array('stickers')) ?? []) as MessageStickerPayload[]) { if (sticker.guild_id === this.guild.id) await this.client.stickers._delete(sticker.id) } }}