bakit 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["REST","ShardingManager","#setupShardsListeners","#user","#handleDispatch","#tryEmitReady","#ready"],"sources":["../src/lib/structures/BaseStructure.ts","../src/lib/structures/User.ts","../src/lib/structures/Message.ts","../src/lib/structures/channel/BaseChannel.ts","../src/lib/mixins/ChannelMixin.ts","../src/lib/structures/channel/GuildTextChannel.ts","../src/lib/structures/channel/GuildVoiceChannel.ts","../src/lib/utils/channel.ts","../src/lib/structures/Guild.ts","../src/lib/client/ClientHelper.ts","../src/lib/client/Partial.ts","../src/lib/utils/IntentsBitField.ts","../src/lib/client/Client.ts"],"sourcesContent":["import type { Client } from \"../client/Client.js\";\n\nexport class BaseStructure {\n\tdeclare public client: Client;\n\n\tpublic constructor(client: Client) {\n\t\tObject.defineProperty(this, \"client\", {\n\t\t\tvalue: client,\n\t\t\tenumerable: false,\n\t\t\twritable: false,\n\t\t});\n\t}\n\n\tpublic toJSON() {\n\t\treturn {};\n\t}\n}\n","import { getSnowflakeDate } from \"@bakit/utils\";\nimport { BaseStructure } from \"./BaseStructure.js\";\n\nimport type { Client } from \"../client/Client.js\";\nimport type { APIUser, GatewayReadyDispatchData } from \"discord-api-types/v10\";\n\nexport type UserPayload = APIUser | GatewayReadyDispatchData[\"user\"];\n\nexport class User extends BaseStructure {\n\tpublic constructor(\n\t\tclient: Client,\n\t\tpublic data: UserPayload,\n\t) {\n\t\tsuper(client);\n\t}\n\n\tpublic get id() {\n\t\treturn this.data.id;\n\t}\n\n\tpublic get username() {\n\t\treturn this.data.username;\n\t}\n\n\tpublic get discriminator() {\n\t\treturn this.data.discriminator;\n\t}\n\n\tpublic get globalName() {\n\t\treturn this.data.global_name;\n\t}\n\n\tpublic get tag() {\n\t\tconst hasDiscriminator = this.discriminator !== \"0\" && this.discriminator !== \"0000\";\n\t\treturn hasDiscriminator ? `${this.username}#${this.discriminator}` : this.username;\n\t}\n\n\tpublic get displayName() {\n\t\treturn this.globalName ?? this.tag;\n\t}\n\n\tpublic get avatar() {\n\t\treturn this.data.avatar ?? undefined;\n\t}\n\n\tpublic get bot() {\n\t\treturn !!this.data.bot;\n\t}\n\n\tpublic get system() {\n\t\treturn !!this.data.system;\n\t}\n\n\tpublic get mfaEnabled() {\n\t\treturn this.data.mfa_enabled;\n\t}\n\n\tpublic get locale() {\n\t\treturn this.data.locale;\n\t}\n\n\tpublic get verified() {\n\t\treturn this.data.verified;\n\t}\n\n\tpublic get email() {\n\t\treturn this.data.email;\n\t}\n\n\tpublic get flags() {\n\t\treturn this.data.flags;\n\t}\n\n\tpublic get premiumType() {\n\t\treturn this.data.premium_type;\n\t}\n\n\tpublic get publicFlags() {\n\t\treturn this.data.public_flags;\n\t}\n\n\tpublic get banner() {\n\t\treturn this.data.banner;\n\t}\n\n\tpublic get accentColor() {\n\t\treturn this.data.accent_color ?? undefined;\n\t}\n\n\tpublic get createdAt() {\n\t\treturn getSnowflakeDate(this.id);\n\t}\n\n\tpublic get createdTimestamp() {\n\t\treturn this.createdAt.getTime();\n\t}\n\n\tpublic get hexAccentColor() {\n\t\treturn this.accentColor !== undefined ? `#${this.accentColor.toString(16).padStart(6, \"0\")}` : undefined;\n\t}\n\n\tpublic get defaultAvatarURL() {\n\t\t// For users on the new username system, index will be (user_id >> 22) % 6.\n\t\t// For users on the legacy username system, index will be discriminator % 5.\n\t\tconst hasDiscriminator = this.discriminator !== \"0\" && this.discriminator !== \"0000\";\n\t\tconst index = hasDiscriminator ? BigInt(this.discriminator) % 5n : (BigInt(this.id) >> 22n) % 6n;\n\n\t\treturn `https://cdn.discordapp.com/embed/avatars/${index}.png`;\n\t}\n\n\tpublic getAvatarURL(options?: { size?: number; extension?: \"png\" | \"jpg\" | \"webp\" | \"gif\" }): string | undefined {\n\t\tif (!this.avatar) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst isAnimated = this.avatar.startsWith(\"a_\");\n\t\tconst ext = options?.extension ?? (isAnimated ? \"gif\" : \"png\");\n\n\t\tconst size = options?.size ? `?size=${options.size}` : \"\";\n\n\t\treturn `https://cdn.discordapp.com/avatars/${this.id}/${this.avatar}.${ext}${size}`;\n\t}\n\n\tpublic getDisplayAvatarURL(options?: { size?: number; extension?: \"png\" | \"jpg\" | \"webp\" | \"gif\" }) {\n\t\treturn this.getAvatarURL(options) ?? this.defaultAvatarURL;\n\t}\n\n\tpublic equals(other: User | string) {\n\t\tif (typeof other === \"string\") {\n\t\t\treturn other === this.id;\n\t\t}\n\n\t\treturn (\n\t\t\tother.id === this.id &&\n\t\t\tother.username === this.username &&\n\t\t\tother.discriminator === this.discriminator &&\n\t\t\tother.bot === this.bot &&\n\t\t\tother.createdTimestamp === this.createdTimestamp\n\t\t);\n\t}\n\n\tpublic override toJSON() {\n\t\treturn this.data;\n\t}\n\n\tpublic override toString() {\n\t\treturn `<@${this.id}>`;\n\t}\n}\n","import { BaseStructure } from \"./BaseStructure.js\";\nimport { User } from \"./User.js\";\n\nimport type { Client } from \"../client/Client.js\";\nimport type {\n\tAPIMessage,\n\tGatewayMessageCreateDispatchData,\n\tGatewayMessageUpdateDispatchData,\n} from \"discord-api-types/v10\";\nimport type { MessageReplyOptions } from \"../client/ClientHelper.js\";\nimport type { TextBasedChannel } from \"./channel/BaseChannel.js\";\n\nexport type MessagePayload = APIMessage | GatewayMessageCreateDispatchData | GatewayMessageUpdateDispatchData;\n\nexport class Message extends BaseStructure {\n\tprotected cachedAuthor?: User;\n\n\tpublic constructor(\n\t\tclient: Client,\n\t\tpublic data: MessagePayload,\n\t) {\n\t\tsuper(client);\n\t}\n\n\tpublic get partial() {\n\t\treturn typeof this.data.content !== \"string\" || typeof this.data.author !== \"object\";\n\t}\n\n\tpublic get content() {\n\t\treturn this.data.content;\n\t}\n\n\tpublic get id() {\n\t\treturn this.data.id;\n\t}\n\n\tpublic get channelId() {\n\t\treturn this.data.channel_id;\n\t}\n\n\tpublic get channel(): TextBasedChannel {\n\t\treturn this.guild!.channels.get(this.channelId)! as TextBasedChannel;\n\t}\n\n\tpublic get guildId() {\n\t\treturn \"guild_id\" in this.data ? this.data.guild_id : undefined;\n\t}\n\n\tpublic get guild() {\n\t\treturn this.guildId ? this.client.guilds.get(this.guildId) : undefined;\n\t}\n\n\tpublic get author() {\n\t\tthis.cachedAuthor ??= new User(this.client, this.data.author);\n\t\treturn this.cachedAuthor;\n\t}\n\n\tpublic get createdAt() {\n\t\treturn new Date(this.data.timestamp);\n\t}\n\n\tpublic get editedAt() {\n\t\treturn this.data.edited_timestamp ? new Date(this.data.edited_timestamp) : undefined;\n\t}\n\n\tpublic get createdTimestamp() {\n\t\treturn this.createdAt.getTime();\n\t}\n\n\tpublic get editedTimestamp() {\n\t\treturn this.editedAt?.getTime();\n\t}\n\n\tpublic get url() {\n\t\treturn `https://discord.com/channels/${this.guildId ?? \"@me\"}/${this.channelId}/${this.id}`;\n\t}\n\n\tpublic async fetch(): Promise<Message> {\n\t\tconst message = await this.client.helper.fetchMessage(this.channelId, this.id);\n\t\tthis.data = message.data;\n\t\tthis.cachedAuthor = message.cachedAuthor;\n\t\treturn this;\n\t}\n\n\tpublic async reply(options: MessageReplyOptions) {\n\t\treturn this.client.helper.replyMessage(this.channelId, this.id, options);\n\t}\n\n\tpublic async sendToChannel(options: MessageReplyOptions) {\n\t\treturn this.client.helper.createMessage(this.channelId, options);\n\t}\n\n\tpublic override toJSON() {\n\t\treturn this.data;\n\t}\n\n\tpublic override toString() {\n\t\treturn this.data.content;\n\t}\n}\n","import { BaseStructure } from \"../BaseStructure.js\";\n\nimport type { Client } from \"../../client/Client.js\";\nimport type {\n\tAPIChannel,\n\tAPIChannelBase,\n\tChannelType,\n\tGatewayChannelCreateDispatchData,\n\tGatewayChannelUpdateDispatchData,\n} from \"discord-api-types/v10\";\n\nimport type { GuildTextChannel } from \"./GuildTextChannel.js\";\nimport type { GuildVoiceChannel } from \"./GuildVoiceChannel.js\";\n\nexport type BaseChannelPayload =\n\t| APIChannelBase<ChannelType>\n\t| GatewayChannelCreateDispatchData\n\t| GatewayChannelUpdateDispatchData\n\t| APIChannel;\n\nexport type TextBasedChannel = GuildTextChannel | GuildVoiceChannel;\nexport type VoiceBasedChannel = GuildVoiceChannel;\nexport type GuildChannel = GuildTextChannel | GuildVoiceChannel;\n\nexport type Channel = TextBasedChannel | VoiceBasedChannel | GuildChannel;\n\nexport abstract class BaseChannel<D extends BaseChannelPayload> extends BaseStructure {\n\tpublic constructor(\n\t\tclient: Client,\n\t\tpublic data: D,\n\t) {\n\t\tsuper(client);\n\t}\n\n\tpublic get id() {\n\t\treturn this.data.id;\n\t}\n\n\tpublic get type() {\n\t\treturn this.data.type;\n\t}\n\n\tpublic override toString() {\n\t\treturn `<#${this.id}>`;\n\t}\n\n\tpublic override toJSON() {\n\t\treturn this.data;\n\t}\n\n\tpublic isTextBased(): this is TextBasedChannel {\n\t\treturn \"send\" in this;\n\t}\n\n\tpublic isVoiceBased(): this is VoiceBasedChannel {\n\t\treturn \"join\" in this;\n\t}\n\n\tpublic inGuild(): this is GuildChannel {\n\t\treturn \"guild_id\" in this.data;\n\t}\n\n\tpublic _patch(data: Partial<D>) {\n\t\tthis.data = { ...this.data, ...data };\n\t}\n}\n","import { createMixin } from \"tiny-mixin\";\n\nimport { type AbstractConstructor } from \"@bakit/utils\";\n\nimport type { BaseChannel } from \"../structures/channel/BaseChannel.js\";\nimport type { MessageCreateOptions } from \"../client/ClientHelper.js\";\nimport type {\n\tAPIGuildChannel,\n\tAPITextBasedChannel,\n\tAPIVoiceChannelBase,\n\tChannelType,\n\tGuildChannelType,\n} from \"discord-api-types/v10\";\n\ntype TextChannelBase = BaseChannel<APITextBasedChannel<ChannelType>>;\ntype VoiceChannelBase = BaseChannel<APIVoiceChannelBase<GuildChannelType>>;\ntype GuildChannelBase = BaseChannel<APIGuildChannel>;\n\nexport const TextBasedChannelMixin = createMixin(<T extends AbstractConstructor<TextChannelBase>>(base: T) => {\n\tabstract class TextBasedChannel extends base {\n\t\tpublic send(options: MessageCreateOptions) {\n\t\t\treturn this.client.helper.createMessage(this.id, options);\n\t\t}\n\t}\n\n\treturn TextBasedChannel;\n});\n\n// TODO: add voice methods\nexport const VoiceBasedChannelMixin = createMixin(<T extends AbstractConstructor<VoiceChannelBase>>(base: T) => {\n\tabstract class VoiceBasedChannel extends base {}\n\n\treturn VoiceBasedChannel;\n});\n\nexport const GuildChannelMixin = createMixin(<T extends AbstractConstructor<GuildChannelBase>>(base: T) => {\n\tabstract class GuildChannel extends base {\n\t\tpublic get guildId() {\n\t\t\tif (!this.data.guild_id) {\n\t\t\t\tthrow new Error(\"This channel is not a guild channel\");\n\t\t\t}\n\n\t\t\treturn this.data.guild_id;\n\t\t}\n\n\t\tpublic get guild() {\n\t\t\treturn this.client.guilds.get(this.guildId)!;\n\t\t}\n\t}\n\n\treturn GuildChannel;\n});\n","import { BaseChannel } from \"./BaseChannel.js\";\nimport { GuildChannelMixin, TextBasedChannelMixin } from \"@/lib/mixins/ChannelMixin.js\";\nimport { applyMixins } from \"tiny-mixin\";\n\nimport type { APITextBasedChannel, ChannelType } from \"discord-api-types/v10\";\n\nexport class GuildTextChannel extends applyMixins(BaseChannel<APITextBasedChannel<ChannelType.GuildText>>, [\n\tGuildChannelMixin,\n\tTextBasedChannelMixin,\n]) {}\n","import { applyMixins } from \"tiny-mixin\";\nimport { BaseChannel } from \"./BaseChannel.js\";\nimport { GuildChannelMixin, TextBasedChannelMixin, VoiceBasedChannelMixin } from \"@/lib/mixins/ChannelMixin.js\";\nimport type { APIGuildVoiceChannel } from \"discord-api-types/v10\";\n\nexport class GuildVoiceChannel extends applyMixins(BaseChannel<APIGuildVoiceChannel>, [\n\tGuildChannelMixin,\n\tTextBasedChannelMixin,\n\tVoiceBasedChannelMixin,\n]) {}\n","import { GuildTextChannel, GuildVoiceChannel, type BaseChannelPayload } from \"../structures/index.js\";\nimport { ChannelType, type APITextBasedChannel, type APIVoiceChannelBase } from \"discord-api-types/v10\";\n\nimport type { Client } from \"../client/Client.js\";\n\nexport function createChannel(client: Client, data: BaseChannelPayload) {\n\tswitch (data.type) {\n\t\tcase ChannelType.GuildText:\n\t\t\treturn new GuildTextChannel(client, data as APITextBasedChannel<ChannelType.GuildText>);\n\t\tcase ChannelType.GuildVoice:\n\t\t\treturn new GuildVoiceChannel(client, data as APIVoiceChannelBase<ChannelType.GuildVoice>);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import { Collection } from \"@discordjs/collection\";\n\nimport { BaseStructure } from \"./BaseStructure.js\";\n\nimport { createChannel } from \"../utils/channel.js\";\n\nimport type { Client } from \"../client/Client.js\";\nimport type { APIGuild, GatewayGuildCreateDispatchData, GatewayGuildUpdateDispatchData } from \"discord-api-types/v10\";\nimport type { Channel } from \"./channel/BaseChannel.js\";\n\nexport type GuildPayload = APIGuild | GatewayGuildUpdateDispatchData | GatewayGuildCreateDispatchData;\n\nexport class Guild extends BaseStructure {\n\tprivate cachedChannels: Collection<string, Channel> | undefined;\n\n\tpublic constructor(\n\t\tclient: Client,\n\t\tpublic data: GuildPayload,\n\t) {\n\t\tsuper(client);\n\t}\n\n\tpublic get id() {\n\t\treturn this.data.id;\n\t}\n\n\tpublic get name() {\n\t\treturn this.data.name;\n\t}\n\n\tpublic get icon() {\n\t\treturn this.data.icon;\n\t}\n\n\tpublic get banner() {\n\t\treturn this.data.banner;\n\t}\n\n\tpublic get owner() {\n\t\treturn this.data.owner_id;\n\t}\n\n\tpublic get mfaLevel() {\n\t\treturn this.data.mfa_level;\n\t}\n\n\tpublic get verificationLevel() {\n\t\treturn this.data.verification_level;\n\t}\n\n\tpublic get channels() {\n\t\tif (!this.cachedChannels) {\n\t\t\tthis.cachedChannels = new Collection();\n\n\t\t\tif (\"channels\" in this.data) {\n\t\t\t\tfor (const data of this.data.channels) {\n\t\t\t\t\tconst channel = createChannel(this.client, data);\n\n\t\t\t\t\tif (!channel) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.cachedChannels.set(channel.id, channel);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.cachedChannels;\n\t}\n\n\tpublic _patch(data: Partial<GuildPayload>) {\n\t\tthis.data = { ...this.data, ...data };\n\t}\n\n\t// public get roles() {\n\t// \treturn this.data.roles;\n\t// }\n}\n","import { Routes } from \"discord-api-types/v10\";\n\nimport { Message } from \"../structures/Message.js\";\nimport { Guild } from \"../structures/Guild.js\";\n\nimport type { Client } from \"./Client.js\";\nimport type { APIAllowedMentions, APIEmbed, APIMessageReference, APIMessage, APIGuild } from \"discord-api-types/v10\";\n\nexport interface MessageCreateOptions {\n\tcontent?: string;\n\ttts?: boolean;\n\n\tembeds?: APIEmbed[];\n\n\tallowedMentions?: APIAllowedMentions;\n\tmessageReference?: APIMessageReference;\n\n\tflags?: number;\n}\n\nexport type MessageReplyOptions = Omit<MessageCreateOptions, \"messageReference\">;\n\nexport class ClientHelper {\n\tdeclare public readonly client: Client;\n\n\tpublic constructor(client: Client) {\n\t\tObject.defineProperty(this, \"client\", {\n\t\t\tvalue: client,\n\t\t\tenumerable: false,\n\t\t\twritable: false,\n\t\t});\n\t}\n\n\tpublic async fetchMessage(channelId: string, messageId: string) {\n\t\tconst data = await this.client.rest.get<APIMessage>(Routes.channelMessage(channelId, messageId));\n\t\treturn new Message(this.client, data);\n\t}\n\n\tpublic async deleteMessage(channelId: string, messageId: string) {\n\t\treturn this.client.rest.delete(Routes.channelMessage(channelId, messageId));\n\t}\n\n\tpublic async createMessage(channelId: string, options: MessageCreateOptions) {\n\t\treturn this.client.rest.post<APIMessage>(Routes.channelMessages(channelId), {\n\t\t\tbody: ClientHelper.toAPICreateMessagePayload(options),\n\t\t});\n\t}\n\n\tpublic async replyMessage(channelId: string, messageId: string, options: MessageReplyOptions) {\n\t\treturn this.createMessage(channelId, {\n\t\t\t...options,\n\t\t\tmessageReference: {\n\t\t\t\tchannel_id: channelId,\n\t\t\t\tmessage_id: messageId,\n\t\t\t},\n\t\t});\n\t}\n\n\tpublic async fetchGuild(guildId: string) {\n\t\tconst data = await this.client.rest.get<APIGuild>(Routes.guild(guildId));\n\t\treturn new Guild(this.client, data);\n\t}\n\n\tpublic static toAPICreateMessagePayload(options: MessageCreateOptions) {\n\t\treturn {\n\t\t\tcontent: options.content,\n\t\t\ttts: options.tts,\n\t\t\tembeds: options.embeds,\n\t\t\tallowed_mentions: options.allowedMentions,\n\t\t\tmessage_reference: options.messageReference,\n\t\t\tflags: options.flags,\n\t\t};\n\t}\n}\n","export enum Partial {\n\tMessage,\n\tUser,\n}\n","import { GatewayIntentBits } from \"discord-api-types/v10\";\n\nexport type IntentResolvable = number | bigint | GatewayIntentBits | GatewayIntentBits[];\n\nexport class IntentsBitField {\n\tprivate readonly value: bigint;\n\n\tpublic constructor(input: IntentResolvable) {\n\t\tthis.value = IntentsBitField.resolve(input);\n\t}\n\n\tpublic static resolve(input: IntentResolvable): bigint {\n\t\tif (Array.isArray(input)) {\n\t\t\treturn input.reduce((acc, intent) => acc | BigInt(intent), 0n);\n\t\t}\n\n\t\treturn BigInt(input);\n\t}\n\n\tpublic has(intent: GatewayIntentBits): boolean {\n\t\treturn (this.value & BigInt(intent)) !== 0n;\n\t}\n\n\tpublic toBigInt(): bigint {\n\t\treturn this.value;\n\t}\n\n\tpublic toNumber(): number {\n\t\treturn Number(this.value);\n\t}\n\n\tpublic toJSON(): string {\n\t\treturn this.value.toString();\n\t}\n\n\tpublic toString(): string {\n\t\treturn this.value.toString();\n\t}\n}\n","import EventEmitter from \"node:events\";\n\nimport { ShardingManager, type ShardingManagerOptions } from \"@bakit/gateway\";\nimport { REST, type RESTLike } from \"@bakit/rest\";\nimport { Collection } from \"@discordjs/collection\";\n\nimport { GatewayDispatchEvents, type GatewayDispatchPayload, type GatewayReceivePayload } from \"discord-api-types/v10\";\n\nimport { Message } from \"../structures/Message.js\";\nimport { User } from \"../structures/User.js\";\nimport { Guild } from \"../structures/Guild.js\";\n\nimport { ClientHelper } from \"./ClientHelper.js\";\nimport { Partial } from \"./Partial.js\";\nimport { IntentsBitField, type IntentResolvable } from \"../utils/IntentsBitField.js\";\nimport { createChannel } from \"../utils/channel.js\";\n\nimport type { Channel } from \"../structures/index.js\";\n\nexport interface ClientOptions {\n\ttoken: string;\n\tintents: IntentResolvable | IntentsBitField;\n\tsharding?: ClientShardingOptions;\n\tpartials?: Partial[];\n}\n\nexport type ClientShardingOptions = Omit<ShardingManagerOptions, \"token\" | \"intents\">;\n\nexport interface ClientEvents {\n\tready: [user: User];\n\terror: [error: Error];\n\n\tdispatch: [shardId: number, payload: GatewayDispatchPayload];\n\traw: [shardId: number, payload: GatewayReceivePayload];\n\n\tmessageCreate: [message: Message];\n\tmessageUpdate: [message: Message];\n\tmessageDelete: [message: { id: string; channelId: string; guildId?: string }];\n\n\tuserUpdate: [user: User];\n\n\tguildCreate: [guild: Guild];\n\tguildAvailable: [guild: Guild];\n\tguildUpdate: [guild: Guild];\n\tguildDelete: [guild: Guild];\n\n\tchannelCreate: [channel: Channel];\n\tchannelUpdate: [channel: Channel];\n\tchannelDelete: [channel: Channel];\n}\n\nexport class Client extends EventEmitter<ClientEvents> {\n\tpublic readonly options: Omit<Required<ClientOptions>, \"partials\" | \"intents\"> & {\n\t\tpartials: Set<Partial>;\n\t\tintents: IntentsBitField;\n\t};\n\n\tpublic readonly shards: ShardingManager;\n\tpublic readonly rest: RESTLike;\n\tpublic readonly helper: ClientHelper;\n\n\tpublic readonly guilds = new Collection<string, Guild>();\n\n\t#user?: User;\n\t#ready = false;\n\n\tpublic constructor(options: ClientOptions, rest?: RESTLike) {\n\t\tsuper();\n\n\t\tconst intents = options.intents instanceof IntentsBitField ? options.intents : new IntentsBitField(options.intents);\n\t\tconst sharding = {\n\t\t\tshardsPerCluster: options.sharding?.shardsPerCluster ?? 1,\n\t\t\ttotalShards: options.sharding?.totalShards ?? 1,\n\t\t};\n\n\t\tthis.options = {\n\t\t\ttoken: options.token,\n\t\t\tintents,\n\t\t\tsharding,\n\t\t\tpartials: new Set(options.partials ?? []),\n\t\t};\n\n\t\tthis.rest = rest ?? new REST({ token: options.token });\n\n\t\tthis.shards = new ShardingManager(\n\t\t\t{\n\t\t\t\t...this.options.sharding,\n\t\t\t\ttoken: this.options.token,\n\t\t\t\tintents: this.options.intents.toBigInt(),\n\t\t\t},\n\t\t\trest,\n\t\t);\n\n\t\tthis.helper = new ClientHelper(this);\n\n\t\tthis.#setupShardsListeners();\n\t}\n\n\tget user() {\n\t\treturn this.#user;\n\t}\n\n\tpublic async login() {\n\t\tif (this.#user || this.shards.ready || this.shards.clusters.size > 0) {\n\t\t\tthrow new Error(\"Cannot login twice\");\n\t\t}\n\n\t\tawait this.shards.spawn();\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tconst cleanup = () => {\n\t\t\t\tthis.removeListener(\"ready\", onReady);\n\t\t\t\tthis.removeListener(\"error\", onError);\n\t\t\t};\n\n\t\t\tconst onReady = () => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\tconst onError = (error: Error) => {\n\t\t\t\tcleanup();\n\t\t\t\treject(error);\n\t\t\t};\n\n\t\t\tthis.once(\"ready\", onReady);\n\t\t\tthis.once(\"error\", onError);\n\t\t});\n\t}\n\n\t#setupShardsListeners() {\n\t\tthis.shards.on(\"dispatch\", (_, shardId, payload) => this.#handleDispatch(shardId, payload));\n\t\tthis.shards.on(\"raw\", (_, shardId, payload) => this.emit(\"raw\", shardId, payload));\n\t\tthis.shards.once(\"ready\", () => this.#tryEmitReady());\n\t}\n\n\tasync #handleDispatch(shardId: number, payload: GatewayDispatchPayload) {\n\t\tthis.emit(\"dispatch\", shardId, payload);\n\n\t\tswitch (payload.t) {\n\t\t\tcase GatewayDispatchEvents.Ready: {\n\t\t\t\tthis.#user ??= new User(this, payload.d.user);\n\n\t\t\t\t// Usually, this won't do anything but still be good to have\n\t\t\t\t// in case the shards emit `ready` event out of order\n\t\t\t\tthis.#tryEmitReady();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayDispatchEvents.MessageCreate: {\n\t\t\t\tconst message = new Message(this, payload.d);\n\n\t\t\t\tif (message.partial && !this.options.partials.has(Partial.Message)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.emit(\"messageCreate\", message);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayDispatchEvents.MessageUpdate: {\n\t\t\t\tconst message = new Message(this, payload.d);\n\n\t\t\t\tif (message.partial && !this.options.partials.has(Partial.Message)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.emit(\"messageUpdate\", message);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayDispatchEvents.MessageDelete: {\n\t\t\t\tthis.emit(\"messageDelete\", {\n\t\t\t\t\tid: payload.d.id,\n\t\t\t\t\tchannelId: payload.d.channel_id,\n\t\t\t\t\tguildId: payload.d.guild_id,\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayDispatchEvents.UserUpdate: {\n\t\t\t\tif (payload.d.id === this.#user?.id) {\n\t\t\t\t\tthis.#user = new User(this, payload.d);\n\t\t\t\t}\n\n\t\t\t\tthis.emit(\"userUpdate\", new User(this, payload.d));\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayDispatchEvents.GuildCreate: {\n\t\t\t\tlet guild = this.guilds.get(payload.d.id);\n\n\t\t\t\tif (guild) {\n\t\t\t\t\tguild[\"_patch\"](payload.d);\n\t\t\t\t} else {\n\t\t\t\t\tguild = new Guild(this, payload.d);\n\t\t\t\t}\n\n\t\t\t\tthis.guilds.set(payload.d.id, guild);\n\n\t\t\t\tif (payload.d.unavailable) {\n\t\t\t\t\tthis.emit(\"guildCreate\", guild);\n\t\t\t\t} else {\n\t\t\t\t\tthis.emit(\"guildAvailable\", guild);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayDispatchEvents.GuildDelete: {\n\t\t\t\tconst guild = this.guilds.get(payload.d.id);\n\n\t\t\t\tif (!guild) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.guilds.delete(payload.d.id);\n\t\t\t\tthis.emit(\"guildDelete\", guild);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayDispatchEvents.GuildUpdate: {\n\t\t\t\tlet guild = this.guilds.get(payload.d.id);\n\n\t\t\t\tif (guild) {\n\t\t\t\t\tguild._patch(payload.d);\n\t\t\t\t} else {\n\t\t\t\t\tguild = new Guild(this, payload.d);\n\t\t\t\t\tthis.guilds.set(payload.d.id, guild);\n\t\t\t\t}\n\n\t\t\t\tthis.emit(\"guildUpdate\", guild);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayDispatchEvents.ChannelCreate: {\n\t\t\t\tconst channel = createChannel(this, payload.d);\n\n\t\t\t\tif (!channel) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (channel.inGuild()) {\n\t\t\t\t\tchannel.guild.channels.set(channel.id, channel);\n\t\t\t\t}\n\n\t\t\t\tthis.emit(\"channelCreate\", channel);\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayDispatchEvents.ChannelUpdate: {\n\t\t\t\tconst guild = this.guilds.get(payload.d.guild_id);\n\n\t\t\t\tif (!guild) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet channel: Channel | null | undefined = guild.channels.get(payload.d.id);\n\n\t\t\t\tif (!channel) {\n\t\t\t\t\tchannel = createChannel(this, payload.d);\n\n\t\t\t\t\tif (!channel) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tguild.channels.set(payload.d.id, channel);\n\t\t\t\t} else {\n\t\t\t\t\tchannel._patch(payload.d);\n\t\t\t\t}\n\n\t\t\t\tthis.emit(\"channelUpdate\", channel);\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase GatewayDispatchEvents.ChannelDelete: {\n\t\t\t\tconst guild = this.guilds.get(payload.d.guild_id);\n\n\t\t\t\tif (!guild) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst channel = guild.channels.get(payload.d.id);\n\n\t\t\t\tif (!channel) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tguild.channels.delete(payload.d.id);\n\t\t\t\tthis.emit(\"channelDelete\", channel);\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * We use this method to emit ready event only once since we have 2 ways to emit it.\n\t * @private\n\t */\n\t#tryEmitReady() {\n\t\tif (this.#ready || !this.#user || !this.shards.ready) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#ready = true;\n\t\tthis.emit(\"ready\", this.#user!);\n\t}\n}\n\nexport function createClient(options: ClientOptions) {\n\treturn new Client(options);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["#cachedRecipients","#initRecipientsCache","#ensureChannelCache","#cachedAuthor","#initChannels","#setupSweepTTL","#sweepTimer","#users","#sweepers","#messages","onCreateAndUpdate","REST","ShardingManager","#setupShardsListeners","#user","#handleDispatch","#tryEmitReady","#ready"],"sources":["../src/lib/structures/BaseStructure.ts","../src/lib/structures/User.ts","../src/lib/structures/channel/BaseChannel.ts","../src/lib/mixins/ChannelMixin.ts","../src/lib/structures/channel/DMChannel.ts","../src/lib/structures/Message.ts","../src/lib/structures/channel/GuildTextChannel.ts","../src/lib/structures/channel/GuildVoiceChannel.ts","../src/lib/utils/channel.ts","../src/lib/structures/Guild.ts","../src/lib/client/ClientHelper.ts","../src/lib/client/Partial.ts","../src/lib/utils/IntentsBitField.ts","../src/lib/utils/cache/adapters/BaseCacheAdapter.ts","../src/lib/utils/cache/adapters/LocalCacheAdapter.ts","../src/lib/utils/cache/HybridCache.ts","../src/lib/client/ClientCacheManager.ts","../src/lib/client/dispatches/registry.ts","../src/lib/client/dispatches/handlers/message.ts","../src/lib/client/dispatches/handlers/guild.ts","../src/lib/client/dispatches/handlers/channel.ts","../src/lib/client/dispatches/handlers/user.ts","../src/lib/client/Client.ts"],"sourcesContent":["import type { Client } from \"../client/Client.js\";\n\nexport class BaseStructure {\n\tdeclare public client: Client<true>;\n\n\tpublic constructor(client: Client<true>) {\n\t\tObject.defineProperty(this, \"client\", {\n\t\t\tvalue: client,\n\t\t\tenumerable: false,\n\t\t\twritable: false,\n\t\t});\n\t}\n\n\tpublic toJSON() {\n\t\treturn {};\n\t}\n}\n","import { getSnowflakeDate } from \"@bakit/utils\";\nimport { BaseStructure } from \"./BaseStructure.js\";\n\nimport type { Client } from \"../client/Client.js\";\nimport type { APIUser, GatewayReadyDispatchData } from \"discord-api-types/v10\";\nimport type { MessageCreateOptions } from \"../client/ClientHelper.js\";\n\nexport type UserPayload = APIUser | GatewayReadyDispatchData[\"user\"];\n\nexport class User extends BaseStructure {\n\tpublic constructor(\n\t\tclient: Client,\n\t\tpublic data: UserPayload,\n\t) {\n\t\tsuper(client);\n\t}\n\n\tpublic get id() {\n\t\treturn this.data.id;\n\t}\n\n\tpublic get username() {\n\t\treturn this.data.username;\n\t}\n\n\tpublic get discriminator() {\n\t\treturn this.data.discriminator;\n\t}\n\n\tpublic get globalName() {\n\t\treturn this.data.global_name;\n\t}\n\n\tpublic get tag() {\n\t\tconst hasDiscriminator = this.discriminator !== \"0\" && this.discriminator !== \"0000\";\n\t\treturn hasDiscriminator ? `${this.username}#${this.discriminator}` : this.username;\n\t}\n\n\tpublic get displayName() {\n\t\treturn this.globalName ?? this.tag;\n\t}\n\n\tpublic get avatar() {\n\t\treturn this.data.avatar ?? undefined;\n\t}\n\n\tpublic get bot() {\n\t\treturn !!this.data.bot;\n\t}\n\n\tpublic get system() {\n\t\treturn !!this.data.system;\n\t}\n\n\tpublic get mfaEnabled() {\n\t\treturn this.data.mfa_enabled;\n\t}\n\n\tpublic get locale() {\n\t\treturn this.data.locale;\n\t}\n\n\tpublic get verified() {\n\t\treturn this.data.verified;\n\t}\n\n\tpublic get email() {\n\t\treturn this.data.email;\n\t}\n\n\tpublic get flags() {\n\t\treturn this.data.flags;\n\t}\n\n\tpublic get premiumType() {\n\t\treturn this.data.premium_type;\n\t}\n\n\tpublic get publicFlags() {\n\t\treturn this.data.public_flags;\n\t}\n\n\tpublic get banner() {\n\t\treturn this.data.banner;\n\t}\n\n\tpublic get accentColor() {\n\t\treturn this.data.accent_color ?? undefined;\n\t}\n\n\tpublic get createdAt() {\n\t\treturn getSnowflakeDate(this.id);\n\t}\n\n\tpublic get createdTimestamp() {\n\t\treturn this.createdAt.getTime();\n\t}\n\n\tpublic get hexAccentColor() {\n\t\treturn this.accentColor !== undefined ? `#${this.accentColor.toString(16).padStart(6, \"0\")}` : undefined;\n\t}\n\n\tpublic get defaultAvatarURL() {\n\t\t// For users on the new username system, index will be (user_id >> 22) % 6.\n\t\t// For users on the legacy username system, index will be discriminator % 5.\n\t\tconst hasDiscriminator = this.discriminator !== \"0\" && this.discriminator !== \"0000\";\n\t\tconst index = hasDiscriminator ? BigInt(this.discriminator) % 5n : (BigInt(this.id) >> 22n) % 6n;\n\n\t\treturn `https://cdn.discordapp.com/embed/avatars/${index}.png`;\n\t}\n\n\tpublic getAvatarURL(options?: { size?: number; extension?: \"png\" | \"jpg\" | \"webp\" | \"gif\" }): string | undefined {\n\t\tif (!this.avatar) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst isAnimated = this.avatar.startsWith(\"a_\");\n\t\tconst ext = options?.extension ?? (isAnimated ? \"gif\" : \"png\");\n\n\t\tconst size = options?.size ? `?size=${options.size}` : \"\";\n\n\t\treturn `https://cdn.discordapp.com/avatars/${this.id}/${this.avatar}.${ext}${size}`;\n\t}\n\n\tpublic getDisplayAvatarURL(options?: { size?: number; extension?: \"png\" | \"jpg\" | \"webp\" | \"gif\" }) {\n\t\treturn this.getAvatarURL(options) ?? this.defaultAvatarURL;\n\t}\n\n\tpublic equals(other: User | string) {\n\t\tif (typeof other === \"string\") {\n\t\t\treturn other === this.id;\n\t\t}\n\n\t\treturn (\n\t\t\tother.id === this.id &&\n\t\t\tother.username === this.username &&\n\t\t\tother.discriminator === this.discriminator &&\n\t\t\tother.bot === this.bot &&\n\t\t\tother.createdTimestamp === this.createdTimestamp\n\t\t);\n\t}\n\n\tpublic async createDM(force = false) {\n\t\treturn this.client.helper.createDM(this.id, force);\n\t}\n\n\tpublic async send(options: MessageCreateOptions | string) {\n\t\tconst dm = await this.createDM();\n\t\treturn await dm.send(options);\n\t}\n\n\tpublic _patch(data: Partial<UserPayload>) {\n\t\tthis.data = { ...this.data, ...data };\n\t}\n\n\tpublic override toJSON() {\n\t\treturn this.data;\n\t}\n\n\tpublic override toString() {\n\t\treturn `<@${this.id}>`;\n\t}\n}\n","import { BaseStructure } from \"../BaseStructure.js\";\n\nimport type { Client } from \"../../client/Client.js\";\nimport {\n\tChannelType,\n\ttype APIChannel,\n\ttype APIChannelBase,\n\ttype GatewayChannelCreateDispatchData,\n\ttype GatewayChannelUpdateDispatchData,\n} from \"discord-api-types/v10\";\n\nimport type { GuildTextChannel } from \"./GuildTextChannel.js\";\nimport type { GuildVoiceChannel } from \"./GuildVoiceChannel.js\";\nimport type { DMChannel } from \"./DMChannel.js\";\n\nexport type BaseChannelPayload =\n\t| APIChannelBase<ChannelType>\n\t| GatewayChannelCreateDispatchData\n\t| GatewayChannelUpdateDispatchData\n\t| APIChannel;\n\nexport type TextBasedChannel = GuildTextChannel | GuildVoiceChannel | DMChannel;\nexport type VoiceBasedChannel = GuildVoiceChannel;\nexport type GuildChannel = GuildTextChannel | GuildVoiceChannel;\n\nexport type Channel = TextBasedChannel | VoiceBasedChannel | GuildChannel | BaseChannel<BaseChannelPayload>;\n\nexport abstract class BaseChannel<D extends BaseChannelPayload> extends BaseStructure {\n\tpublic constructor(\n\t\tclient: Client,\n\t\tpublic data: D,\n\t) {\n\t\tsuper(client);\n\t}\n\n\tpublic get id() {\n\t\treturn this.data.id;\n\t}\n\n\tpublic get type() {\n\t\treturn this.data.type;\n\t}\n\n\tpublic override toString() {\n\t\treturn `<#${this.id}>`;\n\t}\n\n\tpublic override toJSON() {\n\t\treturn this.data;\n\t}\n\n\tpublic isTextBased(): this is TextBasedChannel {\n\t\treturn \"send\" in this;\n\t}\n\n\tpublic isVoiceBased(): this is VoiceBasedChannel {\n\t\treturn \"join\" in this;\n\t}\n\n\tpublic isDM(): this is DMChannel {\n\t\treturn this.type === ChannelType.DM;\n\t}\n\n\tpublic inGuild(): this is GuildChannel {\n\t\treturn \"guild_id\" in this.data;\n\t}\n\n\tpublic fetch(): Promise<this> {\n\t\treturn this.client.helper.fetchChannel<this>(this.id, true);\n\t}\n\n\tpublic _patch(data: Partial<D>) {\n\t\tthis.data = { ...this.data, ...data };\n\t}\n}\n","import { createMixin } from \"tiny-mixin\";\n\nimport { type AbstractConstructor } from \"@bakit/utils\";\n\nimport type { BaseChannel } from \"../structures/channel/BaseChannel.js\";\nimport type { MessageCreateOptions } from \"../client/ClientHelper.js\";\nimport type {\n\tAPIGuildChannel,\n\tAPITextBasedChannel,\n\tAPIVoiceChannelBase,\n\tChannelType,\n\tGuildChannelType,\n} from \"discord-api-types/v10\";\n\ntype TextChannelBase = BaseChannel<APITextBasedChannel<ChannelType>>;\ntype VoiceChannelBase = BaseChannel<APIVoiceChannelBase<GuildChannelType>>;\ntype GuildChannelBase = BaseChannel<APIGuildChannel>;\n\nexport const TextBasedChannelMixin = createMixin(<T extends AbstractConstructor<TextChannelBase>>(base: T) => {\n\tabstract class TextBasedChannel extends base {\n\t\tpublic send(options: MessageCreateOptions | string) {\n\t\t\treturn this.client.helper.createMessage(this.id, options);\n\t\t}\n\t}\n\n\treturn TextBasedChannel;\n});\n\n// TODO: add voice methods\nexport const VoiceBasedChannelMixin = createMixin(<T extends AbstractConstructor<VoiceChannelBase>>(base: T) => {\n\tabstract class VoiceBasedChannel extends base {}\n\n\treturn VoiceBasedChannel;\n});\n\nexport const GuildChannelMixin = createMixin(<T extends AbstractConstructor<GuildChannelBase>>(base: T) => {\n\tabstract class GuildChannel extends base {\n\t\tpublic get guildId() {\n\t\t\tif (!this.data.guild_id) {\n\t\t\t\tthrow new Error(\"This channel is not a guild channel\");\n\t\t\t}\n\n\t\t\treturn this.data.guild_id;\n\t\t}\n\n\t\tpublic get guild() {\n\t\t\treturn this.client.cache.guilds.get(this.guildId)!;\n\t\t}\n\t}\n\n\treturn GuildChannel;\n});\n","import { Collection } from \"@discordjs/collection\";\nimport { applyMixins } from \"tiny-mixin\";\n\nimport { BaseChannel } from \"./BaseChannel.js\";\nimport { User } from \"../User.js\";\nimport { TextBasedChannelMixin } from \"@/lib/mixins/ChannelMixin.js\";\n\nimport { Routes, type APIDMChannel, type RESTPostAPICurrentUserCreateDMChannelJSONBody } from \"discord-api-types/v10\";\n\nimport type { Client } from \"@/lib/client/Client.js\";\nimport type { MessageCreateOptions } from \"@/lib/client/ClientHelper.js\";\nimport type { Message } from \"../index.js\";\n\nexport class DMChannel extends applyMixins(BaseChannel<APIDMChannel>, [TextBasedChannelMixin]) {\n\t#cachedRecipients?: Collection<string, User>;\n\n\tpublic constructor(client: Client, data: APIDMChannel) {\n\t\tsuper(client, data);\n\t}\n\n\tpublic get recipients(): Collection<string, User> {\n\t\tif (!this.#cachedRecipients) {\n\t\t\tthis.#cachedRecipients = new Collection();\n\n\t\t\tfor (const recipient of this.data.recipients ?? []) {\n\t\t\t\tlet user: User;\n\n\t\t\t\tif (this.client.cache.isModuleEnabled(\"users\")) {\n\t\t\t\t\tuser = this.client.cache.resolveLocal(\n\t\t\t\t\t\tthis.client.cache.users.local,\n\t\t\t\t\t\trecipient.id,\n\t\t\t\t\t\t() => new User(this.client, recipient),\n\t\t\t\t\t\t(user) => user._patch(recipient),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tuser = new User(this.client, recipient);\n\t\t\t\t}\n\n\t\t\t\tthis.#cachedRecipients.set(recipient.id, user);\n\t\t\t}\n\t\t}\n\n\t\treturn this.#cachedRecipients;\n\t}\n\n\tpublic get recipientId() {\n\t\tconst id = (this.data.recipients ?? []).find((user) => user.id !== this.client.user.id)?.id;\n\n\t\tif (!id) {\n\t\t\tthrow new Error(\"No recipients found\");\n\t\t}\n\n\t\treturn id;\n\t}\n\n\tpublic get recipient() {\n\t\tconst user = this.recipients.get(this.recipientId);\n\n\t\tif (!user) {\n\t\t\tthrow new Error(\"Recipient not found\");\n\t\t}\n\n\t\treturn user;\n\t}\n\n\tpublic override async fetch(): Promise<this> {\n\t\tconst data = await this.client.rest.post<APIDMChannel, RESTPostAPICurrentUserCreateDMChannelJSONBody>(\n\t\t\tRoutes.userChannels(),\n\t\t\t{\n\t\t\t\tbody: {\n\t\t\t\t\trecipient_id: this.recipientId,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\tthis._patch(data);\n\t\tawait this.#initRecipientsCache();\n\n\t\treturn this;\n\t}\n\n\tpublic override send(options: MessageCreateOptions | string): Promise<Message<false>> {\n\t\treturn super.send(options);\n\t}\n\n\tpublic async fetchRecipients(force = false) {\n\t\tif (!force && this.data.recipients?.length) {\n\t\t\tawait this.#initRecipientsCache();\n\t\t\treturn this.#cachedRecipients!;\n\t\t}\n\n\t\tawait this.fetch();\n\t\treturn this.#cachedRecipients;\n\t}\n\n\tasync #initRecipientsCache() {\n\t\tthis.#cachedRecipients = new Collection();\n\n\t\tfor (const recipient of this.data.recipients ?? []) {\n\t\t\tlet user: User;\n\n\t\t\tif (this.client.cache.isModuleEnabled(\"users\")) {\n\t\t\t\tuser = await this.client.cache.resolve(\n\t\t\t\t\tthis.client.cache.users,\n\t\t\t\t\trecipient.id,\n\t\t\t\t\t() => new User(this.client, recipient),\n\t\t\t\t\t(user) => user._patch(recipient),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tuser = new User(this.client, recipient);\n\t\t\t}\n\n\t\t\tthis.#cachedRecipients.set(recipient.id, user);\n\t\t}\n\t}\n\n\tpublic override _patch(data: Partial<APIDMChannel>): void {\n\t\tsuper._patch(data);\n\t\tthis.#cachedRecipients = undefined;\n\t}\n}\n","import { BaseStructure } from \"./BaseStructure.js\";\nimport { User } from \"./User.js\";\nimport { DMChannel } from \"./channel/DMChannel.js\";\n\nimport type { Client } from \"../client/Client.js\";\nimport {\n\tChannelType,\n\ttype APIMessage,\n\ttype GatewayMessageCreateDispatchData,\n\ttype GatewayMessageUpdateDispatchData,\n} from \"discord-api-types/v10\";\nimport type { MessageEditOptions, MessageReplyOptions } from \"../client/ClientHelper.js\";\nimport type { Channel, GuildChannel, TextBasedChannel } from \"./channel/BaseChannel.js\";\nimport type { Guild } from \"./Guild.js\";\n\nexport type MessagePayload = APIMessage | GatewayMessageCreateDispatchData | GatewayMessageUpdateDispatchData;\n\nexport class Message<InGuild extends boolean = boolean> extends BaseStructure {\n\t#cachedAuthor?: User;\n\n\tpublic constructor(\n\t\tclient: Client,\n\t\tpublic data: MessagePayload,\n\t) {\n\t\tsuper(client);\n\t\tthis.#ensureChannelCache();\n\t}\n\n\tpublic get partial() {\n\t\treturn typeof this.data.content !== \"string\" || typeof this.data.author !== \"object\";\n\t}\n\n\tpublic get content() {\n\t\treturn this.data.content;\n\t}\n\n\tpublic get id() {\n\t\treturn this.data.id;\n\t}\n\n\tpublic get channelId() {\n\t\treturn this.data.channel_id;\n\t}\n\n\tpublic get channel(): InGuild extends true ? TextBasedChannel & GuildChannel : TextBasedChannel {\n\t\treturn this.#ensureChannelCache() as InGuild extends true ? TextBasedChannel & GuildChannel : TextBasedChannel;\n\t}\n\n\tpublic get guildId(): InGuild extends true ? string : undefined {\n\t\tconst guildId = \"guild_id\" in this.data ? this.data.guild_id : undefined;\n\t\treturn guildId as InGuild extends true ? string : undefined;\n\t}\n\n\tpublic get guild(): InGuild extends true ? Guild : undefined {\n\t\tconst guild = this.guildId ? this.client.cache.guilds.get(this.guildId) : undefined;\n\t\treturn guild as InGuild extends true ? Guild : undefined;\n\t}\n\n\t/**\n\t * The author of this message.\n\t *\n\t * **Note:** This property returns the cached `User` synchronously.\n\t * It may be stale if the users cache has short lifetime or uses an asynchronous remote store.\n\t * To ensure the author is up-to-date, use the `fetchAuthor()` method instead.\n\t */\n\tpublic get author() {\n\t\tlet author = this.#cachedAuthor;\n\n\t\tif (!author && this.client.cache.isModuleEnabled(\"users\")) {\n\t\t\tauthor = this.client.cache.resolveLocal(\n\t\t\t\tthis.client.cache.users.local,\n\t\t\t\tthis.data.author.id,\n\t\t\t\t() => new User(this.client, this.data.author),\n\t\t\t\t(user) => user._patch(this.data.author),\n\t\t\t);\n\t\t}\n\n\t\tif (!author) {\n\t\t\tauthor = new User(this.client, this.data.author);\n\t\t}\n\n\t\tthis.#cachedAuthor = author;\n\n\t\treturn this.#cachedAuthor;\n\t}\n\n\tpublic get createdAt() {\n\t\treturn new Date(this.data.timestamp);\n\t}\n\n\tpublic get editedAt() {\n\t\treturn this.data.edited_timestamp ? new Date(this.data.edited_timestamp) : undefined;\n\t}\n\n\tpublic get createdTimestamp() {\n\t\treturn this.createdAt.getTime();\n\t}\n\n\tpublic get editedTimestamp() {\n\t\treturn this.editedAt?.getTime();\n\t}\n\n\tpublic get url() {\n\t\treturn `https://discord.com/channels/${this.guildId ?? \"@me\"}/${this.channelId}/${this.id}`;\n\t}\n\n\tpublic inGuild(): this is Message<true> {\n\t\treturn this.guild !== undefined;\n\t}\n\n\tpublic async fetch(): Promise<Message> {\n\t\tconst message = await this.client.helper.fetchMessage(this.channelId, this.id);\n\n\t\tthis.data = message.data;\n\t\tthis.#cachedAuthor = await this.client.cache.resolve(\n\t\t\tthis.client.cache.users,\n\t\t\tmessage.data.author.id,\n\t\t\t() => new User(this.client, message.data.author),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Fetches the author of this message from cache or Discord API.\n\t *\n\t * **Note:** It is recommended to use this method instead of the `author` property\n\t * if the users cache has short lifetime or is backed by an asynchronous remote cache.\n\t *\n\t * @param force - Whether to bypass the cache and force a request to the API.\n\t * @returns A promise that resolves to the `User` who authored this message.\n\t */\n\tpublic async fetchAuthor(force = false) {\n\t\tif (!force && this.client.cache.isModuleEnabled(\"users\")) {\n\t\t\treturn this.client.cache.resolve(\n\t\t\t\tthis.client.cache.users,\n\t\t\t\tthis.data.author.id,\n\t\t\t\t() => new User(this.client, this.data.author),\n\t\t\t\t(user) => user._patch(this.data.author),\n\t\t\t);\n\t\t}\n\n\t\treturn this.client.helper.fetchUser(this.data.author.id, force);\n\t}\n\n\tpublic async reply(options: MessageReplyOptions) {\n\t\treturn this.client.helper.replyMessage(this.channelId, this.id, options);\n\t}\n\n\tpublic async sendToChannel(options: MessageReplyOptions) {\n\t\treturn this.client.helper.createMessage(this.channelId, options);\n\t}\n\n\tpublic async edit(options: MessageEditOptions | string) {\n\t\treturn this.client.helper.editMessage(this.channelId, this.id, options);\n\t}\n\n\tpublic async _patch(data: Partial<MessagePayload>) {\n\t\tthis.data = { ...this.data, ...data };\n\n\t\tif (data.author && this.client.cache.isModuleEnabled(\"users\")) {\n\t\t\tif (this.client.cache.isModuleEnabled(\"users\")) {\n\t\t\t\tthis.#cachedAuthor = await this.client.cache.resolve(\n\t\t\t\t\tthis.client.cache.users,\n\t\t\t\t\tdata.author.id,\n\t\t\t\t\t() => new User(this.client, data.author!),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.#cachedAuthor?._patch(data.author);\n\t\t\t}\n\t\t}\n\t}\n\n\t#ensureChannelCache() {\n\t\tconst { client } = this;\n\n\t\tlet channel: Channel | undefined = client.cache.channels.get(this.channelId);\n\n\t\tif (!channel) {\n\t\t\tif (this.inGuild()) {\n\t\t\t\tchannel = this.guild!.channels.get(this.channelId);\n\t\t\t} else {\n\t\t\t\tchannel = new DMChannel(client, {\n\t\t\t\t\tid: this.channelId,\n\t\t\t\t\ttype: ChannelType.DM,\n\t\t\t\t\tname: null,\n\t\t\t\t\trecipients: [this.data.author, this.client.user.data],\n\t\t\t\t});\n\n\t\t\t\tconsole.log(channel);\n\t\t\t}\n\t\t}\n\n\t\tif (!channel) {\n\t\t\tthrow new Error(`Channel not found: ${this.channelId}`);\n\t\t}\n\n\t\tclient.cache.channels.set(this.channelId, channel);\n\t\treturn channel;\n\t}\n\n\tpublic override toJSON() {\n\t\treturn this.data;\n\t}\n\n\tpublic override toString() {\n\t\treturn this.data.content;\n\t}\n}\n","import { BaseChannel } from \"./BaseChannel.js\";\nimport { GuildChannelMixin, TextBasedChannelMixin } from \"@/lib/mixins/ChannelMixin.js\";\nimport { applyMixins } from \"tiny-mixin\";\n\nimport type { APITextBasedChannel, ChannelType } from \"discord-api-types/v10\";\n\nexport class GuildTextChannel extends applyMixins(BaseChannel<APITextBasedChannel<ChannelType.GuildText>>, [\n\tGuildChannelMixin,\n\tTextBasedChannelMixin,\n]) {}\n","import { applyMixins } from \"tiny-mixin\";\nimport { BaseChannel } from \"./BaseChannel.js\";\nimport { GuildChannelMixin, TextBasedChannelMixin, VoiceBasedChannelMixin } from \"@/lib/mixins/ChannelMixin.js\";\nimport type { APIGuildVoiceChannel } from \"discord-api-types/v10\";\n\nexport class GuildVoiceChannel extends applyMixins(BaseChannel<APIGuildVoiceChannel>, [\n\tGuildChannelMixin,\n\tTextBasedChannelMixin,\n\tVoiceBasedChannelMixin,\n]) {}\n","import { GuildTextChannel, GuildVoiceChannel, type BaseChannelPayload } from \"../structures/index.js\";\nimport {\n\tChannelType,\n\ttype APIDMChannel,\n\ttype APITextBasedChannel,\n\ttype APIVoiceChannelBase,\n} from \"discord-api-types/v10\";\n\nimport { DMChannel } from \"../structures/channel/DMChannel.js\";\n\nimport type { Client } from \"../client/Client.js\";\n\nexport function createChannel(client: Client, data: BaseChannelPayload) {\n\tswitch (data.type) {\n\t\tcase ChannelType.GuildText:\n\t\t\treturn new GuildTextChannel(client, data as APITextBasedChannel<ChannelType.GuildText>);\n\t\tcase ChannelType.GuildVoice:\n\t\t\treturn new GuildVoiceChannel(client, data as APIVoiceChannelBase<ChannelType.GuildVoice>);\n\t\tcase ChannelType.DM:\n\t\t\treturn new DMChannel(client, data as APIDMChannel);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import { Collection } from \"@discordjs/collection\";\n\nimport { BaseStructure } from \"./BaseStructure.js\";\n\nimport { createChannel } from \"../utils/channel.js\";\n\nimport type { Client } from \"../client/Client.js\";\nimport type { APIGuild, GatewayGuildCreateDispatchData, GatewayGuildUpdateDispatchData } from \"discord-api-types/v10\";\nimport type { Channel } from \"./channel/BaseChannel.js\";\n\nexport type GuildPayload = APIGuild | GatewayGuildUpdateDispatchData | GatewayGuildCreateDispatchData;\n\nexport class Guild extends BaseStructure {\n\tpublic readonly channels = new Collection<string, Channel>();\n\n\tpublic constructor(\n\t\tclient: Client,\n\t\tpublic data: GuildPayload,\n\t) {\n\t\tsuper(client);\n\n\t\tthis.#initChannels();\n\t}\n\n\tpublic get id() {\n\t\treturn this.data.id;\n\t}\n\n\tpublic get name() {\n\t\treturn this.data.name;\n\t}\n\n\tpublic get icon() {\n\t\treturn this.data.icon;\n\t}\n\n\tpublic get banner() {\n\t\treturn this.data.banner;\n\t}\n\n\tpublic get owner() {\n\t\treturn this.data.owner_id;\n\t}\n\n\tpublic get mfaLevel() {\n\t\treturn this.data.mfa_level;\n\t}\n\n\tpublic get verificationLevel() {\n\t\treturn this.data.verification_level;\n\t}\n\n\tpublic _patch(data: Partial<GuildPayload>) {\n\t\tthis.data = { ...this.data, ...data };\n\t\tthis.#initChannels();\n\t}\n\n\t#initChannels() {\n\t\tif (!(\"channels\" in this.data)) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const id of this.channels.keys()) {\n\t\t\tthis.client.cache.channels.delete(id);\n\t\t}\n\n\t\tthis.channels.clear();\n\n\t\tfor (const channelData of this.data.channels) {\n\t\t\tconst channel = createChannel(this.client, channelData);\n\n\t\t\tif (channel) {\n\t\t\t\tthis.channels.set(channel.id, channel);\n\t\t\t\tthis.client.cache.channels.set(channel.id, channel);\n\t\t\t}\n\t\t}\n\t}\n\n\t// public get roles() {\n\t// \treturn this.data.roles;\n\t// }\n}\n","import { type APIUser, Routes } from \"discord-api-types/v10\";\n\nimport { Message } from \"../structures/Message.js\";\nimport { Guild } from \"../structures/Guild.js\";\n\nimport type { Client } from \"./Client.js\";\nimport type {\n\tAPIAllowedMentions,\n\tAPIEmbed,\n\tAPIMessageReference,\n\tAPIMessage,\n\tAPIGuild,\n\tAPIChannel,\n\tAPIDMChannel,\n\tRESTPostAPICurrentUserCreateDMChannelJSONBody,\n\tRESTPatchAPIChannelMessageJSONBody,\n} from \"discord-api-types/v10\";\nimport { createChannel } from \"../utils/channel.js\";\nimport { User } from \"../structures/User.js\";\nimport type { Channel } from \"../structures/index.js\";\nimport { DMChannel } from \"../structures/channel/DMChannel.js\";\n\nexport interface MessageCreateOptions {\n\tcontent?: string;\n\ttts?: boolean;\n\n\tembeds?: APIEmbed[];\n\n\tallowedMentions?: APIAllowedMentions;\n\tmessageReference?: APIMessageReference;\n\n\tflags?: number;\n}\n\nexport type MessageReplyOptions = Omit<MessageCreateOptions, \"messageReference\">;\nexport type MessageEditOptions = Omit<MessageCreateOptions, \"messageReference\">;\n\nexport class ClientHelper {\n\tdeclare public readonly client: Client;\n\n\tpublic constructor(client: Client) {\n\t\tObject.defineProperty(this, \"client\", {\n\t\t\tvalue: client,\n\t\t\tenumerable: false,\n\t\t\twritable: false,\n\t\t});\n\t}\n\n\tpublic async fetchUser(userId: string, force = false): Promise<User> {\n\t\tlet user: User | undefined;\n\n\t\tif (this.client.cache.isModuleEnabled(\"users\")) {\n\t\t\tuser = await this.client.cache.users.get(userId);\n\t\t}\n\n\t\tif (!user || force) {\n\t\t\tconst data = await this.client.rest.get<APIUser>(Routes.user(userId));\n\n\t\t\tif (this.client.cache.isModuleEnabled(\"users\")) {\n\t\t\t\tuser = await this.client.cache.resolve(\n\t\t\t\t\tthis.client.cache.users,\n\t\t\t\t\tuserId,\n\t\t\t\t\t() => new User(this.client, data),\n\t\t\t\t\t(u) => u!._patch(data),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tuser = new User(this.client, data);\n\t\t\t}\n\t\t}\n\n\t\treturn user;\n\t}\n\n\tpublic async createDM(userId: string, force = false): Promise<DMChannel> {\n\t\tif (!force) {\n\t\t\tconst channel = this.client.cache.channels.find((c) => c.isDM() && c.recipientId === userId);\n\n\t\t\tif (channel && channel.isDM()) {\n\t\t\t\treturn channel;\n\t\t\t}\n\t\t}\n\n\t\tconst data = await this.client.rest.post<APIDMChannel, RESTPostAPICurrentUserCreateDMChannelJSONBody>(\n\t\t\tRoutes.userChannels(),\n\t\t\t{\n\t\t\t\tbody: { recipient_id: userId },\n\t\t\t},\n\t\t);\n\n\t\tconst channel = new DMChannel(this.client, data);\n\n\t\tawait channel.fetchRecipients();\n\t\tthis.client.cache.channels.set(channel.id, channel);\n\n\t\treturn channel;\n\t}\n\n\tpublic async fetchMessage(channelId: string, messageId: string, force = false) {\n\t\tlet message: Message | undefined;\n\n\t\tif (this.client.cache.isModuleEnabled(\"messages\")) {\n\t\t\tmessage = await this.client.cache.messages.get(messageId);\n\t\t}\n\n\t\tif (!message || force) {\n\t\t\tconst data = await this.client.rest.get<APIMessage>(Routes.channelMessage(channelId, messageId));\n\n\t\t\tif (this.client.cache.isModuleEnabled(\"messages\")) {\n\t\t\t\tmessage = await this.client.cache.resolve(\n\t\t\t\t\tthis.client.cache.messages,\n\t\t\t\t\tmessageId,\n\t\t\t\t\t() => new Message(this.client, data),\n\t\t\t\t\t(m) => m._patch(data),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmessage = new Message(this.client, data);\n\t\t\t}\n\t\t}\n\n\t\treturn message;\n\t}\n\n\tpublic async deleteMessage(channelId: string, messageId: string) {\n\t\tawait this.client.rest.delete(Routes.channelMessage(channelId, messageId));\n\n\t\tif (this.client.cache.isModuleEnabled(\"messages\")) {\n\t\t\tawait this.client.cache.messages.delete(messageId);\n\t\t}\n\t}\n\n\tpublic async createMessage(channelId: string, options: MessageCreateOptions | string) {\n\t\tif (typeof options === \"string\") {\n\t\t\toptions = { content: options };\n\t\t}\n\n\t\tconst data = this.client.rest.post<APIMessage>(Routes.channelMessages(channelId), {\n\t\t\tbody: ClientHelper.toAPICreateMessagePayload(options),\n\t\t});\n\n\t\tconst message = new Message(this.client, await data);\n\n\t\tif (this.client.cache.isModuleEnabled(\"messages\")) {\n\t\t\tawait this.client.cache.messages.set(message.id, message);\n\t\t}\n\n\t\treturn message;\n\t}\n\n\tpublic async editMessage(channelId: string, messageId: string, options: MessageEditOptions | string) {\n\t\tif (typeof options === \"string\") {\n\t\t\toptions = { content: options };\n\t\t}\n\n\t\tconst data = await this.client.rest.patch<APIMessage, RESTPatchAPIChannelMessageJSONBody>(\n\t\t\tRoutes.channelMessage(channelId, messageId),\n\t\t\t{\n\t\t\t\tbody: ClientHelper.toAPICreateMessagePayload(options),\n\t\t\t},\n\t\t);\n\n\t\tlet message: Message;\n\n\t\tif (this.client.cache.isModuleEnabled(\"messages\")) {\n\t\t\tmessage = await this.client.cache.resolve(\n\t\t\t\tthis.client.cache.messages,\n\t\t\t\tmessageId,\n\t\t\t\t() => new Message(this.client, data),\n\t\t\t\t(m) => m._patch(data),\n\t\t\t);\n\t\t} else {\n\t\t\tmessage = new Message(this.client, data);\n\t\t}\n\n\t\treturn message;\n\t}\n\n\tpublic async replyMessage(channelId: string, messageId: string, options: MessageReplyOptions) {\n\t\treturn this.createMessage(channelId, {\n\t\t\t...options,\n\t\t\tmessageReference: {\n\t\t\t\tchannel_id: channelId,\n\t\t\t\tmessage_id: messageId,\n\t\t\t},\n\t\t});\n\t}\n\n\tpublic async fetchGuild(guildId: string, force = false) {\n\t\tlet guild = this.client.cache.guilds.get(guildId);\n\n\t\tif (!guild || force) {\n\t\t\tconst data = await this.client.rest.get<APIGuild>(Routes.guild(guildId));\n\t\t\tguild = new Guild(this.client, data);\n\n\t\t\tthis.client.cache.guilds.set(guildId, guild);\n\t\t}\n\n\t\treturn guild;\n\t}\n\n\tpublic async fetchChannel<C extends Channel>(channelId: string, force = false): Promise<C> {\n\t\tlet channel = this.client.cache.channels.get(channelId);\n\n\t\tif (!channel || force) {\n\t\t\tconst data = await this.client.rest.get<APIChannel>(Routes.channel(channelId));\n\t\t\tchannel = createChannel(this.client, data) ?? undefined;\n\n\t\t\tif (!channel) {\n\t\t\t\tthrow new Error(`Channel not found: ${channelId}`);\n\t\t\t}\n\n\t\t\tthis.client.cache.channels.set(channelId, channel);\n\n\t\t\tif (channel.inGuild()) {\n\t\t\t\tchannel.guild.channels.set(channelId, channel);\n\t\t\t}\n\t\t}\n\n\t\treturn channel as C;\n\t}\n\n\tpublic static toAPICreateMessagePayload(options: MessageCreateOptions) {\n\t\treturn {\n\t\t\tcontent: options.content,\n\t\t\ttts: options.tts,\n\t\t\tembeds: options.embeds,\n\t\t\tallowed_mentions: options.allowedMentions,\n\t\t\tmessage_reference: options.messageReference,\n\t\t\tflags: options.flags,\n\t\t};\n\t}\n}\n","export enum Partial {\n\tMessage,\n\tUser,\n}\n","import { GatewayIntentBits } from \"discord-api-types/v10\";\n\nexport type IntentResolvable = number | bigint | GatewayIntentBits | GatewayIntentBits[];\n\nexport class IntentsBitField {\n\tprivate readonly value: bigint;\n\n\tpublic constructor(input: IntentResolvable) {\n\t\tthis.value = IntentsBitField.resolve(input);\n\t}\n\n\tpublic static resolve(input: IntentResolvable): bigint {\n\t\tif (Array.isArray(input)) {\n\t\t\treturn input.reduce((acc, intent) => acc | BigInt(intent), 0n);\n\t\t}\n\n\t\treturn BigInt(input);\n\t}\n\n\tpublic has(intent: GatewayIntentBits): boolean {\n\t\treturn (this.value & BigInt(intent)) !== 0n;\n\t}\n\n\tpublic toBigInt(): bigint {\n\t\treturn this.value;\n\t}\n\n\tpublic toNumber(): number {\n\t\treturn Number(this.value);\n\t}\n\n\tpublic toJSON(): string {\n\t\treturn this.value.toString();\n\t}\n\n\tpublic toString(): string {\n\t\treturn this.value.toString();\n\t}\n}\n","import type { Awaitable } from \"@bakit/utils\";\n\nexport abstract class BaseCacheAdapter<Key, Value> {\n\tpublic abstract get(key: Key): Awaitable<Value | undefined>;\n\tpublic abstract set(key: Key, value: Value, ttl?: number): Awaitable<void>;\n\tpublic abstract delete(key: Key): Awaitable<void>;\n\tpublic abstract clear(): Awaitable<void>;\n\tpublic abstract has(key: Key): Awaitable<boolean>;\n\tpublic abstract sweep(filter: (data: Value) => boolean): Awaitable<void>;\n}\n","import { Collection } from \"@discordjs/collection\";\nimport { BaseCacheAdapter } from \"./BaseCacheAdapter.js\";\n\nexport interface LocalCacheTTLEntry<Value> {\n\tvalue: Value;\n\texpiresAt?: number;\n}\n\nexport class LocalCacheAdapter<Key, Value> extends BaseCacheAdapter<Key, Value> {\n\tpublic collection = new Collection<Key, LocalCacheTTLEntry<Value>>();\n\n\t#sweepTimer?: NodeJS.Timeout;\n\n\tpublic get(key: Key): Value | undefined {\n\t\tconst entry = this.collection.get(key);\n\n\t\tif (!entry) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (entry.expiresAt && entry.expiresAt < Date.now()) {\n\t\t\tthis.collection.delete(key);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tthis.#setupSweepTTL();\n\n\t\treturn entry.value;\n\t}\n\n\tpublic set(key: Key, value: Value, ttl?: number): void {\n\t\tconst expiresAt = ttl ? Date.now() + ttl : undefined;\n\n\t\tthis.collection.set(key, {\n\t\t\tvalue,\n\t\t\texpiresAt,\n\t\t});\n\n\t\tthis.#setupSweepTTL();\n\t}\n\n\tpublic delete(key: Key): void {\n\t\tthis.#setupSweepTTL();\n\t\tthis.collection.delete(key);\n\t}\n\n\tpublic clear(): void {\n\t\tthis.collection.clear();\n\n\t\tclearTimeout(this.#sweepTimer);\n\t\tthis.#sweepTimer = undefined;\n\t}\n\n\tpublic has(key: Key): boolean {\n\t\tthis.#setupSweepTTL();\n\t\treturn this.get(key) !== undefined;\n\t}\n\n\tpublic find(filter: (data: Value) => boolean): Value | undefined {\n\t\tfor (const entry of this.collection.values()) {\n\t\t\tif (filter(entry.value)) {\n\t\t\t\treturn entry.value;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tpublic sweep(filter: (data: Value) => boolean): void {\n\t\tfor (const [key, entry] of this.collection) {\n\t\t\tif (filter(entry.value)) {\n\t\t\t\tthis.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic sweepTTL() {\n\t\tfor (const [key, entry] of this.collection) {\n\t\t\tif (entry.expiresAt && entry.expiresAt < Date.now()) {\n\t\t\t\tthis.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\t#setupSweepTTL() {\n\t\tif (!this.collection.size) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.#sweepTimer) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#sweepTimer = setTimeout(() => {\n\t\t\tthis.#sweepTimer = undefined;\n\t\t\tthis.sweepTTL();\n\t\t\tthis.#setupSweepTTL();\n\t\t}, 1000);\n\t}\n}\n","import { LocalCacheAdapter } from \"./adapters/LocalCacheAdapter.js\";\n\nimport type { BaseCacheAdapter } from \"./adapters/BaseCacheAdapter.js\";\n\nexport class HybridCache<Key, Value> {\n\tpublic local = new LocalCacheAdapter<Key, Value>();\n\n\tpublic constructor(\n\t\tpublic remote?: BaseCacheAdapter<Key, Value>,\n\t\tpublic defaultTTL?: number,\n\t) {}\n\n\tpublic async get(key: Key): Promise<Value | undefined> {\n\t\tconst local = this.local.get(key);\n\n\t\tif (local !== undefined) {\n\t\t\treturn local;\n\t\t}\n\n\t\tconst remote = await this.remote?.get(key);\n\n\t\tif (remote !== undefined) {\n\t\t\tthis.local.set(key, remote);\n\t\t}\n\n\t\treturn remote;\n\t}\n\n\tpublic async sweep(filter: (data: Value) => boolean): Promise<void> {\n\t\tthis.local.sweep(filter);\n\t\tawait this.remote?.sweep(filter);\n\t}\n\n\tpublic async set(key: Key, value: Value, ttl = this.defaultTTL): Promise<void> {\n\t\tthis.local.set(key, value, ttl);\n\t\tawait this.remote?.set(key, value, ttl);\n\t}\n\n\tpublic async delete(key: Key): Promise<void> {\n\t\tthis.local.delete(key);\n\t\tawait this.remote?.delete(key);\n\t}\n\n\tpublic async clear(): Promise<void> {\n\t\tthis.local.clear();\n\t\tawait this.remote?.clear();\n\t}\n\n\tpublic async has(key: Key): Promise<boolean> {\n\t\treturn (await this.get(key)) !== undefined;\n\t}\n}\n","import { Collection } from \"@discordjs/collection\";\nimport type { Channel, Guild, Message } from \"../structures/index.js\";\nimport type { User } from \"../structures/User.js\";\n\nimport { BaseCacheAdapter, HybridCache, LocalCacheAdapter } from \"../utils/index.js\";\n\nexport interface ClientCacheManagerOptions {\n\tusers?: ClientModuleCacheOptions<User> | boolean;\n\tmessages?: ClientModuleCacheOptions<Message> | boolean;\n}\n\nexport interface ClientModuleCacheOptions<Value> {\n\tenabled: boolean;\n\tadapter?: BaseCacheAdapter<string, Value>;\n\tttl?: number;\n\tsweeper?: ClientModuleCacheSweeperOptions<Value>;\n}\n\nexport interface ClientModuleCacheSweeperOptions<Value> {\n\tinterval: number;\n\tfilter: (data: Value) => boolean;\n}\n\nexport class ClientCacheManager {\n\tpublic channels = new LocalCacheAdapter<string, Channel>();\n\tpublic guilds = new LocalCacheAdapter<string, Guild>();\n\n\t#users?: HybridCache<string, User>;\n\t#messages?: HybridCache<string, Message>;\n\n\t#sweepers = new Collection<keyof ClientCacheManagerOptions, NodeJS.Timeout>();\n\n\tpublic constructor(public options: ClientCacheManagerOptions) {}\n\n\tpublic get users() {\n\t\tlet options: ClientModuleCacheOptions<User>;\n\n\t\tif (typeof this.options.users === \"object\") {\n\t\t\toptions = this.options.users;\n\t\t} else {\n\t\t\toptions = { enabled: !!this.options.users };\n\t\t}\n\n\t\tif (!options.enabled) {\n\t\t\tthrow new Error(\"User cache is disabled\");\n\t\t}\n\n\t\tif (!this.#users) {\n\t\t\tthis.#users = new HybridCache(options.adapter, options.ttl);\n\t\t}\n\n\t\tif (options.sweeper) {\n\t\t\tthis.#sweepers.set(\n\t\t\t\t\"users\",\n\t\t\t\tsetInterval(() => this.#users!.sweep(options.sweeper!.filter), options.sweeper.interval),\n\t\t\t);\n\t\t}\n\n\t\treturn this.#users;\n\t}\n\n\tpublic get messages() {\n\t\tlet options: ClientModuleCacheOptions<Message>;\n\n\t\tif (typeof this.options.messages === \"object\") {\n\t\t\toptions = this.options.messages;\n\t\t} else {\n\t\t\toptions = { enabled: !!this.options.messages };\n\t\t}\n\n\t\tif (!options.enabled) {\n\t\t\tthrow new Error(\"Message cache is disabled\");\n\t\t}\n\n\t\tif (!this.#messages) {\n\t\t\tthis.#messages = new HybridCache(options.adapter, options.ttl);\n\t\t}\n\n\t\tif (options.sweeper) {\n\t\t\tthis.#sweepers.set(\n\t\t\t\t\"messages\",\n\t\t\t\tsetInterval(() => this.#messages!.sweep(options.sweeper!.filter), options.sweeper.interval),\n\t\t\t);\n\t\t}\n\n\t\treturn this.#messages;\n\t}\n\n\tpublic isModuleEnabled(module: keyof ClientCacheManagerOptions) {\n\t\treturn typeof this.options[module] === \"object\" ? this.options[module].enabled : !!this.options[module];\n\t}\n\n\tasync resolve<Value>(\n\t\tcache: HybridCache<string, Value> | LocalCacheAdapter<string, Value>,\n\t\tid: string,\n\t\tfactory: () => Value,\n\t\tpatch?: (value: Value) => void,\n\t): Promise<Value> {\n\t\tlet value: Value | undefined = await cache.get(id);\n\n\t\tif (!value) {\n\t\t\tvalue = factory();\n\t\t\tawait cache.set(id, value);\n\t\t}\n\n\t\tif (patch) {\n\t\t\tpatch(value);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tpublic resolveLocal<Value>(\n\t\tcache: LocalCacheAdapter<string, Value>,\n\t\tid: string,\n\t\tfactory: () => Value,\n\t\tpatch?: (value: Value) => void,\n\t): Value {\n\t\tlet value: Value | undefined = cache.get(id);\n\n\t\tif (!value) {\n\t\t\tvalue = factory();\n\t\t\tcache.set(id, value);\n\t\t}\n\n\t\tif (patch) {\n\t\t\tpatch(value);\n\t\t}\n\n\t\treturn value;\n\t}\n}\n","import type { GatewayDispatchEvents, GatewayDispatchPayload } from \"discord-api-types/v10\";\n\nimport type { Client } from \"../Client.js\";\n\ntype DispatchPayloadMap = {\n\t[P in GatewayDispatchPayload as P[\"t\"]]: P;\n};\n\nexport type ClientGatewayDispatchHandler<E extends GatewayDispatchEvents = GatewayDispatchEvents> = (\n\tclient: Client,\n\tpayload: DispatchPayloadMap[E],\n) => void | Promise<void>;\n\nexport const handlers: Partial<{\n\t[E in GatewayDispatchEvents]: ClientGatewayDispatchHandler<E>;\n}> = {};\n\nexport function registerHandler<E extends GatewayDispatchEvents>(event: E, handler: ClientGatewayDispatchHandler<E>) {\n\tif (handlers[event]) {\n\t\tthrow new Error(`Handler for ${event} already registered`);\n\t}\n\n\thandlers[event] = handler as ClientGatewayDispatchHandler;\n}\n","import {\n\tGatewayDispatchEvents,\n\ttype GatewayMessageCreateDispatch,\n\ttype GatewayMessageUpdateDispatch,\n} from \"discord-api-types/v10\";\n\nimport { registerHandler } from \"../registry.js\";\nimport { Partial } from \"../../Partial.js\";\nimport { Message } from \"@/lib/structures/index.js\";\n\nimport type { Client } from \"../../Client.js\";\n\nasync function onCreateAndUpdate(client: Client, payload: GatewayMessageCreateDispatch | GatewayMessageUpdateDispatch) {\n\tlet message: Message;\n\n\tif (client.cache.isModuleEnabled(\"messages\")) {\n\t\tmessage = await client.cache.resolve(\n\t\t\tclient.cache.messages,\n\t\t\tpayload.d.id,\n\t\t\t() => new Message(client, payload.d),\n\t\t\t(m) => m._patch(payload.d),\n\t\t);\n\t} else {\n\t\tmessage = new Message(client, payload.d);\n\t}\n\n\tif (message.partial && !client.options.partials.has(Partial.Message)) {\n\t\treturn;\n\t}\n\n\tclient.emit(payload.t === GatewayDispatchEvents.MessageUpdate ? \"messageUpdate\" : \"messageCreate\", message);\n}\n\nregisterHandler(GatewayDispatchEvents.MessageCreate, onCreateAndUpdate);\nregisterHandler(GatewayDispatchEvents.MessageUpdate, onCreateAndUpdate);\n\nregisterHandler(GatewayDispatchEvents.MessageDelete, async (client, payload) => {\n\tlet message: Message | undefined;\n\n\tif (client.cache.isModuleEnabled(\"messages\")) {\n\t\tmessage = await client.cache.messages.get(payload.d.id);\n\t}\n\n\tif (!message) {\n\t\tmessage = new Message(client, payload.d as never);\n\t}\n\n\tclient.emit(\"messageDelete\", message);\n});\n","import {\n\tGatewayDispatchEvents,\n\ttype GatewayGuildCreateDispatch,\n\ttype GatewayGuildUpdateDispatch,\n} from \"discord-api-types/v10\";\n\nimport { registerHandler } from \"../registry.js\";\nimport { Guild } from \"@/lib/structures/index.js\";\n\nimport type { Client } from \"../../Client.js\";\n\nasync function onCreateAndUpdate(client: Client, payload: GatewayGuildCreateDispatch | GatewayGuildUpdateDispatch) {\n\tconst guild = await client.cache.resolve(\n\t\tclient.cache.guilds,\n\t\tpayload.d.id,\n\t\t() => new Guild(client, payload.d),\n\t\t(g) => g._patch(payload.d),\n\t);\n\n\tif (payload.t === GatewayDispatchEvents.GuildCreate) {\n\t\tclient.emit(payload.d.unavailable ? \"guildCreate\" : \"guildAvailable\", guild);\n\t} else {\n\t\tclient.emit(\"guildUpdate\", guild);\n\t}\n}\n\nregisterHandler(GatewayDispatchEvents.GuildCreate, onCreateAndUpdate);\nregisterHandler(GatewayDispatchEvents.GuildUpdate, onCreateAndUpdate);\n\nregisterHandler(GatewayDispatchEvents.GuildDelete, async (client, payload) => {\n\tconst guild = client.cache.guilds.get(payload.d.id);\n\n\tif (!guild) {\n\t\treturn;\n\t}\n\n\tfor (const channel of guild.channels.values()) {\n\t\tclient.cache.channels.delete(channel.id);\n\t}\n\n\tclient.cache.guilds.delete(payload.d.id);\n\tclient.emit(\"guildDelete\", guild);\n});\n","import {\n\tGatewayDispatchEvents,\n\ttype GatewayChannelCreateDispatch,\n\ttype GatewayChannelUpdateDispatch,\n} from \"discord-api-types/v10\";\n\nimport { registerHandler } from \"../registry.js\";\nimport { createChannel } from \"@/lib/utils/channel.js\";\n\nimport type { Client } from \"../../Client.js\";\n\nasync function onCreateOrUpdate(client: Client, payload: GatewayChannelCreateDispatch | GatewayChannelUpdateDispatch) {\n\tconst channel = await client.cache.resolve(\n\t\tclient.cache.channels,\n\t\tpayload.d.id,\n\t\t() => createChannel(client, payload.d),\n\t\t(c) => c?._patch(payload.d as never),\n\t);\n\n\tif (!channel) return;\n\n\tif (channel.inGuild() && !channel.guild.channels.has(channel.id)) {\n\t\tchannel.guild.channels.set(channel.id, channel);\n\t}\n\n\tclient.emit(payload.t === GatewayDispatchEvents.ChannelCreate ? \"channelCreate\" : \"channelUpdate\", channel);\n}\n\nregisterHandler(GatewayDispatchEvents.ChannelCreate, onCreateOrUpdate);\nregisterHandler(GatewayDispatchEvents.ChannelUpdate, onCreateOrUpdate);\nregisterHandler(GatewayDispatchEvents.ChannelDelete, (client, payload) => {\n\tconst channel = client.cache.channels.get(payload.d.id);\n\tconst guild = client.cache.guilds.get(payload.d.guild_id);\n\n\tif (guild) {\n\t\tguild.channels.delete(payload.d.id);\n\t}\n\n\tif (!channel) {\n\t\treturn;\n\t}\n\n\tclient.cache.channels.delete(payload.d.id);\n\n\tclient.emit(\"channelDelete\", channel);\n});\n","import { GatewayDispatchEvents } from \"discord-api-types/v10\";\nimport { registerHandler } from \"../registry.js\";\nimport { User } from \"@/lib/structures/User.js\";\n\nregisterHandler(GatewayDispatchEvents.UserUpdate, async (client, payload) => {\n\tif (payload.d.id === client.user?.id) {\n\t\tclient.user._patch(payload.d);\n\t}\n\n\tlet user: User;\n\n\tif (client.cache.isModuleEnabled(\"users\")) {\n\t\tuser = await client.cache.resolve(\n\t\t\tclient.cache.users,\n\t\t\tpayload.d.id,\n\t\t\t() => new User(client, payload.d),\n\t\t\t(user) => user._patch(payload.d),\n\t\t);\n\t} else {\n\t\tuser = new User(client, payload.d);\n\t}\n\n\tclient.emit(\"userUpdate\", user);\n});\n","import EventEmitter from \"node:events\";\n\nimport { ShardingManager, type ShardingManagerOptions } from \"@bakit/gateway\";\nimport { REST, type RESTLike } from \"@bakit/rest\";\n\nimport { GatewayDispatchEvents, type GatewayDispatchPayload, type GatewayReceivePayload } from \"discord-api-types/v10\";\n\nimport { Message } from \"../structures/Message.js\";\nimport { User } from \"../structures/User.js\";\nimport { Guild } from \"../structures/Guild.js\";\n\nimport { ClientHelper } from \"./ClientHelper.js\";\nimport { Partial } from \"./Partial.js\";\nimport { IntentsBitField, type IntentResolvable } from \"../utils/IntentsBitField.js\";\nimport { ClientCacheManager, type ClientCacheManagerOptions } from \"./ClientCacheManager.js\";\n\nimport { handlers } from \"./dispatches/index.js\";\n\nimport type { Channel } from \"../structures/index.js\";\nimport type { ClientGatewayDispatchHandler } from \"./dispatches/registry.js\";\n\nexport interface ClientOptions {\n\ttoken: string;\n\tintents: IntentResolvable | IntentsBitField;\n\tsharding?: ClientShardingOptions;\n\tpartials?: Partial[];\n\tcache?: ClientCacheManagerOptions;\n}\n\nexport type ClientShardingOptions = Omit<ShardingManagerOptions, \"token\" | \"intents\">;\n\nexport interface ClientEvents {\n\tready: [user: User];\n\terror: [error: Error];\n\n\tdispatch: [shardId: number, payload: GatewayDispatchPayload];\n\traw: [shardId: number, payload: GatewayReceivePayload];\n\n\tmessageCreate: [message: Message];\n\tmessageUpdate: [message: Message];\n\tmessageDelete: [message: Message];\n\n\tuserUpdate: [user: User];\n\n\tguildCreate: [guild: Guild];\n\tguildAvailable: [guild: Guild];\n\tguildUpdate: [guild: Guild];\n\tguildDelete: [guild: Guild];\n\n\tchannelCreate: [channel: Channel];\n\tchannelUpdate: [channel: Channel];\n\tchannelDelete: [channel: Channel];\n}\n\nexport class Client<Ready extends boolean = boolean> extends EventEmitter<ClientEvents> {\n\tpublic readonly options: Omit<Required<ClientOptions>, \"partials\" | \"intents\"> & {\n\t\tpartials: Set<Partial>;\n\t\tintents: IntentsBitField;\n\t};\n\n\tpublic readonly shards: ShardingManager;\n\tpublic readonly rest: RESTLike;\n\tpublic readonly helper: ClientHelper;\n\n\tpublic readonly cache: ClientCacheManager;\n\n\t#user?: User;\n\t#ready = false;\n\n\tpublic constructor(options: ClientOptions, rest?: RESTLike) {\n\t\tsuper();\n\n\t\tconst intents = options.intents instanceof IntentsBitField ? options.intents : new IntentsBitField(options.intents);\n\t\tconst sharding = {\n\t\t\tshardsPerCluster: options.sharding?.shardsPerCluster ?? 1,\n\t\t\ttotalShards: options.sharding?.totalShards ?? 1,\n\t\t};\n\n\t\tthis.options = {\n\t\t\ttoken: options.token,\n\t\t\tintents,\n\t\t\tsharding,\n\t\t\tpartials: new Set(options.partials ?? []),\n\t\t\tcache: options.cache ?? {},\n\t\t};\n\n\t\tthis.rest = rest ?? new REST({ token: options.token });\n\n\t\tthis.shards = new ShardingManager(\n\t\t\t{\n\t\t\t\t...this.options.sharding,\n\t\t\t\ttoken: this.options.token,\n\t\t\t\tintents: this.options.intents.toBigInt(),\n\t\t\t},\n\t\t\trest,\n\t\t);\n\n\t\tthis.cache = new ClientCacheManager(this.options.cache);\n\n\t\tthis.helper = new ClientHelper(this);\n\n\t\tthis.#setupShardsListeners();\n\t}\n\n\tget user(): Ready extends true ? User : User | undefined {\n\t\treturn this.#user as Ready extends true ? User : User | undefined;\n\t}\n\n\tpublic async login() {\n\t\tif (this.#user || this.shards.ready || this.shards.clusters.size > 0) {\n\t\t\tthrow new Error(\"Cannot login twice\");\n\t\t}\n\n\t\tawait this.shards.spawn();\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tconst cleanup = () => {\n\t\t\t\tthis.removeListener(\"ready\", onReady);\n\t\t\t\tthis.removeListener(\"error\", onError);\n\t\t\t};\n\n\t\t\tconst onReady = () => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\tconst onError = (error: Error) => {\n\t\t\t\tcleanup();\n\t\t\t\treject(error);\n\t\t\t};\n\n\t\t\tthis.once(\"ready\", onReady);\n\t\t\tthis.once(\"error\", onError);\n\t\t});\n\t}\n\n\t#setupShardsListeners() {\n\t\tthis.shards.on(\"dispatch\", (_, shardId, payload) => this.#handleDispatch(shardId, payload));\n\t\tthis.shards.on(\"raw\", (_, shardId, payload) => this.emit(\"raw\", shardId, payload));\n\t\tthis.shards.once(\"ready\", () => this.#tryEmitReady());\n\t}\n\n\tasync #handleDispatch(shardId: number, payload: GatewayDispatchPayload) {\n\t\tthis.emit(\"dispatch\", shardId, payload);\n\n\t\tswitch (payload.t) {\n\t\t\tcase GatewayDispatchEvents.Ready: {\n\t\t\t\tthis.#user ??= new User(this, payload.d.user);\n\n\t\t\t\t// Usually, this won't do anything but still be good to have\n\t\t\t\t// in case the shards emit `ready` event out of order\n\t\t\t\tthis.#tryEmitReady();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tconst handler = handlers[payload.t] as ClientGatewayDispatchHandler;\n\n\t\t\t\tif (handler) {\n\t\t\t\t\tawait handler(this, payload);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * We use this method to emit ready event only once since we have 2 ways to emit it.\n\t * @private\n\t */\n\t#tryEmitReady() {\n\t\tif (this.#ready || !this.#user || !this.shards.ready) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#ready = true;\n\t\tthis.emit(\"ready\", this.#user!);\n\t}\n}\n\nexport function createClient(options: ClientOptions) {\n\treturn new Client(options);\n}\n"],"mappings":";;;;;;;;;;;AAEA,IAAa,gBAAb,MAA2B;CAG1B,AAAO,YAAY,QAAsB;AACxC,SAAO,eAAe,MAAM,UAAU;GACrC,OAAO;GACP,YAAY;GACZ,UAAU;GACV,CAAC;;CAGH,AAAO,SAAS;AACf,SAAO,EAAE;;;;;;ACLX,IAAa,OAAb,cAA0B,cAAc;CACvC,AAAO,YACN,QACA,AAAO,MACN;AACD,QAAM,OAAO;EAFN;;CAKR,IAAW,KAAK;AACf,SAAO,KAAK,KAAK;;CAGlB,IAAW,WAAW;AACrB,SAAO,KAAK,KAAK;;CAGlB,IAAW,gBAAgB;AAC1B,SAAO,KAAK,KAAK;;CAGlB,IAAW,aAAa;AACvB,SAAO,KAAK,KAAK;;CAGlB,IAAW,MAAM;AAEhB,SADyB,KAAK,kBAAkB,OAAO,KAAK,kBAAkB,SACpD,GAAG,KAAK,SAAS,GAAG,KAAK,kBAAkB,KAAK;;CAG3E,IAAW,cAAc;AACxB,SAAO,KAAK,cAAc,KAAK;;CAGhC,IAAW,SAAS;AACnB,SAAO,KAAK,KAAK,UAAU;;CAG5B,IAAW,MAAM;AAChB,SAAO,CAAC,CAAC,KAAK,KAAK;;CAGpB,IAAW,SAAS;AACnB,SAAO,CAAC,CAAC,KAAK,KAAK;;CAGpB,IAAW,aAAa;AACvB,SAAO,KAAK,KAAK;;CAGlB,IAAW,SAAS;AACnB,SAAO,KAAK,KAAK;;CAGlB,IAAW,WAAW;AACrB,SAAO,KAAK,KAAK;;CAGlB,IAAW,QAAQ;AAClB,SAAO,KAAK,KAAK;;CAGlB,IAAW,QAAQ;AAClB,SAAO,KAAK,KAAK;;CAGlB,IAAW,cAAc;AACxB,SAAO,KAAK,KAAK;;CAGlB,IAAW,cAAc;AACxB,SAAO,KAAK,KAAK;;CAGlB,IAAW,SAAS;AACnB,SAAO,KAAK,KAAK;;CAGlB,IAAW,cAAc;AACxB,SAAO,KAAK,KAAK,gBAAgB;;CAGlC,IAAW,YAAY;AACtB,SAAO,iBAAiB,KAAK,GAAG;;CAGjC,IAAW,mBAAmB;AAC7B,SAAO,KAAK,UAAU,SAAS;;CAGhC,IAAW,iBAAiB;AAC3B,SAAO,KAAK,gBAAgB,SAAY,IAAI,KAAK,YAAY,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI,KAAK;;CAGhG,IAAW,mBAAmB;AAM7B,SAAO,4CAHkB,KAAK,kBAAkB,OAAO,KAAK,kBAAkB,SAC7C,OAAO,KAAK,cAAc,GAAG,MAAM,OAAO,KAAK,GAAG,IAAI,OAAO,GAErC;;CAG1D,AAAO,aAAa,SAA6F;AAChH,MAAI,CAAC,KAAK,OACT;EAGD,MAAM,aAAa,KAAK,OAAO,WAAW,KAAK;EAC/C,MAAM,MAAM,SAAS,cAAc,aAAa,QAAQ;EAExD,MAAM,OAAO,SAAS,OAAO,SAAS,QAAQ,SAAS;AAEvD,SAAO,sCAAsC,KAAK,GAAG,GAAG,KAAK,OAAO,GAAG,MAAM;;CAG9E,AAAO,oBAAoB,SAAyE;AACnG,SAAO,KAAK,aAAa,QAAQ,IAAI,KAAK;;CAG3C,AAAO,OAAO,OAAsB;AACnC,MAAI,OAAO,UAAU,SACpB,QAAO,UAAU,KAAK;AAGvB,SACC,MAAM,OAAO,KAAK,MAClB,MAAM,aAAa,KAAK,YACxB,MAAM,kBAAkB,KAAK,iBAC7B,MAAM,QAAQ,KAAK,OACnB,MAAM,qBAAqB,KAAK;;CAIlC,MAAa,SAAS,QAAQ,OAAO;AACpC,SAAO,KAAK,OAAO,OAAO,SAAS,KAAK,IAAI,MAAM;;CAGnD,MAAa,KAAK,SAAwC;AAEzD,SAAO,OADI,MAAM,KAAK,UAAU,EAChB,KAAK,QAAQ;;CAG9B,AAAO,OAAO,MAA4B;AACzC,OAAK,OAAO;GAAE,GAAG,KAAK;GAAM,GAAG;GAAM;;CAGtC,AAAgB,SAAS;AACxB,SAAO,KAAK;;CAGb,AAAgB,WAAW;AAC1B,SAAO,KAAK,KAAK,GAAG;;;;;;ACrItB,IAAsB,cAAtB,cAAwE,cAAc;CACrF,AAAO,YACN,QACA,AAAO,MACN;AACD,QAAM,OAAO;EAFN;;CAKR,IAAW,KAAK;AACf,SAAO,KAAK,KAAK;;CAGlB,IAAW,OAAO;AACjB,SAAO,KAAK,KAAK;;CAGlB,AAAgB,WAAW;AAC1B,SAAO,KAAK,KAAK,GAAG;;CAGrB,AAAgB,SAAS;AACxB,SAAO,KAAK;;CAGb,AAAO,cAAwC;AAC9C,SAAO,UAAU;;CAGlB,AAAO,eAA0C;AAChD,SAAO,UAAU;;CAGlB,AAAO,OAA0B;AAChC,SAAO,KAAK,SAAS,YAAY;;CAGlC,AAAO,UAAgC;AACtC,SAAO,cAAc,KAAK;;CAG3B,AAAO,QAAuB;AAC7B,SAAO,KAAK,OAAO,OAAO,aAAmB,KAAK,IAAI,KAAK;;CAG5D,AAAO,OAAO,MAAkB;AAC/B,OAAK,OAAO;GAAE,GAAG,KAAK;GAAM,GAAG;GAAM;;;;;;ACtDvC,MAAa,wBAAwB,aAA6D,SAAY;CAC7G,MAAe,yBAAyB,KAAK;EAC5C,AAAO,KAAK,SAAwC;AACnD,UAAO,KAAK,OAAO,OAAO,cAAc,KAAK,IAAI,QAAQ;;;AAI3D,QAAO;EACN;AAGF,MAAa,yBAAyB,aAA8D,SAAY;CAC/G,MAAe,0BAA0B,KAAK;AAE9C,QAAO;EACN;AAEF,MAAa,oBAAoB,aAA8D,SAAY;CAC1G,MAAe,qBAAqB,KAAK;EACxC,IAAW,UAAU;AACpB,OAAI,CAAC,KAAK,KAAK,SACd,OAAM,IAAI,MAAM,sCAAsC;AAGvD,UAAO,KAAK,KAAK;;EAGlB,IAAW,QAAQ;AAClB,UAAO,KAAK,OAAO,MAAM,OAAO,IAAI,KAAK,QAAQ;;;AAInD,QAAO;EACN;;;;ACtCF,IAAa,YAAb,cAA+B,YAAY,aAA2B,CAAC,sBAAsB,CAAC,CAAC;CAC9F;CAEA,AAAO,YAAY,QAAgB,MAAoB;AACtD,QAAM,QAAQ,KAAK;;CAGpB,IAAW,aAAuC;AACjD,MAAI,CAAC,MAAKA,kBAAmB;AAC5B,SAAKA,mBAAoB,IAAI,YAAY;AAEzC,QAAK,MAAM,aAAa,KAAK,KAAK,cAAc,EAAE,EAAE;IACnD,IAAI;AAEJ,QAAI,KAAK,OAAO,MAAM,gBAAgB,QAAQ,CAC7C,QAAO,KAAK,OAAO,MAAM,aACxB,KAAK,OAAO,MAAM,MAAM,OACxB,UAAU,UACJ,IAAI,KAAK,KAAK,QAAQ,UAAU,GACrC,SAAS,KAAK,OAAO,UAAU,CAChC;QAED,QAAO,IAAI,KAAK,KAAK,QAAQ,UAAU;AAGxC,UAAKA,iBAAkB,IAAI,UAAU,IAAI,KAAK;;;AAIhD,SAAO,MAAKA;;CAGb,IAAW,cAAc;EACxB,MAAM,MAAM,KAAK,KAAK,cAAc,EAAE,EAAE,MAAM,SAAS,KAAK,OAAO,KAAK,OAAO,KAAK,GAAG,EAAE;AAEzF,MAAI,CAAC,GACJ,OAAM,IAAI,MAAM,sBAAsB;AAGvC,SAAO;;CAGR,IAAW,YAAY;EACtB,MAAM,OAAO,KAAK,WAAW,IAAI,KAAK,YAAY;AAElD,MAAI,CAAC,KACJ,OAAM,IAAI,MAAM,sBAAsB;AAGvC,SAAO;;CAGR,MAAsB,QAAuB;EAC5C,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,KACnC,OAAO,cAAc,EACrB,EACC,MAAM,EACL,cAAc,KAAK,aACnB,EACD,CACD;AAED,OAAK,OAAO,KAAK;AACjB,QAAM,MAAKC,qBAAsB;AAEjC,SAAO;;CAGR,AAAgB,KAAK,SAAiE;AACrF,SAAO,MAAM,KAAK,QAAQ;;CAG3B,MAAa,gBAAgB,QAAQ,OAAO;AAC3C,MAAI,CAAC,SAAS,KAAK,KAAK,YAAY,QAAQ;AAC3C,SAAM,MAAKA,qBAAsB;AACjC,UAAO,MAAKD;;AAGb,QAAM,KAAK,OAAO;AAClB,SAAO,MAAKA;;CAGb,OAAMC,sBAAuB;AAC5B,QAAKD,mBAAoB,IAAI,YAAY;AAEzC,OAAK,MAAM,aAAa,KAAK,KAAK,cAAc,EAAE,EAAE;GACnD,IAAI;AAEJ,OAAI,KAAK,OAAO,MAAM,gBAAgB,QAAQ,CAC7C,QAAO,MAAM,KAAK,OAAO,MAAM,QAC9B,KAAK,OAAO,MAAM,OAClB,UAAU,UACJ,IAAI,KAAK,KAAK,QAAQ,UAAU,GACrC,SAAS,KAAK,OAAO,UAAU,CAChC;OAED,QAAO,IAAI,KAAK,KAAK,QAAQ,UAAU;AAGxC,SAAKA,iBAAkB,IAAI,UAAU,IAAI,KAAK;;;CAIhD,AAAgB,OAAO,MAAmC;AACzD,QAAM,OAAO,KAAK;AAClB,QAAKA,mBAAoB;;;;;;ACrG3B,IAAa,UAAb,cAAgE,cAAc;CAC7E;CAEA,AAAO,YACN,QACA,AAAO,MACN;AACD,QAAM,OAAO;EAFN;AAGP,QAAKE,oBAAqB;;CAG3B,IAAW,UAAU;AACpB,SAAO,OAAO,KAAK,KAAK,YAAY,YAAY,OAAO,KAAK,KAAK,WAAW;;CAG7E,IAAW,UAAU;AACpB,SAAO,KAAK,KAAK;;CAGlB,IAAW,KAAK;AACf,SAAO,KAAK,KAAK;;CAGlB,IAAW,YAAY;AACtB,SAAO,KAAK,KAAK;;CAGlB,IAAW,UAAqF;AAC/F,SAAO,MAAKA,oBAAqB;;CAGlC,IAAW,UAAqD;AAE/D,SADgB,cAAc,KAAK,OAAO,KAAK,KAAK,WAAW;;CAIhE,IAAW,QAAkD;AAE5D,SADc,KAAK,UAAU,KAAK,OAAO,MAAM,OAAO,IAAI,KAAK,QAAQ,GAAG;;;;;;;;;CAW3E,IAAW,SAAS;EACnB,IAAI,SAAS,MAAKC;AAElB,MAAI,CAAC,UAAU,KAAK,OAAO,MAAM,gBAAgB,QAAQ,CACxD,UAAS,KAAK,OAAO,MAAM,aAC1B,KAAK,OAAO,MAAM,MAAM,OACxB,KAAK,KAAK,OAAO,UACX,IAAI,KAAK,KAAK,QAAQ,KAAK,KAAK,OAAO,GAC5C,SAAS,KAAK,OAAO,KAAK,KAAK,OAAO,CACvC;AAGF,MAAI,CAAC,OACJ,UAAS,IAAI,KAAK,KAAK,QAAQ,KAAK,KAAK,OAAO;AAGjD,QAAKA,eAAgB;AAErB,SAAO,MAAKA;;CAGb,IAAW,YAAY;AACtB,SAAO,IAAI,KAAK,KAAK,KAAK,UAAU;;CAGrC,IAAW,WAAW;AACrB,SAAO,KAAK,KAAK,mBAAmB,IAAI,KAAK,KAAK,KAAK,iBAAiB,GAAG;;CAG5E,IAAW,mBAAmB;AAC7B,SAAO,KAAK,UAAU,SAAS;;CAGhC,IAAW,kBAAkB;AAC5B,SAAO,KAAK,UAAU,SAAS;;CAGhC,IAAW,MAAM;AAChB,SAAO,gCAAgC,KAAK,WAAW,MAAM,GAAG,KAAK,UAAU,GAAG,KAAK;;CAGxF,AAAO,UAAiC;AACvC,SAAO,KAAK,UAAU;;CAGvB,MAAa,QAA0B;EACtC,MAAM,UAAU,MAAM,KAAK,OAAO,OAAO,aAAa,KAAK,WAAW,KAAK,GAAG;AAE9E,OAAK,OAAO,QAAQ;AACpB,QAAKA,eAAgB,MAAM,KAAK,OAAO,MAAM,QAC5C,KAAK,OAAO,MAAM,OAClB,QAAQ,KAAK,OAAO,UACd,IAAI,KAAK,KAAK,QAAQ,QAAQ,KAAK,OAAO,CAChD;AAED,SAAO;;;;;;;;;;;CAYR,MAAa,YAAY,QAAQ,OAAO;AACvC,MAAI,CAAC,SAAS,KAAK,OAAO,MAAM,gBAAgB,QAAQ,CACvD,QAAO,KAAK,OAAO,MAAM,QACxB,KAAK,OAAO,MAAM,OAClB,KAAK,KAAK,OAAO,UACX,IAAI,KAAK,KAAK,QAAQ,KAAK,KAAK,OAAO,GAC5C,SAAS,KAAK,OAAO,KAAK,KAAK,OAAO,CACvC;AAGF,SAAO,KAAK,OAAO,OAAO,UAAU,KAAK,KAAK,OAAO,IAAI,MAAM;;CAGhE,MAAa,MAAM,SAA8B;AAChD,SAAO,KAAK,OAAO,OAAO,aAAa,KAAK,WAAW,KAAK,IAAI,QAAQ;;CAGzE,MAAa,cAAc,SAA8B;AACxD,SAAO,KAAK,OAAO,OAAO,cAAc,KAAK,WAAW,QAAQ;;CAGjE,MAAa,KAAK,SAAsC;AACvD,SAAO,KAAK,OAAO,OAAO,YAAY,KAAK,WAAW,KAAK,IAAI,QAAQ;;CAGxE,MAAa,OAAO,MAA+B;AAClD,OAAK,OAAO;GAAE,GAAG,KAAK;GAAM,GAAG;GAAM;AAErC,MAAI,KAAK,UAAU,KAAK,OAAO,MAAM,gBAAgB,QAAQ,CAC5D,KAAI,KAAK,OAAO,MAAM,gBAAgB,QAAQ,CAC7C,OAAKA,eAAgB,MAAM,KAAK,OAAO,MAAM,QAC5C,KAAK,OAAO,MAAM,OAClB,KAAK,OAAO,UACN,IAAI,KAAK,KAAK,QAAQ,KAAK,OAAQ,CACzC;MAED,OAAKA,cAAe,OAAO,KAAK,OAAO;;CAK1C,sBAAsB;EACrB,MAAM,EAAE,WAAW;EAEnB,IAAI,UAA+B,OAAO,MAAM,SAAS,IAAI,KAAK,UAAU;AAE5E,MAAI,CAAC,QACJ,KAAI,KAAK,SAAS,CACjB,WAAU,KAAK,MAAO,SAAS,IAAI,KAAK,UAAU;OAC5C;AACN,aAAU,IAAI,UAAU,QAAQ;IAC/B,IAAI,KAAK;IACT,MAAM,YAAY;IAClB,MAAM;IACN,YAAY,CAAC,KAAK,KAAK,QAAQ,KAAK,OAAO,KAAK,KAAK;IACrD,CAAC;AAEF,WAAQ,IAAI,QAAQ;;AAItB,MAAI,CAAC,QACJ,OAAM,IAAI,MAAM,sBAAsB,KAAK,YAAY;AAGxD,SAAO,MAAM,SAAS,IAAI,KAAK,WAAW,QAAQ;AAClD,SAAO;;CAGR,AAAgB,SAAS;AACxB,SAAO,KAAK;;CAGb,AAAgB,WAAW;AAC1B,SAAO,KAAK,KAAK;;;;;;ACxMnB,IAAa,mBAAb,cAAsC,YAAY,aAAyD,CAC1G,mBACA,sBACA,CAAC,CAAC;;;;ACJH,IAAa,oBAAb,cAAuC,YAAY,aAAmC;CACrF;CACA;CACA;CACA,CAAC,CAAC;;;;ACGH,SAAgB,cAAc,QAAgB,MAA0B;AACvE,SAAQ,KAAK,MAAb;EACC,KAAK,YAAY,UAChB,QAAO,IAAI,iBAAiB,QAAQ,KAAmD;EACxF,KAAK,YAAY,WAChB,QAAO,IAAI,kBAAkB,QAAQ,KAAoD;EAC1F,KAAK,YAAY,GAChB,QAAO,IAAI,UAAU,QAAQ,KAAqB;EACnD,QACC,QAAO;;;;;;ACTV,IAAa,QAAb,cAA2B,cAAc;CACxC,AAAgB,WAAW,IAAI,YAA6B;CAE5D,AAAO,YACN,QACA,AAAO,MACN;AACD,QAAM,OAAO;EAFN;AAIP,QAAKC,cAAe;;CAGrB,IAAW,KAAK;AACf,SAAO,KAAK,KAAK;;CAGlB,IAAW,OAAO;AACjB,SAAO,KAAK,KAAK;;CAGlB,IAAW,OAAO;AACjB,SAAO,KAAK,KAAK;;CAGlB,IAAW,SAAS;AACnB,SAAO,KAAK,KAAK;;CAGlB,IAAW,QAAQ;AAClB,SAAO,KAAK,KAAK;;CAGlB,IAAW,WAAW;AACrB,SAAO,KAAK,KAAK;;CAGlB,IAAW,oBAAoB;AAC9B,SAAO,KAAK,KAAK;;CAGlB,AAAO,OAAO,MAA6B;AAC1C,OAAK,OAAO;GAAE,GAAG,KAAK;GAAM,GAAG;GAAM;AACrC,QAAKA,cAAe;;CAGrB,gBAAgB;AACf,MAAI,EAAE,cAAc,KAAK,MACxB;AAGD,OAAK,MAAM,MAAM,KAAK,SAAS,MAAM,CACpC,MAAK,OAAO,MAAM,SAAS,OAAO,GAAG;AAGtC,OAAK,SAAS,OAAO;AAErB,OAAK,MAAM,eAAe,KAAK,KAAK,UAAU;GAC7C,MAAM,UAAU,cAAc,KAAK,QAAQ,YAAY;AAEvD,OAAI,SAAS;AACZ,SAAK,SAAS,IAAI,QAAQ,IAAI,QAAQ;AACtC,SAAK,OAAO,MAAM,SAAS,IAAI,QAAQ,IAAI,QAAQ;;;;;;;;ACpCvD,IAAa,eAAb,MAAa,aAAa;CAGzB,AAAO,YAAY,QAAgB;AAClC,SAAO,eAAe,MAAM,UAAU;GACrC,OAAO;GACP,YAAY;GACZ,UAAU;GACV,CAAC;;CAGH,MAAa,UAAU,QAAgB,QAAQ,OAAsB;EACpE,IAAI;AAEJ,MAAI,KAAK,OAAO,MAAM,gBAAgB,QAAQ,CAC7C,QAAO,MAAM,KAAK,OAAO,MAAM,MAAM,IAAI,OAAO;AAGjD,MAAI,CAAC,QAAQ,OAAO;GACnB,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,IAAa,OAAO,KAAK,OAAO,CAAC;AAErE,OAAI,KAAK,OAAO,MAAM,gBAAgB,QAAQ,CAC7C,QAAO,MAAM,KAAK,OAAO,MAAM,QAC9B,KAAK,OAAO,MAAM,OAClB,cACM,IAAI,KAAK,KAAK,QAAQ,KAAK,GAChC,MAAM,EAAG,OAAO,KAAK,CACtB;OAED,QAAO,IAAI,KAAK,KAAK,QAAQ,KAAK;;AAIpC,SAAO;;CAGR,MAAa,SAAS,QAAgB,QAAQ,OAA2B;AACxE,MAAI,CAAC,OAAO;GACX,MAAM,UAAU,KAAK,OAAO,MAAM,SAAS,MAAM,MAAM,EAAE,MAAM,IAAI,EAAE,gBAAgB,OAAO;AAE5F,OAAI,WAAW,QAAQ,MAAM,CAC5B,QAAO;;EAIT,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,KACnC,OAAO,cAAc,EACrB,EACC,MAAM,EAAE,cAAc,QAAQ,EAC9B,CACD;EAED,MAAM,UAAU,IAAI,UAAU,KAAK,QAAQ,KAAK;AAEhD,QAAM,QAAQ,iBAAiB;AAC/B,OAAK,OAAO,MAAM,SAAS,IAAI,QAAQ,IAAI,QAAQ;AAEnD,SAAO;;CAGR,MAAa,aAAa,WAAmB,WAAmB,QAAQ,OAAO;EAC9E,IAAI;AAEJ,MAAI,KAAK,OAAO,MAAM,gBAAgB,WAAW,CAChD,WAAU,MAAM,KAAK,OAAO,MAAM,SAAS,IAAI,UAAU;AAG1D,MAAI,CAAC,WAAW,OAAO;GACtB,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,IAAgB,OAAO,eAAe,WAAW,UAAU,CAAC;AAEhG,OAAI,KAAK,OAAO,MAAM,gBAAgB,WAAW,CAChD,WAAU,MAAM,KAAK,OAAO,MAAM,QACjC,KAAK,OAAO,MAAM,UAClB,iBACM,IAAI,QAAQ,KAAK,QAAQ,KAAK,GACnC,MAAM,EAAE,OAAO,KAAK,CACrB;OAED,WAAU,IAAI,QAAQ,KAAK,QAAQ,KAAK;;AAI1C,SAAO;;CAGR,MAAa,cAAc,WAAmB,WAAmB;AAChE,QAAM,KAAK,OAAO,KAAK,OAAO,OAAO,eAAe,WAAW,UAAU,CAAC;AAE1E,MAAI,KAAK,OAAO,MAAM,gBAAgB,WAAW,CAChD,OAAM,KAAK,OAAO,MAAM,SAAS,OAAO,UAAU;;CAIpD,MAAa,cAAc,WAAmB,SAAwC;AACrF,MAAI,OAAO,YAAY,SACtB,WAAU,EAAE,SAAS,SAAS;EAG/B,MAAM,OAAO,KAAK,OAAO,KAAK,KAAiB,OAAO,gBAAgB,UAAU,EAAE,EACjF,MAAM,aAAa,0BAA0B,QAAQ,EACrD,CAAC;EAEF,MAAM,UAAU,IAAI,QAAQ,KAAK,QAAQ,MAAM,KAAK;AAEpD,MAAI,KAAK,OAAO,MAAM,gBAAgB,WAAW,CAChD,OAAM,KAAK,OAAO,MAAM,SAAS,IAAI,QAAQ,IAAI,QAAQ;AAG1D,SAAO;;CAGR,MAAa,YAAY,WAAmB,WAAmB,SAAsC;AACpG,MAAI,OAAO,YAAY,SACtB,WAAU,EAAE,SAAS,SAAS;EAG/B,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,MACnC,OAAO,eAAe,WAAW,UAAU,EAC3C,EACC,MAAM,aAAa,0BAA0B,QAAQ,EACrD,CACD;EAED,IAAI;AAEJ,MAAI,KAAK,OAAO,MAAM,gBAAgB,WAAW,CAChD,WAAU,MAAM,KAAK,OAAO,MAAM,QACjC,KAAK,OAAO,MAAM,UAClB,iBACM,IAAI,QAAQ,KAAK,QAAQ,KAAK,GACnC,MAAM,EAAE,OAAO,KAAK,CACrB;MAED,WAAU,IAAI,QAAQ,KAAK,QAAQ,KAAK;AAGzC,SAAO;;CAGR,MAAa,aAAa,WAAmB,WAAmB,SAA8B;AAC7F,SAAO,KAAK,cAAc,WAAW;GACpC,GAAG;GACH,kBAAkB;IACjB,YAAY;IACZ,YAAY;IACZ;GACD,CAAC;;CAGH,MAAa,WAAW,SAAiB,QAAQ,OAAO;EACvD,IAAI,QAAQ,KAAK,OAAO,MAAM,OAAO,IAAI,QAAQ;AAEjD,MAAI,CAAC,SAAS,OAAO;GACpB,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,IAAc,OAAO,MAAM,QAAQ,CAAC;AACxE,WAAQ,IAAI,MAAM,KAAK,QAAQ,KAAK;AAEpC,QAAK,OAAO,MAAM,OAAO,IAAI,SAAS,MAAM;;AAG7C,SAAO;;CAGR,MAAa,aAAgC,WAAmB,QAAQ,OAAmB;EAC1F,IAAI,UAAU,KAAK,OAAO,MAAM,SAAS,IAAI,UAAU;AAEvD,MAAI,CAAC,WAAW,OAAO;GACtB,MAAM,OAAO,MAAM,KAAK,OAAO,KAAK,IAAgB,OAAO,QAAQ,UAAU,CAAC;AAC9E,aAAU,cAAc,KAAK,QAAQ,KAAK,IAAI;AAE9C,OAAI,CAAC,QACJ,OAAM,IAAI,MAAM,sBAAsB,YAAY;AAGnD,QAAK,OAAO,MAAM,SAAS,IAAI,WAAW,QAAQ;AAElD,OAAI,QAAQ,SAAS,CACpB,SAAQ,MAAM,SAAS,IAAI,WAAW,QAAQ;;AAIhD,SAAO;;CAGR,OAAc,0BAA0B,SAA+B;AACtE,SAAO;GACN,SAAS,QAAQ;GACjB,KAAK,QAAQ;GACb,QAAQ,QAAQ;GAChB,kBAAkB,QAAQ;GAC1B,mBAAmB,QAAQ;GAC3B,OAAO,QAAQ;GACf;;;;;;ACpOH,IAAY,4CAAL;AACN;AACA;;;;;;ACED,IAAa,kBAAb,MAAa,gBAAgB;CAC5B,AAAiB;CAEjB,AAAO,YAAY,OAAyB;AAC3C,OAAK,QAAQ,gBAAgB,QAAQ,MAAM;;CAG5C,OAAc,QAAQ,OAAiC;AACtD,MAAI,MAAM,QAAQ,MAAM,CACvB,QAAO,MAAM,QAAQ,KAAK,WAAW,MAAM,OAAO,OAAO,EAAE,GAAG;AAG/D,SAAO,OAAO,MAAM;;CAGrB,AAAO,IAAI,QAAoC;AAC9C,UAAQ,KAAK,QAAQ,OAAO,OAAO,MAAM;;CAG1C,AAAO,WAAmB;AACzB,SAAO,KAAK;;CAGb,AAAO,WAAmB;AACzB,SAAO,OAAO,KAAK,MAAM;;CAG1B,AAAO,SAAiB;AACvB,SAAO,KAAK,MAAM,UAAU;;CAG7B,AAAO,WAAmB;AACzB,SAAO,KAAK,MAAM,UAAU;;;;;;AClC9B,IAAsB,mBAAtB,MAAmD;;;;ACMnD,IAAa,oBAAb,cAAmD,iBAA6B;CAC/E,AAAO,aAAa,IAAI,YAA4C;CAEpE;CAEA,AAAO,IAAI,KAA6B;EACvC,MAAM,QAAQ,KAAK,WAAW,IAAI,IAAI;AAEtC,MAAI,CAAC,MACJ;AAGD,MAAI,MAAM,aAAa,MAAM,YAAY,KAAK,KAAK,EAAE;AACpD,QAAK,WAAW,OAAO,IAAI;AAC3B;;AAGD,QAAKC,eAAgB;AAErB,SAAO,MAAM;;CAGd,AAAO,IAAI,KAAU,OAAc,KAAoB;EACtD,MAAM,YAAY,MAAM,KAAK,KAAK,GAAG,MAAM;AAE3C,OAAK,WAAW,IAAI,KAAK;GACxB;GACA;GACA,CAAC;AAEF,QAAKA,eAAgB;;CAGtB,AAAO,OAAO,KAAgB;AAC7B,QAAKA,eAAgB;AACrB,OAAK,WAAW,OAAO,IAAI;;CAG5B,AAAO,QAAc;AACpB,OAAK,WAAW,OAAO;AAEvB,eAAa,MAAKC,WAAY;AAC9B,QAAKA,aAAc;;CAGpB,AAAO,IAAI,KAAmB;AAC7B,QAAKD,eAAgB;AACrB,SAAO,KAAK,IAAI,IAAI,KAAK;;CAG1B,AAAO,KAAK,QAAqD;AAChE,OAAK,MAAM,SAAS,KAAK,WAAW,QAAQ,CAC3C,KAAI,OAAO,MAAM,MAAM,CACtB,QAAO,MAAM;;CAOhB,AAAO,MAAM,QAAwC;AACpD,OAAK,MAAM,CAAC,KAAK,UAAU,KAAK,WAC/B,KAAI,OAAO,MAAM,MAAM,CACtB,MAAK,OAAO,IAAI;;CAKnB,AAAO,WAAW;AACjB,OAAK,MAAM,CAAC,KAAK,UAAU,KAAK,WAC/B,KAAI,MAAM,aAAa,MAAM,YAAY,KAAK,KAAK,CAClD,MAAK,OAAO,IAAI;;CAKnB,iBAAiB;AAChB,MAAI,CAAC,KAAK,WAAW,KACpB;AAGD,MAAI,MAAKC,WACR;AAGD,QAAKA,aAAc,iBAAiB;AACnC,SAAKA,aAAc;AACnB,QAAK,UAAU;AACf,SAAKD,eAAgB;KACnB,IAAK;;;;;;AC7FV,IAAa,cAAb,MAAqC;CACpC,AAAO,QAAQ,IAAI,mBAA+B;CAElD,AAAO,YACN,AAAO,QACP,AAAO,YACN;EAFM;EACA;;CAGR,MAAa,IAAI,KAAsC;EACtD,MAAM,QAAQ,KAAK,MAAM,IAAI,IAAI;AAEjC,MAAI,UAAU,OACb,QAAO;EAGR,MAAM,SAAS,MAAM,KAAK,QAAQ,IAAI,IAAI;AAE1C,MAAI,WAAW,OACd,MAAK,MAAM,IAAI,KAAK,OAAO;AAG5B,SAAO;;CAGR,MAAa,MAAM,QAAiD;AACnE,OAAK,MAAM,MAAM,OAAO;AACxB,QAAM,KAAK,QAAQ,MAAM,OAAO;;CAGjC,MAAa,IAAI,KAAU,OAAc,MAAM,KAAK,YAA2B;AAC9E,OAAK,MAAM,IAAI,KAAK,OAAO,IAAI;AAC/B,QAAM,KAAK,QAAQ,IAAI,KAAK,OAAO,IAAI;;CAGxC,MAAa,OAAO,KAAyB;AAC5C,OAAK,MAAM,OAAO,IAAI;AACtB,QAAM,KAAK,QAAQ,OAAO,IAAI;;CAG/B,MAAa,QAAuB;AACnC,OAAK,MAAM,OAAO;AAClB,QAAM,KAAK,QAAQ,OAAO;;CAG3B,MAAa,IAAI,KAA4B;AAC5C,SAAQ,MAAM,KAAK,IAAI,IAAI,KAAM;;;;;;AC1BnC,IAAa,qBAAb,MAAgC;CAC/B,AAAO,WAAW,IAAI,mBAAoC;CAC1D,AAAO,SAAS,IAAI,mBAAkC;CAEtD;CACA;CAEA,YAAY,IAAI,YAA6D;CAE7E,AAAO,YAAY,AAAO,SAAoC;EAApC;;CAE1B,IAAW,QAAQ;EAClB,IAAI;AAEJ,MAAI,OAAO,KAAK,QAAQ,UAAU,SACjC,WAAU,KAAK,QAAQ;MAEvB,WAAU,EAAE,SAAS,CAAC,CAAC,KAAK,QAAQ,OAAO;AAG5C,MAAI,CAAC,QAAQ,QACZ,OAAM,IAAI,MAAM,yBAAyB;AAG1C,MAAI,CAAC,MAAKE,MACT,OAAKA,QAAS,IAAI,YAAY,QAAQ,SAAS,QAAQ,IAAI;AAG5D,MAAI,QAAQ,QACX,OAAKC,SAAU,IACd,SACA,kBAAkB,MAAKD,MAAQ,MAAM,QAAQ,QAAS,OAAO,EAAE,QAAQ,QAAQ,SAAS,CACxF;AAGF,SAAO,MAAKA;;CAGb,IAAW,WAAW;EACrB,IAAI;AAEJ,MAAI,OAAO,KAAK,QAAQ,aAAa,SACpC,WAAU,KAAK,QAAQ;MAEvB,WAAU,EAAE,SAAS,CAAC,CAAC,KAAK,QAAQ,UAAU;AAG/C,MAAI,CAAC,QAAQ,QACZ,OAAM,IAAI,MAAM,4BAA4B;AAG7C,MAAI,CAAC,MAAKE,SACT,OAAKA,WAAY,IAAI,YAAY,QAAQ,SAAS,QAAQ,IAAI;AAG/D,MAAI,QAAQ,QACX,OAAKD,SAAU,IACd,YACA,kBAAkB,MAAKC,SAAW,MAAM,QAAQ,QAAS,OAAO,EAAE,QAAQ,QAAQ,SAAS,CAC3F;AAGF,SAAO,MAAKA;;CAGb,AAAO,gBAAgB,QAAyC;AAC/D,SAAO,OAAO,KAAK,QAAQ,YAAY,WAAW,KAAK,QAAQ,QAAQ,UAAU,CAAC,CAAC,KAAK,QAAQ;;CAGjG,MAAM,QACL,OACA,IACA,SACA,OACiB;EACjB,IAAI,QAA2B,MAAM,MAAM,IAAI,GAAG;AAElD,MAAI,CAAC,OAAO;AACX,WAAQ,SAAS;AACjB,SAAM,MAAM,IAAI,IAAI,MAAM;;AAG3B,MAAI,MACH,OAAM,MAAM;AAGb,SAAO;;CAGR,AAAO,aACN,OACA,IACA,SACA,OACQ;EACR,IAAI,QAA2B,MAAM,IAAI,GAAG;AAE5C,MAAI,CAAC,OAAO;AACX,WAAQ,SAAS;AACjB,SAAM,IAAI,IAAI,MAAM;;AAGrB,MAAI,MACH,OAAM,MAAM;AAGb,SAAO;;;;;;ACpHT,MAAa,WAER,EAAE;AAEP,SAAgB,gBAAiD,OAAU,SAA0C;AACpH,KAAI,SAAS,OACZ,OAAM,IAAI,MAAM,eAAe,MAAM,qBAAqB;AAG3D,UAAS,SAAS;;;;;ACVnB,eAAeC,oBAAkB,QAAgB,SAAsE;CACtH,IAAI;AAEJ,KAAI,OAAO,MAAM,gBAAgB,WAAW,CAC3C,WAAU,MAAM,OAAO,MAAM,QAC5B,OAAO,MAAM,UACb,QAAQ,EAAE,UACJ,IAAI,QAAQ,QAAQ,QAAQ,EAAE,GACnC,MAAM,EAAE,OAAO,QAAQ,EAAE,CAC1B;KAED,WAAU,IAAI,QAAQ,QAAQ,QAAQ,EAAE;AAGzC,KAAI,QAAQ,WAAW,CAAC,OAAO,QAAQ,SAAS,IAAI,QAAQ,QAAQ,CACnE;AAGD,QAAO,KAAK,QAAQ,MAAM,sBAAsB,gBAAgB,kBAAkB,iBAAiB,QAAQ;;AAG5G,gBAAgB,sBAAsB,eAAeA,oBAAkB;AACvE,gBAAgB,sBAAsB,eAAeA,oBAAkB;AAEvE,gBAAgB,sBAAsB,eAAe,OAAO,QAAQ,YAAY;CAC/E,IAAI;AAEJ,KAAI,OAAO,MAAM,gBAAgB,WAAW,CAC3C,WAAU,MAAM,OAAO,MAAM,SAAS,IAAI,QAAQ,EAAE,GAAG;AAGxD,KAAI,CAAC,QACJ,WAAU,IAAI,QAAQ,QAAQ,QAAQ,EAAW;AAGlD,QAAO,KAAK,iBAAiB,QAAQ;EACpC;;;;ACrCF,eAAe,kBAAkB,QAAgB,SAAkE;CAClH,MAAM,QAAQ,MAAM,OAAO,MAAM,QAChC,OAAO,MAAM,QACb,QAAQ,EAAE,UACJ,IAAI,MAAM,QAAQ,QAAQ,EAAE,GACjC,MAAM,EAAE,OAAO,QAAQ,EAAE,CAC1B;AAED,KAAI,QAAQ,MAAM,sBAAsB,YACvC,QAAO,KAAK,QAAQ,EAAE,cAAc,gBAAgB,kBAAkB,MAAM;KAE5E,QAAO,KAAK,eAAe,MAAM;;AAInC,gBAAgB,sBAAsB,aAAa,kBAAkB;AACrE,gBAAgB,sBAAsB,aAAa,kBAAkB;AAErE,gBAAgB,sBAAsB,aAAa,OAAO,QAAQ,YAAY;CAC7E,MAAM,QAAQ,OAAO,MAAM,OAAO,IAAI,QAAQ,EAAE,GAAG;AAEnD,KAAI,CAAC,MACJ;AAGD,MAAK,MAAM,WAAW,MAAM,SAAS,QAAQ,CAC5C,QAAO,MAAM,SAAS,OAAO,QAAQ,GAAG;AAGzC,QAAO,MAAM,OAAO,OAAO,QAAQ,EAAE,GAAG;AACxC,QAAO,KAAK,eAAe,MAAM;EAChC;;;;AC/BF,eAAe,iBAAiB,QAAgB,SAAsE;CACrH,MAAM,UAAU,MAAM,OAAO,MAAM,QAClC,OAAO,MAAM,UACb,QAAQ,EAAE,UACJ,cAAc,QAAQ,QAAQ,EAAE,GACrC,MAAM,GAAG,OAAO,QAAQ,EAAW,CACpC;AAED,KAAI,CAAC,QAAS;AAEd,KAAI,QAAQ,SAAS,IAAI,CAAC,QAAQ,MAAM,SAAS,IAAI,QAAQ,GAAG,CAC/D,SAAQ,MAAM,SAAS,IAAI,QAAQ,IAAI,QAAQ;AAGhD,QAAO,KAAK,QAAQ,MAAM,sBAAsB,gBAAgB,kBAAkB,iBAAiB,QAAQ;;AAG5G,gBAAgB,sBAAsB,eAAe,iBAAiB;AACtE,gBAAgB,sBAAsB,eAAe,iBAAiB;AACtE,gBAAgB,sBAAsB,gBAAgB,QAAQ,YAAY;CACzE,MAAM,UAAU,OAAO,MAAM,SAAS,IAAI,QAAQ,EAAE,GAAG;CACvD,MAAM,QAAQ,OAAO,MAAM,OAAO,IAAI,QAAQ,EAAE,SAAS;AAEzD,KAAI,MACH,OAAM,SAAS,OAAO,QAAQ,EAAE,GAAG;AAGpC,KAAI,CAAC,QACJ;AAGD,QAAO,MAAM,SAAS,OAAO,QAAQ,EAAE,GAAG;AAE1C,QAAO,KAAK,iBAAiB,QAAQ;EACpC;;;;ACzCF,gBAAgB,sBAAsB,YAAY,OAAO,QAAQ,YAAY;AAC5E,KAAI,QAAQ,EAAE,OAAO,OAAO,MAAM,GACjC,QAAO,KAAK,OAAO,QAAQ,EAAE;CAG9B,IAAI;AAEJ,KAAI,OAAO,MAAM,gBAAgB,QAAQ,CACxC,QAAO,MAAM,OAAO,MAAM,QACzB,OAAO,MAAM,OACb,QAAQ,EAAE,UACJ,IAAI,KAAK,QAAQ,QAAQ,EAAE,GAChC,SAAS,KAAK,OAAO,QAAQ,EAAE,CAChC;KAED,QAAO,IAAI,KAAK,QAAQ,QAAQ,EAAE;AAGnC,QAAO,KAAK,cAAc,KAAK;EAC9B;;;;AC+BF,IAAa,SAAb,cAA6D,aAA2B;CACvF,AAAgB;CAKhB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAEhB,AAAgB;CAEhB;CACA,SAAS;CAET,AAAO,YAAY,SAAwB,MAAiB;AAC3D,SAAO;EAEP,MAAM,UAAU,QAAQ,mBAAmB,kBAAkB,QAAQ,UAAU,IAAI,gBAAgB,QAAQ,QAAQ;EACnH,MAAM,WAAW;GAChB,kBAAkB,QAAQ,UAAU,oBAAoB;GACxD,aAAa,QAAQ,UAAU,eAAe;GAC9C;AAED,OAAK,UAAU;GACd,OAAO,QAAQ;GACf;GACA;GACA,UAAU,IAAI,IAAI,QAAQ,YAAY,EAAE,CAAC;GACzC,OAAO,QAAQ,SAAS,EAAE;GAC1B;AAED,OAAK,OAAO,QAAQ,IAAIC,OAAK,EAAE,OAAO,QAAQ,OAAO,CAAC;AAEtD,OAAK,SAAS,IAAIC,kBACjB;GACC,GAAG,KAAK,QAAQ;GAChB,OAAO,KAAK,QAAQ;GACpB,SAAS,KAAK,QAAQ,QAAQ,UAAU;GACxC,EACD,KACA;AAED,OAAK,QAAQ,IAAI,mBAAmB,KAAK,QAAQ,MAAM;AAEvD,OAAK,SAAS,IAAI,aAAa,KAAK;AAEpC,QAAKC,sBAAuB;;CAG7B,IAAI,OAAqD;AACxD,SAAO,MAAKC;;CAGb,MAAa,QAAQ;AACpB,MAAI,MAAKA,QAAS,KAAK,OAAO,SAAS,KAAK,OAAO,SAAS,OAAO,EAClE,OAAM,IAAI,MAAM,qBAAqB;AAGtC,QAAM,KAAK,OAAO,OAAO;AAEzB,SAAO,IAAI,SAAe,SAAS,WAAW;GAC7C,MAAM,gBAAgB;AACrB,SAAK,eAAe,SAAS,QAAQ;AACrC,SAAK,eAAe,SAAS,QAAQ;;GAGtC,MAAM,gBAAgB;AACrB,aAAS;AACT,aAAS;;GAGV,MAAM,WAAW,UAAiB;AACjC,aAAS;AACT,WAAO,MAAM;;AAGd,QAAK,KAAK,SAAS,QAAQ;AAC3B,QAAK,KAAK,SAAS,QAAQ;IAC1B;;CAGH,wBAAwB;AACvB,OAAK,OAAO,GAAG,aAAa,GAAG,SAAS,YAAY,MAAKC,eAAgB,SAAS,QAAQ,CAAC;AAC3F,OAAK,OAAO,GAAG,QAAQ,GAAG,SAAS,YAAY,KAAK,KAAK,OAAO,SAAS,QAAQ,CAAC;AAClF,OAAK,OAAO,KAAK,eAAe,MAAKC,cAAe,CAAC;;CAGtD,OAAMD,eAAgB,SAAiB,SAAiC;AACvE,OAAK,KAAK,YAAY,SAAS,QAAQ;AAEvC,UAAQ,QAAQ,GAAhB;GACC,KAAK,sBAAsB;AAC1B,UAAKD,SAAU,IAAI,KAAK,MAAM,QAAQ,EAAE,KAAK;AAI7C,UAAKE,cAAe;AACpB;GAGD,SAAS;IACR,MAAM,UAAU,SAAS,QAAQ;AAEjC,QAAI,QACH,OAAM,QAAQ,MAAM,QAAQ;AAG7B;;;;;;;;CASH,gBAAgB;AACf,MAAI,MAAKC,SAAU,CAAC,MAAKH,QAAS,CAAC,KAAK,OAAO,MAC9C;AAGD,QAAKG,QAAS;AACd,OAAK,KAAK,SAAS,MAAKH,KAAO;;;AAIjC,SAAgB,aAAa,SAAwB;AACpD,QAAO,IAAI,OAAO,QAAQ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bakit",
3
- "version": "3.0.1",
3
+ "version": "3.1.0",
4
4
  "description": "A modern, full-stack Discord API wrapper and framework",
5
5
  "type": "module",
6
6
  "exports": {
@@ -43,12 +43,12 @@
43
43
  "@discordjs/collection": "^2.1.1",
44
44
  "commander": "^14.0.3",
45
45
  "discord-api-types": "^0.38.38",
46
- "dotenv": "^17.2.3",
46
+ "dotenv": "^17.2.4",
47
47
  "tiny-glob": "^0.2.9",
48
48
  "tiny-mixin": "^1.1.1",
49
49
  "type-fest": "^4.41.0",
50
- "@bakit/rest": "^3.0.3",
51
50
  "@bakit/gateway": "^3.0.3",
51
+ "@bakit/rest": "^3.0.4",
52
52
  "@bakit/utils": "^3.0.1",
53
53
  "@bakit/service": "^4.0.3"
54
54
  },