bakit 3.0.1 → 3.2.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":["#ensureChannelCache","#cachedAuthor","#cachedTags","#cachedRecipients","#initRecipientsCache","#initChannels","#setupSweepTTL","#sweepTimer","#users","#sweepers","#messages","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/Typing.ts","../src/lib/structures/Tag.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/structures/channel/GuildStageVoiceChannel.ts","../src/lib/structures/channel/GuildAnnouncementChannel.ts","../src/lib/structures/channel/GuildForumChannel.ts","../src/lib/structures/channel/GuildCategory.ts","../src/lib/structures/channel/DMChannel.ts","../src/lib/structures/channel/ThreadChannel.ts","../src/lib/managers/client/ClientChannelManager.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/managers/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/dispatches/handlers/thread.ts","../src/lib/client/dispatches/handlers/member.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 \"../managers/client/ClientChannelManager.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\";\nimport { User } from \"./User.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 \"../managers/client/index.js\";\nimport type { 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\" || this.channel === undefined;\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: string | MessageReplyOptions) {\n\t\treturn this.client.channels.replyMessage(this.channelId, this.id, options);\n\t}\n\n\tpublic async edit(options: string | MessageEditOptions) {\n\t\treturn this.client.channels.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 = client.cache.channels.get(this.channelId) ?? this.guild?.channels.get(this.channelId);\n\n\t\tif (!channel) {\n\t\t\tif (this.guildId) {\n\t\t\t\tchannel = this.client.channels.resolve({\n\t\t\t\t\tid: this.channelId,\n\t\t\t\t\ttype: ChannelType.GuildText,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tchannel = this.client.channels.resolve({\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],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!channel) {\n\t\t\t\tthrow new Error(\"Channel not found\");\n\t\t\t}\n\n\t\t\tclient.cache.channels.set(this.channelId, channel);\n\t\t}\n\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 type { GatewayTypingStartDispatchData } from \"discord-api-types/v10\";\nimport type { Client } from \"../client/Client.js\";\nimport { BaseStructure } from \"./BaseStructure.js\";\n\nexport type TypingPayload = GatewayTypingStartDispatchData;\n\nexport class Typing extends BaseStructure {\n\tpublic constructor(\n\t\tclient: Client,\n\t\tpublic data: TypingPayload,\n\t) {\n\t\tsuper(client);\n\t}\n\n\tpublic get channelId() {\n\t\treturn this.data.channel_id;\n\t}\n\n\tpublic get guildId() {\n\t\treturn this.data.guild_id;\n\t}\n\n\tpublic get userId() {\n\t\treturn this.data.user_id;\n\t}\n\n\tpublic get timestamp() {\n\t\treturn this.data.timestamp;\n\t}\n\n\tpublic get member() {\n\t\treturn this.data.member;\n\t}\n\n\tpublic get channel() {\n\t\treturn this.guild?.channels.get(this.channelId) ?? this.client.cache.channels.get(this.channelId);\n\t}\n\n\tpublic get guild() {\n\t\tif (this.data.guild_id) {\n\t\t\treturn this.client.cache.guilds.get(this.data.guild_id);\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n","import { BaseStructure } from \"./BaseStructure.js\";\n\nimport type { Client } from \"@/lib/client/Client.js\";\nimport type { APIGuildForumTag } from \"discord-api-types/v10\";\n\nexport class Tag extends BaseStructure {\n\tpublic constructor(\n\t\tclient: Client,\n\t\tpublic data: APIGuildForumTag,\n\t) {\n\t\tsuper(client);\n\t}\n\n\tpublic get id(): string {\n\t\treturn this.data.id;\n\t}\n\n\tpublic get name(): string {\n\t\treturn this.data.name;\n\t}\n\n\tpublic get moderated(): boolean {\n\t\treturn this.data.moderated ?? false;\n\t}\n\n\tpublic get emojiId(): string | undefined {\n\t\treturn this.data.emoji_id ?? undefined;\n\t}\n\n\tpublic get emojiName(): string | undefined {\n\t\treturn this.data.emoji_name ?? undefined;\n\t}\n\n\tpublic _patch(data: Partial<APIGuildForumTag>): void {\n\t\tthis.data = {\n\t\t\t...this.data,\n\t\t\t...data,\n\t\t};\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\";\nimport type { ThreadBasedChannel } from \"./ThreadChannel.js\";\nimport type { GuildAnnouncementChannel } from \"./GuildAnnouncementChannel.js\";\nimport type { GuildStageVoiceChannel } from \"./GuildStageVoiceChannel.js\";\nimport type { GuildCategory } from \"./GuildCategory.js\";\n\nexport type BaseChannelPayload =\n\t| APIChannelBase<ChannelType>\n\t| GatewayChannelCreateDispatchData\n\t| GatewayChannelUpdateDispatchData\n\t| APIChannel;\n\nexport type TextBasedChannel =\n\t| GuildTextChannel\n\t| GuildVoiceChannel\n\t| GuildStageVoiceChannel\n\t| DMChannel\n\t| GuildAnnouncementChannel\n\t| ThreadBasedChannel;\nexport type VoiceBasedChannel = GuildVoiceChannel | GuildStageVoiceChannel;\nexport type GuildChannel = GuildTextChannel | GuildVoiceChannel | GuildAnnouncementChannel | GuildCategory;\n\nexport type Channel = TextBasedChannel | VoiceBasedChannel | GuildChannel | BaseChannel<BaseChannelPayload>;\n\nexport class BaseChannel<D extends BaseChannelPayload, Type extends ChannelType = D[\"type\"]> 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 partial() {\n\t\treturn Object.keys(this.data).length <= 2;\n\t}\n\n\tpublic get id() {\n\t\treturn this.data.id;\n\t}\n\n\tpublic get type(): Type {\n\t\treturn this.data.type as 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 isThread(): this is ThreadBasedChannel {\n\t\treturn (\n\t\t\tthis.type === ChannelType.AnnouncementThread ||\n\t\t\tthis.type === ChannelType.PublicThread ||\n\t\t\tthis.type === ChannelType.PrivateThread\n\t\t);\n\t}\n\n\tpublic isPublicThread(): this is ThreadBasedChannel {\n\t\treturn this.type === ChannelType.PublicThread;\n\t}\n\n\tpublic isPrivateThread(): this is ThreadBasedChannel {\n\t\treturn this.type === ChannelType.PrivateThread;\n\t}\n\n\tpublic isAnnouncementThread(): this is ThreadBasedChannel {\n\t\treturn this.type === ChannelType.AnnouncementThread;\n\t}\n\n\tpublic isCategory(): this is GuildCategory {\n\t\treturn this.type === ChannelType.GuildCategory;\n\t}\n\n\tpublic inGuild(): this is GuildChannel {\n\t\treturn \"guild_id\" in this.data;\n\t}\n\n\tpublic async fetch(): Promise<this> {\n\t\tconst channel = await this.client.channels.fetch(this.id, true);\n\n\t\tif (!channel) {\n\t\t\tthrow new Error(\"Channel not found\");\n\t\t}\n\n\t\treturn channel as this;\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 {\n\tAPIGuildChannel,\n\tAPITextBasedChannel,\n\tAPIVoiceChannelBase,\n\tChannelType,\n\tGuildChannelType,\n} from \"discord-api-types/v10\";\nimport type { MessageCreateOptions } from \"../managers/client/ClientChannelManager.js\";\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 get lastMessageId() {\n\t\t\treturn this.data.last_message_id ?? undefined;\n\t\t}\n\n\t\tpublic get rateLimitPerUser() {\n\t\t\treturn this.data.rate_limit_per_user;\n\t\t}\n\n\t\tpublic send(options: MessageCreateOptions | string) {\n\t\t\treturn this.client.channels.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 parentId() {\n\t\t\treturn this.data.parent_id ?? undefined;\n\t\t}\n\n\t\tpublic get parent(): GuildChannel | undefined {\n\t\t\treturn this.parentId ? (this.client.cache.channels.get(this.parentId) as GuildChannel | undefined) : undefined;\n\t\t}\n\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 { BaseChannel } from \"./BaseChannel.js\";\nimport { GuildChannelMixin, TextBasedChannelMixin } from \"@/lib/mixins/ChannelMixin.js\";\nimport { applyMixins } from \"tiny-mixin\";\n\nimport type { APIGuildTextChannel, GuildTextChannelType } from \"discord-api-types/v10\";\n\nexport class GuildTextChannel extends applyMixins(BaseChannel<APIGuildTextChannel<GuildTextChannelType>>, [\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 { applyMixins } from \"tiny-mixin\";\n\nimport { BaseChannel } from \"./BaseChannel.js\";\nimport { GuildChannelMixin, TextBasedChannelMixin, VoiceBasedChannelMixin } from \"@/lib/mixins/ChannelMixin.js\";\n\nimport type { APIGuildStageVoiceChannel } from \"discord-api-types/v10\";\n\nexport class GuildStageVoiceChannel extends applyMixins(BaseChannel<APIGuildStageVoiceChannel>, [\n\tGuildChannelMixin,\n\tTextBasedChannelMixin,\n\tVoiceBasedChannelMixin,\n]) {}\n","import { applyMixins } from \"tiny-mixin\";\n\nimport { BaseChannel } from \"./BaseChannel.js\";\nimport { GuildChannelMixin, TextBasedChannelMixin } from \"@/lib/mixins/ChannelMixin.js\";\n\nimport type { APINewsChannel } from \"discord-api-types/v10\";\n\nexport class GuildAnnouncementChannel extends applyMixins(BaseChannel<APINewsChannel>, [\n\tGuildChannelMixin,\n\tTextBasedChannelMixin,\n]) {\n\tpublic crosspost(messageId: string) {\n\t\treturn this.client.channels.crosspost(this.id, messageId);\n\t}\n}\n","// structures/channel/ForumChannel.ts\nimport { Collection } from \"@discordjs/collection\";\nimport { applyMixins } from \"tiny-mixin\";\n\nimport { BaseChannel } from \"./BaseChannel.js\";\nimport { GuildChannelMixin } from \"@/lib/mixins/ChannelMixin.js\";\nimport { Tag } from \"../Tag.js\";\n\nimport type { Client } from \"@/lib/client/Client.js\";\nimport type {\n\tAPIGuildForumChannel,\n\tForumLayoutType,\n\tSortOrderType,\n\tThreadAutoArchiveDuration,\n} from \"discord-api-types/v10\";\nimport type { MessageCreateOptions } from \"@/lib/managers/client/ClientChannelManager.js\";\n\nexport interface CreateForumPostOptions {\n\tname: string;\n\tmessage: MessageCreateOptions | string;\n\tautoArchiveDuration?: ThreadAutoArchiveDuration;\n\trateLimitPerUser?: number;\n\tappliedTags?: string[];\n}\n\nexport class GuildForumChannel extends applyMixins(BaseChannel<APIGuildForumChannel>, [GuildChannelMixin]) {\n\t#cachedTags?: Collection<string, Tag>;\n\n\tpublic constructor(client: Client, data: APIGuildForumChannel) {\n\t\tsuper(client, data);\n\t}\n\n\tget topic(): string | undefined {\n\t\treturn this.data.topic ?? undefined;\n\t}\n\n\tget defaultAutoArchiveDuration(): ThreadAutoArchiveDuration | undefined {\n\t\treturn this.data.default_auto_archive_duration;\n\t}\n\n\tget defaultSortOrder(): SortOrderType | null | undefined {\n\t\treturn this.data.default_sort_order;\n\t}\n\n\tget defaultForumLayout(): ForumLayoutType | undefined {\n\t\treturn this.data.default_forum_layout;\n\t}\n\n\tget defaultThreadRateLimitPerUser(): number | undefined {\n\t\treturn this.data.default_thread_rate_limit_per_user;\n\t}\n\n\tget nsfw(): boolean {\n\t\treturn this.data.nsfw ?? false;\n\t}\n\n\tget tags(): Collection<string, Tag> {\n\t\tif (!this.#cachedTags) {\n\t\t\tthis.#cachedTags = new Collection();\n\n\t\t\tfor (const tagData of this.data.available_tags ?? []) {\n\t\t\t\tconst tag = new Tag(this.client, tagData);\n\t\t\t\tthis.#cachedTags.set(tag.id, tag);\n\t\t\t}\n\t\t}\n\n\t\treturn this.#cachedTags;\n\t}\n\n\tpublic override _patch(data: Partial<APIGuildForumChannel>): void {\n\t\tsuper._patch(data);\n\t\tthis.#cachedTags = undefined;\n\t}\n}\n","import { BaseChannel } from \"./BaseChannel.js\";\nimport { GuildChannelMixin } from \"@/lib/mixins/ChannelMixin.js\";\nimport { applyMixins } from \"tiny-mixin\";\nimport type { APIGuildCategoryChannel } from \"discord-api-types/v10\";\nimport type { Client } from \"@/lib/client/Client.js\";\n\nexport class GuildCategory extends applyMixins(BaseChannel<APIGuildCategoryChannel>, [GuildChannelMixin]) {\n\tpublic constructor(client: Client, data: APIGuildCategoryChannel) {\n\t\tsuper(client, data);\n\t}\n\n\tpublic get children() {\n\t\treturn this.guild?.channels.filter((channel) => channel.inGuild() && channel.parentId === this.id);\n\t}\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/managers/client/ClientChannelManager.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 { applyMixins } from \"tiny-mixin\";\n\nimport { BaseChannel } from \"./BaseChannel.js\";\nimport { GuildChannelMixin, TextBasedChannelMixin } from \"@/lib/mixins/ChannelMixin.js\";\n\nimport type { APIThreadChannel, ChannelType } from \"discord-api-types/v10\";\n\nexport interface PublicThread extends ThreadChannel {\n\treadonly type: ChannelType.PublicThread;\n}\n\nexport interface PrivateThread extends ThreadChannel {\n\treadonly type: ChannelType.PrivateThread;\n}\n\nexport interface AnnouncementThread extends ThreadChannel {\n\treadonly type: ChannelType.AnnouncementThread;\n}\n\nexport type ThreadBasedChannel = PublicThread | PrivateThread | AnnouncementThread;\n\nexport class ThreadChannel extends applyMixins(BaseChannel<APIThreadChannel>, [\n\tGuildChannelMixin,\n\tTextBasedChannelMixin,\n]) {\n\tpublic get ownerId() {\n\t\treturn this.data.owner_id;\n\t}\n\n\tpublic get archived() {\n\t\treturn this.data.thread_metadata?.archived ?? false;\n\t}\n\n\tpublic get locked() {\n\t\treturn this.data.thread_metadata?.locked ?? false;\n\t}\n\n\tpublic get autoArchiveDuration() {\n\t\treturn this.data.thread_metadata?.auto_archive_duration;\n\t}\n\n\tpublic get archiveTimestamp() {\n\t\treturn this.data.thread_metadata?.archive_timestamp;\n\t}\n\n\tpublic get invitable() {\n\t\treturn this.data.thread_metadata?.invitable;\n\t}\n\n\tpublic get memberCount() {\n\t\treturn this.data.member_count;\n\t}\n\n\tpublic get messageCount() {\n\t\treturn this.data.message_count;\n\t}\n\n\tpublic get totalMessageSent() {\n\t\treturn this.data.total_message_sent;\n\t}\n}\n","import {\n\tChannelType,\n\tRoutes,\n\ttype APIAllowedMentions,\n\ttype APIChannel,\n\ttype APIDMChannel,\n\ttype APIEmbed,\n\ttype APIGuildForumChannel,\n\ttype APIGuildStageVoiceChannel,\n\ttype APIGuildTextChannel,\n\ttype APIMessage,\n\ttype APIMessageReference,\n\ttype APINewsChannel,\n\ttype APIPublicThreadChannel,\n\ttype APIVoiceChannelBase,\n\ttype GuildTextChannelType,\n\ttype RESTPostAPIGuildChannelJSONBody,\n} from \"discord-api-types/v10\";\n\nimport {\n\tDMChannel,\n\tGuildAnnouncementChannel,\n\tGuildStageVoiceChannel,\n\tGuildTextChannel,\n\tGuildVoiceChannel,\n\tGuildForumChannel,\n\tMessage,\n\tThreadChannel,\n\ttype BaseChannelPayload,\n\ttype Channel,\n\tBaseChannel,\n} from \"../../structures/index.js\";\n\nimport type { Client } from \"../../client/Client.js\";\nimport type { Snowflake } from \"discord-api-types/globals\";\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 ClientChannelManager {\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 fetch<C extends Channel>(id: Snowflake, force = false): Promise<C | undefined> {\n\t\tif (!force) {\n\t\t\tconst cached = this.client.cache.channels.get(id);\n\n\t\t\tif (cached) {\n\t\t\t\treturn cached as C;\n\t\t\t}\n\t\t}\n\n\t\tconst data: APIChannel | undefined = await this.client.rest\n\t\t\t.get<APIChannel>(Routes.channel(id))\n\t\t\t.catch(() => undefined);\n\n\t\tif (!data) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst existing = this.client.cache.channels.get(id);\n\n\t\t// If existing and type matches, patch it in place\n\t\tif (existing && existing.type === data.type) {\n\t\t\t(existing as BaseChannel<BaseChannelPayload>)._patch(data);\n\t\t\treturn existing as C;\n\t\t}\n\n\t\t// Otherwise, create a brand new channel (replaces any mismatched entry)\n\t\tconst newChannel = ClientChannelManager.create(this.client, data);\n\t\tthis.client.cache.channels.set(id, newChannel!);\n\n\t\treturn newChannel as C;\n\t}\n\n\tpublic async delete(id: Snowflake, force = false): Promise<Channel | undefined> {\n\t\tconst channel = this.client.cache.channels.get(id);\n\n\t\tif (!channel && !force) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.client.rest.delete(Routes.channel(id));\n\n\t\tif (channel) {\n\t\t\tthis.client.cache.channels.delete(id);\n\n\t\t\tif (channel.inGuild()) {\n\t\t\t\tchannel.guild.channels.delete(id);\n\t\t\t}\n\t\t}\n\n\t\treturn channel;\n\t}\n\n\tpublic async create(guildId: Snowflake, payload: RESTPostAPIGuildChannelJSONBody) {\n\t\tconst data = await this.client.rest.post<APIChannel, RESTPostAPIGuildChannelJSONBody>(\n\t\t\tRoutes.guildChannels(guildId),\n\t\t\t{\n\t\t\t\tbody: payload,\n\t\t\t},\n\t\t);\n\n\t\tconst channel = ClientChannelManager.create(this.client, data)!;\n\n\t\tthis.client.cache.channels.set(channel.id, channel);\n\n\t\tif (channel.inGuild()) {\n\t\t\tchannel.guild.channels.set(channel.id, channel);\n\t\t}\n\n\t\treturn channel;\n\t}\n\n\tpublic async crosspost(channelId: Snowflake, messageId: Snowflake) {\n\t\tconst data = await this.client.rest.post<APIMessage>(Routes.channelMessageCrosspost(channelId, messageId));\n\t\tconst message = new Message<true>(this.client, 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 createMessage(channelId: Snowflake, 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: ClientChannelManager.createMessagePayload(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: Snowflake, messageId: Snowflake, 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>(Routes.channelMessage(channelId, messageId), {\n\t\t\tbody: ClientChannelManager.createMessagePayload(options),\n\t\t});\n\n\t\tlet message: Message | undefined;\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 deleteMessage(channelId: Snowflake, messageId: Snowflake, force = false) {\n\t\tlet message: Message | undefined;\n\n\t\tif (!force && this.client.cache.isModuleEnabled(\"messages\")) {\n\t\t\tmessage = await this.client.cache.messages.get(messageId);\n\n\t\t\tif (!message) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\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\n\t\treturn message;\n\t}\n\n\tpublic async replyMessage(channelId: Snowflake, messageId: Snowflake, options: MessageReplyOptions | string) {\n\t\tif (typeof options === \"string\") {\n\t\t\toptions = { content: options };\n\t\t}\n\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 resolve(data: BaseChannelPayload) {\n\t\treturn this.client.cache.resolveLocal(\n\t\t\tthis.client.cache.channels,\n\t\t\tdata.id,\n\t\t\t() => ClientChannelManager.create(this.client, data),\n\t\t\t(c) => c?._patch(data as never),\n\t\t);\n\t}\n\n\tpublic static create(client: Client, data: BaseChannelPayload) {\n\t\tswitch (data.type) {\n\t\t\tcase ChannelType.GuildText:\n\t\t\t\treturn new GuildTextChannel(client, data as APIGuildTextChannel<GuildTextChannelType>);\n\n\t\t\tcase ChannelType.GuildVoice:\n\t\t\t\treturn new GuildVoiceChannel(client, data as APIVoiceChannelBase<ChannelType.GuildVoice>);\n\n\t\t\tcase ChannelType.GuildStageVoice:\n\t\t\t\treturn new GuildStageVoiceChannel(client, data as APIGuildStageVoiceChannel);\n\n\t\t\tcase ChannelType.GuildAnnouncement:\n\t\t\t\treturn new GuildAnnouncementChannel(client, data as APINewsChannel);\n\n\t\t\tcase ChannelType.DM:\n\t\t\t\treturn new DMChannel(client, data as APIDMChannel);\n\n\t\t\tcase ChannelType.GuildForum:\n\t\t\t\treturn new GuildForumChannel(client, data as APIGuildForumChannel);\n\n\t\t\tcase ChannelType.PublicThread:\n\t\t\tcase ChannelType.PrivateThread:\n\t\t\tcase ChannelType.AnnouncementThread:\n\t\t\t\treturn new ThreadChannel(client, data as APIPublicThreadChannel);\n\t\t}\n\n\t\treturn new BaseChannel(client, data);\n\t}\n\n\tpublic joinThread(threadId: Snowflake) {\n\t\treturn this.client.rest.post(Routes.threadMembers(threadId));\n\t}\n\n\tpublic static createMessagePayload(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","import { Collection } from \"@discordjs/collection\";\n\nimport { BaseStructure } from \"./BaseStructure.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\";\nimport { ClientChannelManager } from \"../managers/client/ClientChannelManager.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 = ClientChannelManager.create(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","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\tAPIMessage,\n\tAPIGuild,\n\tAPIDMChannel,\n\tRESTPostAPICurrentUserCreateDMChannelJSONBody,\n} from \"discord-api-types/v10\";\nimport { User } from \"../structures/User.js\";\nimport { DMChannel } from \"../structures/channel/DMChannel.js\";\n\nimport type { Channel } from \"../structures/index.js\";\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 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 fetchChannel<C extends Channel>(channelId: string, force = false) {\n\t\treturn this.client.channels.fetch<C>(channelId, force);\n\t}\n\n\tpublic async crosspostMessage(channelId: string, messageId: string) {\n\t\tconst data = await this.client.rest.post<APIMessage>(Routes.channelMessageCrosspost(channelId, messageId));\n\t\tconst message = new Message<true>(this.client, 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","export enum Partial {\n\tMessage,\n\tUser,\n\tChannel,\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 forEach(callback: (value: Value, key: Key) => void): void {\n\t\tfor (const [key, entry] of this.collection) {\n\t\t\tcallback(entry.value, key);\n\t\t}\n\t}\n\n\tpublic map<T>(callback: (value: Value, key: Key) => T): T[] {\n\t\treturn this.collection.map<T>((entry, key) => callback(entry.value, key));\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 ensureMessageCache(\n\tclient: Client,\n\tpayload: GatewayMessageCreateDispatch | GatewayMessageUpdateDispatch,\n) {\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\treturn message;\n}\n\nregisterHandler(GatewayDispatchEvents.MessageCreate, async (client, payload) => {\n\tconst message = await ensureMessageCache(client, payload);\n\n\t// Update latest message ID for the cached channel\n\tmessage.channel.data.last_message_id = message.id;\n\n\tif (message.channel.isThread()) {\n\t\tmessage.channel.data.message_count = (message.channel.data.message_count ?? 0) + 1;\n\t\tmessage.channel.data.total_message_sent = (message.channel.data.total_message_sent ?? 0) + 1;\n\t}\n\n\tif (message.partial && !client.options.partials.has(Partial.Message)) {\n\t\treturn;\n\t}\n\n\tif (message.channel.partial && !client.options.partials.has(Partial.Channel)) {\n\t\treturn;\n\t}\n\n\tclient.emit(\"messageCreate\", message);\n});\n\nregisterHandler(GatewayDispatchEvents.MessageUpdate, async (client, payload) => {\n\tconst message = await ensureMessageCache(client, payload);\n\n\tif (message.partial && !client.options.partials.has(Partial.Message)) {\n\t\treturn;\n\t}\n\n\tif (message.channel.partial && !client.options.partials.has(Partial.Channel)) {\n\t\treturn;\n\t}\n\n\tclient.emit(\"messageUpdate\", message);\n});\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\tif (message.channel.isThread()) {\n\t\tmessage.channel.data.message_count = Math.min((message.channel.data.message_count ?? 0) - 1, 0);\n\t}\n\n\tclient.emit(\"messageDelete\", message);\n});\n","import { GatewayDispatchEvents } from \"discord-api-types/v10\";\n\nimport { registerHandler } from \"../registry.js\";\nimport { Guild } from \"@/lib/structures/index.js\";\n\nregisterHandler(GatewayDispatchEvents.GuildCreate, (client, payload) => {\n\tconst guild = client.cache.resolveLocal(\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\tfor (const data of payload.d.channels) {\n\t\tclient.channels.resolve(data);\n\t}\n\n\tfor (const thread of payload.d.threads) {\n\t\tclient.channels.resolve(thread);\n\t}\n\n\tclient.emit(payload.d.unavailable ? \"guildCreate\" : \"guildAvailable\", guild);\n});\n\nregisterHandler(GatewayDispatchEvents.GuildUpdate, (client, payload) => {\n\tconst guild = client.cache.resolveLocal(\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\tclient.emit(\"guildUpdate\", guild);\n});\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\";\n\nimport { ClientChannelManager } from \"@/lib/managers/client/ClientChannelManager.js\";\nimport { Partial } from \"../../Partial.js\";\n\nimport type { Client } from \"../../Client.js\";\nimport type { Channel } from \"@/lib/structures/index.js\";\n\nasync function onCreateOrUpdate(client: Client, payload: GatewayChannelCreateDispatch | GatewayChannelUpdateDispatch) {\n\tlet channel: Channel | undefined = client.cache.channels.get(payload.d.id);\n\n\tif (channel && channel.type === payload.d.type) {\n\t\tchannel._patch(payload.d as never);\n\t} else {\n\t\tchannel = ClientChannelManager.create(client, payload.d);\n\t\tclient.cache.channels.set(payload.d.id, channel);\n\t}\n\n\tif (channel.inGuild() && !channel.guild.channels.has(channel.id)) {\n\t\tchannel.guild.channels.set(channel.id, channel);\n\t}\n\n\tif (channel.partial && !client.options.partials.has(Partial.Channel)) {\n\t\treturn;\n\t}\n\n\tclient.emit(payload.t === GatewayDispatchEvents.ChannelCreate ? \"channelCreate\" : \"channelUpdate\", channel);\n}\n\nregisterHandler(GatewayDispatchEvents.ChannelCreate, onCreateOrUpdate);\nregisterHandler(GatewayDispatchEvents.ChannelUpdate, onCreateOrUpdate);\n\nregisterHandler(GatewayDispatchEvents.ChannelDelete, async (client, payload) => {\n\tconst channel = client.channels.resolve(payload.d);\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\tclient.cache.channels.delete(payload.d.id);\n\n\tif (!channel.partial || client.options.partials.has(Partial.Channel)) {\n\t\tclient.emit(\"channelDelete\", channel);\n\t}\n\n\tif (client.cache.isModuleEnabled(\"messages\")) {\n\t\tawait Promise.all(\n\t\t\tclient.cache.messages.local.map((message) => {\n\t\t\t\tif (message.channelId !== payload.d.id) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treturn client.cache.messages.delete(message.id);\n\t\t\t}),\n\t\t);\n\t}\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 {\n\tGatewayDispatchEvents,\n\ttype APIThreadChannel,\n\ttype GatewayChannelCreateDispatchData,\n\ttype GatewayChannelUpdateDispatchData,\n} from \"discord-api-types/v10\";\n\nimport { registerHandler } from \"../registry.js\";\nimport { ClientChannelManager } from \"@/lib/managers/client/ClientChannelManager.js\";\nimport { Partial } from \"../../Partial.js\";\n\nimport type { Client } from \"../../Client.js\";\nimport type { ThreadBasedChannel } from \"@/lib/structures/index.js\";\n\nfunction resolveThread(\n\tclient: Client,\n\tpayload: GatewayChannelCreateDispatchData | GatewayChannelUpdateDispatchData | APIThreadChannel,\n) {\n\tlet thread = client.cache.channels.get(payload.id) as ThreadBasedChannel | undefined;\n\n\tif (!thread?.isThread()) {\n\t\tthread = ClientChannelManager.create(client, payload) as ThreadBasedChannel;\n\n\t\tclient.cache.channels.set(payload.id, thread);\n\t\tthread.guild.channels.set(payload.id, thread);\n\t} else {\n\t\tthread._patch(payload);\n\t}\n\n\tif (\"member\" in payload) {\n\t\t// TODO: store members\n\t}\n\n\treturn thread as ThreadBasedChannel;\n}\n\nregisterHandler(GatewayDispatchEvents.ThreadCreate, (client, payload) => {\n\tconst thread = resolveThread(client, payload.d);\n\n\tif (thread.partial && !client.options.partials.has(Partial.Channel)) {\n\t\treturn;\n\t}\n\n\tclient.emit(\"threadCreate\", thread);\n});\n\nregisterHandler(GatewayDispatchEvents.ThreadUpdate, (client, payload) => {\n\tconst thread = resolveThread(client, payload.d);\n\n\tif (thread.partial && !client.options.partials.has(Partial.Channel)) {\n\t\treturn;\n\t}\n\n\tclient.emit(\"threadUpdate\", thread);\n});\n\nregisterHandler(GatewayDispatchEvents.ThreadDelete, (client, payload) => {\n\tlet thread = client.cache.channels.get(payload.d.id);\n\n\tif (thread) {\n\t\tclient.cache.channels.delete(payload.d.id);\n\t} else {\n\t\tthread = ClientChannelManager.create(client, {\n\t\t\tid: payload.d.id,\n\t\t\tguild_id: payload.d.guild_id,\n\t\t\tparent_id: payload.d.parent_id,\n\t\t\ttype: payload.d.type,\n\t\t});\n\t}\n\n\tif (!thread.isThread()) {\n\t\treturn;\n\t}\n\n\tif (thread.partial && !client.options.partials.has(Partial.Channel)) {\n\t\treturn;\n\t}\n\n\tclient.emit(\"threadDelete\", thread);\n});\n\nregisterHandler(GatewayDispatchEvents.ThreadListSync, (client, payload) => {\n\tfor (const thread of payload.d.threads) {\n\t\tresolveThread(client, thread);\n\t}\n});\n","import { GatewayDispatchEvents } from \"discord-api-types/v10\";\nimport { registerHandler } from \"../registry.js\";\nimport { Typing } from \"@/lib/structures/Typing.js\";\n\nregisterHandler(GatewayDispatchEvents.TypingStart, async (client, payload) => {\n\t// TODO: add cache module for member\n\n\tconst typing = new Typing(client, payload.d);\n\n\tclient.emit(\"typingStart\", typing);\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, ClientChannelManager, type ClientCacheManagerOptions } from \"../managers/client/index.js\";\n\nimport { handlers } from \"./dispatches/index.js\";\n\nimport type { Channel, Typing, ThreadBasedChannel } 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\tthreadCreate: [thread: ThreadBasedChannel];\n\tthreadUpdate: [thread: ThreadBasedChannel];\n\tthreadDelete: [thread: ThreadBasedChannel];\n\n\ttypingStart: [typing: Typing];\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\n\t/**\n\t * @private\n\t * @deprecated\n\t */\n\tpublic readonly helper: ClientHelper;\n\n\tpublic readonly cache: ClientCacheManager;\n\n\tpublic readonly channels: ClientChannelManager;\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\t\tthis.channels = new ClientChannelManager(this);\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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bakit",
3
- "version": "3.0.1",
3
+ "version": "3.2.0",
4
4
  "description": "A modern, full-stack Discord API wrapper and framework",
5
5
  "type": "module",
6
6
  "exports": {
@@ -43,13 +43,13 @@
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
- "@bakit/gateway": "^3.0.3",
50
+ "@bakit/rest": "^3.0.4",
52
51
  "@bakit/utils": "^3.0.1",
52
+ "@bakit/gateway": "^3.0.3",
53
53
  "@bakit/service": "^4.0.3"
54
54
  },
55
55
  "scripts": {