lunibee 0.1.0 → 0.1.2

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.
Files changed (67) hide show
  1. package/README.md +229 -0
  2. package/dist/builders/attachment.d.ts +20 -0
  3. package/dist/builders/commands.d.ts +118 -0
  4. package/dist/builders/components.d.ts +151 -0
  5. package/dist/builders/embed.d.ts +59 -0
  6. package/dist/builders/index.d.ts +5 -0
  7. package/dist/builders/index.js +828 -0
  8. package/dist/builders/index.js.map +13 -0
  9. package/dist/collection/cache.d.ts +37 -0
  10. package/dist/collection/index.d.ts +47 -0
  11. package/dist/collection/index.js +214 -0
  12. package/dist/collection/index.js.map +11 -0
  13. package/dist/core/client-state.d.ts +10 -0
  14. package/dist/core/collector.d.ts +27 -0
  15. package/dist/core/events.d.ts +5 -0
  16. package/dist/core/index.d.ts +111 -0
  17. package/dist/core/index.js +3188 -0
  18. package/dist/core/index.js.map +29 -0
  19. package/dist/core/permissions.d.ts +293 -0
  20. package/dist/formatters/index.d.ts +10 -0
  21. package/dist/formatters/index.js +43 -0
  22. package/dist/formatters/index.js.map +10 -0
  23. package/dist/handlers/index.d.ts +16 -0
  24. package/dist/handlers/index.js +37 -0
  25. package/dist/handlers/index.js.map +10 -0
  26. package/{src/index.ts → dist/index.d.ts} +2 -29
  27. package/dist/index.js +4182 -0
  28. package/dist/index.js.map +41 -0
  29. package/dist/managers/application.d.ts +28 -0
  30. package/dist/managers/base.d.ts +28 -0
  31. package/dist/managers/index.d.ts +96 -0
  32. package/dist/managers/index.js +947 -0
  33. package/dist/managers/index.js.map +22 -0
  34. package/dist/managers/member.d.ts +35 -0
  35. package/dist/managers/message.d.ts +25 -0
  36. package/dist/managers/role.d.ts +34 -0
  37. package/dist/managers/thread.d.ts +14 -0
  38. package/dist/rest/index.d.ts +49 -0
  39. package/dist/rest/index.js +344 -0
  40. package/dist/rest/index.js.map +12 -0
  41. package/dist/rest/routes.d.ts +44 -0
  42. package/dist/rest/types.d.ts +26 -0
  43. package/dist/rest/webhook.d.ts +40 -0
  44. package/dist/sharding/bus.d.ts +22 -0
  45. package/dist/sharding/index.d.ts +34 -0
  46. package/dist/sharding/index.js +732 -0
  47. package/dist/sharding/index.js.map +13 -0
  48. package/dist/structures/base.d.ts +75 -0
  49. package/dist/structures/index.d.ts +39 -0
  50. package/dist/structures/index.js +571 -0
  51. package/dist/structures/index.js.map +14 -0
  52. package/dist/structures/interactions.d.ts +136 -0
  53. package/dist/structures/permissions.d.ts +73 -0
  54. package/dist/structures/resources.d.ts +64 -0
  55. package/dist/types/index.d.ts +535 -0
  56. package/dist/types/index.js +132 -0
  57. package/dist/types/index.js.map +10 -0
  58. package/dist/utils/index.d.ts +6 -0
  59. package/dist/utils/index.js +18 -0
  60. package/dist/utils/index.js.map +10 -0
  61. package/dist/voice/index.d.ts +97 -0
  62. package/dist/voice/index.js +161 -0
  63. package/dist/voice/index.js.map +10 -0
  64. package/dist/ws/index.d.ts +76 -0
  65. package/dist/ws/index.js +582 -0
  66. package/dist/ws/index.js.map +11 -0
  67. package/package.json +113 -28
@@ -0,0 +1,22 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/collection/src/index.ts", "../../packages/managers/src/base.ts", "../../packages/rest/src/routes.ts", "../../packages/structures/src/base.ts", "../../packages/structures/src/permissions.ts", "../../packages/structures/src/resources.ts", "../../packages/structures/src/index.ts", "../../packages/managers/src/message.ts", "../../packages/managers/src/thread.ts", "../../packages/managers/src/role.ts", "../../packages/managers/src/member.ts", "../../packages/managers/src/application.ts", "../../packages/managers/src/index.ts"],
4
+ "sourcesContent": [
5
+ "/** A lightweight keyed collection for Lunibee resource and application state. */\r\nexport class Collection<K, V> extends Map<K, V> {\r\n /** Returns the first stored value. */\r\n public first(): V | undefined {\r\n for (const value of this.values()) return value;\r\n return undefined;\r\n }\r\n /** Returns the first stored key. */\r\n public firstKey(): K | undefined {\r\n for (const key of this.keys()) return key;\r\n return undefined;\r\n }\r\n /** Returns the last stored value. */\r\n public last(): V | undefined {\r\n let value: V | undefined;\r\n for (const item of this.values()) value = item;\r\n return value;\r\n }\r\n /** Returns the last stored key. */\r\n public lastKey(): K | undefined {\r\n let key: K | undefined;\r\n for (const item of this.keys()) key = item;\r\n return key;\r\n }\r\n /** Finds the first value matching a predicate. */\r\n public find(\r\n predicate: (value: V, key: K, collection: this) => boolean,\r\n ): V | undefined {\r\n for (const [key, value] of this) {\r\n if (predicate(value, key, this)) return value;\r\n }\r\n return undefined;\r\n }\r\n /** Returns all values matching a predicate. */\r\n public filter(\r\n predicate: (value: V, key: K, collection: this) => boolean,\r\n ): Collection<K, V> {\r\n const result = new Collection<K, V>();\r\n for (const [key, value] of this) {\r\n if (predicate(value, key, this)) result.set(key, value);\r\n }\r\n return result;\r\n }\r\n /** Transforms every stored value into an array. */\r\n public map<T>(transform: (value: V, key: K, collection: this) => T): T[] {\r\n const result: T[] = [];\r\n for (const [key, value] of this) {\r\n result.push(transform(value, key, this));\r\n }\r\n return result;\r\n }\r\n /** Returns whether at least one stored value satisfies a predicate. */\r\n public some(\r\n predicate: (value: V, key: K, collection: this) => boolean,\r\n ): boolean {\r\n for (const [key, value] of this) {\r\n if (predicate(value, key, this)) return true;\r\n }\r\n return false;\r\n }\r\n /** Returns whether every stored value satisfies a predicate. */\r\n public every(\r\n predicate: (value: V, key: K, collection: this) => boolean,\r\n ): boolean {\r\n for (const [key, value] of this) {\r\n if (!predicate(value, key, this)) return false;\r\n }\r\n return true;\r\n }\r\n /** Runs a callback for each stored value. */\r\n public each(callback: (value: V, key: K, collection: this) => unknown): this {\r\n for (const [key, value] of this) {\r\n callback(value, key, this);\r\n }\r\n return this;\r\n }\r\n /** Returns an array containing all stored values. */\r\n public array(): V[] {\r\n return [...this.values()];\r\n }\r\n /** Returns an array containing all stored keys. */\r\n public keyArray(): K[] {\r\n return [...this.keys()];\r\n }\r\n /** Returns a plain array of entries. */\r\n public entriesArray(): [K, V][] {\r\n return [...this.entries()];\r\n }\r\n /** Returns a new collection with the same entries. */\r\n public clone(): Collection<K, V> {\r\n const copy = new Collection<K, V>();\r\n for (const [key, value] of this) copy.set(key, value);\r\n return copy;\r\n }\r\n /** Returns whether all supplied keys are present. */\r\n public hasAll(...keys: K[]): boolean {\r\n for (let i = 0; i < keys.length; i++) {\r\n if (!this.has(keys[i]!)) return false;\r\n }\r\n return true;\r\n }\r\n /** Returns whether at least one supplied key is present. */\r\n public hasAny(...keys: K[]): boolean {\r\n for (let i = 0; i < keys.length; i++) {\r\n if (this.has(keys[i]!)) return true;\r\n }\r\n return false;\r\n }\r\n /** Returns the first key whose value matches a predicate. */\r\n public findKey(\r\n predicate: (value: V, key: K, collection: this) => boolean,\r\n ): K | undefined {\r\n for (const [key, value] of this) {\r\n if (predicate(value, key, this)) return key;\r\n }\r\n return undefined;\r\n }\r\n /** Returns whether a predicate matches at least one entry. */\r\n public someEntry(\r\n predicate: (value: V, key: K, collection: this) => boolean,\r\n ): boolean {\r\n return this.some(predicate);\r\n }\r\n /** Removes every entry matching a predicate and returns the number removed. */\r\n public sweep(\r\n predicate: (value: V, key: K, collection: this) => boolean,\r\n ): number {\r\n let removed = 0;\r\n for (const [key, value] of this) {\r\n if (predicate(value, key, this) && this.delete(key)) removed++;\r\n }\r\n return removed;\r\n }\r\n /** Returns the collection's first matching entry as a tuple. */\r\n public firstEntry(): [K, V] | undefined {\r\n for (const [key, value] of this) return [key, value];\r\n return undefined;\r\n }\r\n /** Returns the collection's last matching entry as a tuple. */\r\n public lastEntry(): [K, V] | undefined {\r\n let entry: [K, V] | undefined;\r\n for (const item of this) entry = [item[0], item[1]];\r\n return entry;\r\n }\r\n}\r\n\r\nexport { Cache } from \"./cache.js\";\r\nexport type { CacheOptions } from \"./cache.js\";\r\n",
6
+ "import { Collection } from \"@lunibee/collection\";\n\n/** Generic cache manager. @typeParam K Cache key type. @typeParam V Cached value type. */\nexport class Manager<K, V> {\n /** Cached resources. */ public readonly cache = new Collection<K, V>();\n /** Gets a cached value. @param id Cache key. @returns Cached value. */ public get(\n id: K,\n ): V | undefined {\n return this.cache.get(id);\n }\n /** Checks whether a value is cached. @param id Cache key. @returns True when cached. */ public has(\n id: K,\n ): boolean {\n return this.cache.has(id);\n }\n /** Stores a value. @param id Cache key. @param value Value. @returns This manager. */ public set(\n id: K,\n value: V,\n ): this {\n this.cache.set(id, value);\n return this;\n }\n /** Deletes a cached value. @param id Cache key. @returns True when deleted. */ public delete(\n id: K,\n ): boolean {\n return this.cache.delete(id);\n }\n /** Clears the cache. @returns Nothing. */ public clear(): void {\n this.cache.clear();\n }\n /** Gets cache size. @returns Number of cached values. */ public get size(): number {\n return this.cache.size;\n }\n /** Gets the first cached value. @returns First value. */ public first():\n V | undefined {\n return this.cache.first();\n }\n /** Returns cached values. @returns Array of values. */ public values(): V[] {\n return this.cache.array();\n }\n /** Finds a cached value. @param predicate Predicate. @returns Matching value. */ public find(\n predicate: (value: V, key: K) => boolean,\n ): V | undefined {\n return this.cache.find(predicate);\n }\n /** Iterates cached entries. @returns Cache iterator. */ public [Symbol.iterator](): IterableIterator<\n [K, V]\n > {\n return this.cache[Symbol.iterator]();\n }\n}\n\n/** Generic REST-backed resource manager. @typeParam K Resource key type. @typeParam V Resource type. */\nexport class ResourceManager<K, V> extends Manager<K, V> {\n readonly #fetcher: (id: K) => Promise<V>;\n readonly #key: (value: V) => K;\n\n public constructor(fetcher: (id: K) => Promise<V>, key: (value: V) => K) {\n super();\n if (typeof fetcher !== \"function\" || typeof key !== \"function\")\n throw new TypeError(\n \"ResourceManager requires fetcher and key functions.\",\n );\n this.#fetcher = fetcher;\n this.#key = key;\n }\n\n public async resolve(id: K): Promise<V> {\n return this.get(id) ?? this.fetch(id);\n }\n\n public async fetch(id: K): Promise<V> {\n const resource = await this.#fetcher(id);\n this.set(id, resource);\n return resource;\n }\n\n public async fetchMany(ids: Iterable<K>): Promise<V[]> {\n return Promise.all([...ids].map((id) => this.resolve(id)));\n }\n\n public upsert(resource: V): V {\n const key = this.#key(resource);\n this.set(key, resource);\n return resource;\n }\n\n public update(resource: V): V {\n return this.upsert(resource);\n }\n}\n",
7
+ "/** Discord REST API route definitions. */\r\nexport const Routes = {\r\n /** Returns the current bot user. @returns User route. */ user: () =>\r\n \"/users/@me\",\r\n /** Returns one user. @param userId User identifier. @returns User route. */ userById:\r\n (userId: string) => `/users/${snowflake(userId, \"User ID\")}`,\r\n /** Returns a guild. @param guildId Guild identifier. @returns Guild route. */ guild:\r\n (guildId: string) => `/guilds/${snowflake(guildId, \"Guild ID\")}`,\r\n /** Returns channels in a guild. @param guildId Guild identifier. @returns Channel collection route. */ guildChannels:\r\n (guildId: string) => `/guilds/${snowflake(guildId, \"Guild ID\")}/channels`,\r\n /** Returns a guild member. @param guildId Guild identifier. @param userId User identifier. @returns Guild-member route. */ guildMember:\r\n (guildId: string, userId: string) =>\r\n `/guilds/${snowflake(guildId, \"Guild ID\")}/members/${snowflake(userId, \"User ID\")}`,\r\n /** Returns all guild roles. @param guildId Guild identifier. @returns Guild-role route. */ guildRoles:\r\n (guildId: string) => `/guilds/${snowflake(guildId, \"Guild ID\")}/roles`,\r\n /** Returns an individual guild role. */ guildRole: (\r\n guildId: string,\r\n roleId: string,\r\n ) =>\r\n `/guilds/${snowflake(guildId, \"Guild ID\")}/roles/${snowflake(roleId, \"Role ID\")}`,\r\n /** Returns a member role route. */ guildMemberRole: (\r\n guildId: string,\r\n userId: string,\r\n roleId: string,\r\n ) =>\r\n `/guilds/${snowflake(guildId, \"Guild ID\")}/members/${snowflake(userId, \"User ID\")}/roles/${snowflake(roleId, \"Role ID\")}`,\r\n /** Returns guild bans collection. */ guildBans: (guildId: string) =>\r\n `/guilds/${snowflake(guildId, \"Guild ID\")}/bans`,\r\n /** Returns an individual guild ban. */ guildBan: (\r\n guildId: string,\r\n userId: string,\r\n ) =>\r\n `/guilds/${snowflake(guildId, \"Guild ID\")}/bans/${snowflake(userId, \"User ID\")}`,\r\n /** Returns a channel. @param channelId Channel identifier. @returns Channel route. */ channel:\r\n (channelId: string) => `/channels/${snowflake(channelId, \"Channel ID\")}`,\r\n /** Returns messages in a channel. @param channelId Channel identifier. @returns Message collection route. */ channelMessages:\r\n (channelId: string) =>\r\n `/channels/${snowflake(channelId, \"Channel ID\")}/messages`,\r\n /** Returns a message. @param channelId Channel identifier. @param messageId Message identifier. @returns Message route. */ message:\r\n (channelId: string, messageId: string) =>\r\n `/channels/${snowflake(channelId, \"Channel ID\")}/messages/${snowflake(messageId, \"Message ID\")}`,\r\n /** Crossposts a message. @param channelId Channel identifier. @param messageId Message identifier. @returns Crosspost route. */ crosspostMessage:\r\n (channelId: string, messageId: string) =>\r\n `${Routes.message(channelId, messageId)}/crosspost`,\r\n /** Returns reactions for a message and emoji. @param channelId Channel identifier. @param messageId Message identifier. @param emoji Emoji name or ID. @returns Reaction route. */ messageReactions:\r\n (channelId: string, messageId: string, emoji: string) =>\r\n `${Routes.message(channelId, messageId)}/reactions/${encodeURIComponent(emoji)}`,\r\n /** Removes all reactions from a message. @param channelId Channel identifier. @param messageId Message identifier. @returns Reaction collection route. */ messageReactionsAll:\r\n (channelId: string, messageId: string) =>\r\n `${Routes.message(channelId, messageId)}/reactions`,\r\n /** Returns pinned messages. @param channelId Channel identifier. @returns Pins route. */ channelPins:\r\n (channelId: string) =>\r\n `/channels/${snowflake(channelId, \"Channel ID\")}/pins`,\r\n /** Pins a message. @param channelId Channel identifier. @param messageId Message identifier. @returns Pin route. */ channelPin:\r\n (channelId: string, messageId: string) =>\r\n `/channels/${snowflake(channelId, \"Channel ID\")}/pins/${snowflake(messageId, \"Message ID\")}`,\r\n /** Creates a thread from a message. @param channelId Channel identifier. @param messageId Message identifier. @returns Message-thread route. */ messageThread:\r\n (channelId: string, messageId: string) =>\r\n `${Routes.message(channelId, messageId)}/threads`,\r\n /** Bulk deletes messages. @param channelId Channel identifier. @returns Bulk-delete route. */ channelBulkDelete:\r\n (channelId: string) =>\r\n `/channels/${snowflake(channelId, \"Channel ID\")}/messages/bulk-delete`,\r\n /** Returns channel webhooks. @param channelId Channel identifier. @returns Webhook collection route. */ channelWebhooks:\r\n (channelId: string) =>\r\n `/channels/${snowflake(channelId, \"Channel ID\")}/webhooks`,\r\n /** Returns channel invites. @param channelId Channel identifier. @returns Invite collection route. */ channelInvites:\r\n (channelId: string) =>\r\n `/channels/${snowflake(channelId, \"Channel ID\")}/invites`,\r\n /** Returns a webhook. @param webhookId Webhook identifier. @param token Optional webhook token. @returns Webhook route. */ webhook:\r\n (webhookId: string, token?: string) =>\r\n `/webhooks/${snowflake(webhookId, \"Webhook ID\")}${token ? `/${encodeURIComponent(token)}` : \"\"}`,\r\n /** Returns a webhook message. */ webhookMessage: (\r\n webhookId: string,\r\n token: string,\r\n messageId: string,\r\n ) =>\r\n `/webhooks/${snowflake(webhookId, \"Webhook ID\")}/${encodeURIComponent(token)}/messages/${snowflake(messageId, \"Message ID\")}`,\r\n /** Returns application commands for an application. @param applicationId Application identifier. @returns Global command route. */ applicationCommands:\r\n (applicationId: string) =>\r\n `/applications/${snowflake(applicationId, \"Application ID\")}/commands`,\r\n /** Returns one application command. @param applicationId Application identifier. @param commandId Command identifier. @returns Command route. */ applicationCommand:\r\n (applicationId: string, commandId: string) =>\r\n `/applications/${snowflake(applicationId, \"Application ID\")}/commands/${snowflake(commandId, \"Command ID\")}`,\r\n /** Returns guild application commands. @param applicationId Application identifier. @param guildId Guild identifier. @returns Guild command route. */ guildApplicationCommands:\r\n (applicationId: string, guildId: string) =>\r\n `/applications/${snowflake(applicationId, \"Application ID\")}/guilds/${snowflake(guildId, \"Guild ID\")}/commands`,\r\n /** Returns a single guild application command. @param applicationId Application identifier. @param guildId Guild identifier. @param commandId Command identifier. @returns Guild command route. */ guildApplicationCommand:\r\n (applicationId: string, guildId: string, commandId: string) =>\r\n `/applications/${snowflake(applicationId, \"Application ID\")}/guilds/${snowflake(guildId, \"Guild ID\")}/commands/${snowflake(commandId, \"Command ID\")}`,\r\n /** Returns an interaction callback endpoint. @param interactionId Interaction identifier. @param token Interaction token. @returns Interaction callback route. */ interactionCallback:\r\n (interactionId: string, token: string) =>\r\n `/interactions/${snowflake(interactionId, \"Interaction ID\")}/${encodeURIComponent(token)}/callback`,\r\n /** Returns the original interaction response endpoint. @param applicationId Application identifier. @param token Interaction token. @returns Original-response route. */ interactionOriginalResponse:\r\n (applicationId: string, token: string) =>\r\n `/webhooks/${snowflake(applicationId, \"Application ID\")}/${encodeURIComponent(token)}/messages/@original`,\r\n /** Returns guild threads that are active. @param guildId Guild identifier. @returns Active-thread route. */ guildActiveThreads:\r\n (guildId: string) =>\r\n `/guilds/${snowflake(guildId, \"Guild ID\")}/threads/active`,\r\n /** Returns public archived threads for a channel. @param channelId Channel identifier. @returns Public-archive route. */ channelPublicArchivedThreads:\r\n (channelId: string) =>\r\n `/channels/${snowflake(channelId, \"Channel ID\")}/threads/archived/public`,\r\n /** Returns private archived threads for a channel. @param channelId Channel identifier. @returns Private-archive route. */ channelPrivateArchivedThreads:\r\n (channelId: string) =>\r\n `/channels/${snowflake(channelId, \"Channel ID\")}/threads/archived/private`,\r\n /** Returns a thread's members. @param threadId Thread identifier. @returns Thread-member route. */ threadMembers:\r\n (threadId: string) =>\r\n `/channels/${snowflake(threadId, \"Thread ID\")}/thread-members`,\r\n /** Returns guild scheduled events. @param guildId Guild identifier. @returns Scheduled-event collection route. */ guildScheduledEvents:\r\n (guildId: string) =>\r\n `/guilds/${snowflake(guildId, \"Guild ID\")}/scheduled-events`,\r\n /** Returns one guild scheduled event. @param guildId Guild identifier. @param eventId Event identifier. @returns Scheduled-event route. */ guildScheduledEvent:\r\n (guildId: string, eventId: string) =>\r\n `/guilds/${snowflake(guildId, \"Guild ID\")}/scheduled-events/${snowflake(eventId, \"Event ID\")}`,\r\n /** Returns guild automod rules. @param guildId Guild identifier. @returns Automod-rule collection route. */ guildAutoModerationRules:\r\n (guildId: string) =>\r\n `/guilds/${snowflake(guildId, \"Guild ID\")}/auto-moderation/rules`,\r\n /** Returns one automod rule. @param guildId Guild identifier. @param ruleId Rule identifier. @returns Automod-rule route. */ guildAutoModerationRule:\r\n (guildId: string, ruleId: string) =>\r\n `/guilds/${snowflake(guildId, \"Guild ID\")}/auto-moderation/rules/${snowflake(ruleId, \"Rule ID\")}`,\r\n /** Returns current voice regions. @returns Voice-region route. */ voiceRegions:\r\n () => \"/voice/regions\",\r\n /** Returns the generic Gateway endpoint. @returns Gateway route. */ gateway:\r\n () => \"/gateway\",\r\n /** Returns the Gateway endpoint and recommended shard count for bots. @returns Gateway bot route. */ gatewayBot:\r\n () => \"/gateway/bot\",\r\n} as const;\r\n\r\n/** Validates a Discord snowflake route parameter. @param value Candidate identifier. @param field Human-readable field name. @returns The validated identifier. @throws {TypeError} If the identifier is not a Discord snowflake. */\r\nfunction snowflake(value: string, field: string): string {\r\n if (!/^\\d{1,20}$/.test(value))\r\n throw new TypeError(`${field} must be a valid Discord snowflake.`);\r\n return value;\r\n}\r\n",
8
+ "/** Common Discord snowflake-backed structure. */\nexport class BaseStructure {\n /** Discord resource ID. */\n public readonly id: string;\n /** Creates a structure from an ID. @param id Discord snowflake identifier. @throws {TypeError} If the ID is invalid. */\n public constructor(id: string) {\n if (!/^\\d{1,20}$/.test(id))\n throw new TypeError(\"A Discord structure requires a valid snowflake ID.\");\n this.id = id;\n }\n /** Returns the resource ID. @returns Discord snowflake identifier. */\n public toString(): string {\n return this.id;\n }\n}\n\n/** Context used by structures to delegate resource operations to the owning client. */\nexport interface ResourceContext {\n /** Sends a message through the owning channel manager. @param channelId Channel identifier. @param options Message payload. @returns The created message. */\n sendMessage(\n channelId: string,\n options: { content?: string },\n ): Promise<import(\"./index.js\").Message>;\n /** Edits a message through the owning channel manager. @param channelId Channel identifier. @param messageId Message identifier. @param options Edit payload. @returns The updated message. */\n editMessage(\n channelId: string,\n messageId: string,\n options: { content?: string },\n ): Promise<import(\"./index.js\").Message>;\n /** Deletes a message through the owning channel manager. @param channelId Channel identifier. @param messageId Message identifier. @returns A promise fulfilled after deletion. */\n deleteMessage(channelId: string, messageId: string): Promise<void>;\n /** Crossposts a message through the owning channel manager. @param channelId Channel identifier. @param messageId Message identifier. @returns The crossposted message. */\n crosspostMessage(\n channelId: string,\n messageId: string,\n ): Promise<import(\"./index.js\").Message>;\n}\n\n/** Represents a Discord user. */\nexport class User extends BaseStructure {\n /** User name. */ public username: string;\n /** Global display name. */ public globalName: string | null;\n /** Avatar hash. */ public avatar: string | null;\n /** Whether the user is a bot. */ public bot: boolean;\n /** Whether the account is a Discord system user. */ public system: boolean;\n /** Public user flags. */ public flags: number;\n /** Creates a user from Discord API data. @param data User payload. @throws {TypeError} If required data is invalid. */\n public constructor(data: import(\"@lunibee/types\").UserData) {\n super(data.id);\n if (!data.username)\n throw new TypeError(\"A Discord user requires a username.\");\n this.username = data.username;\n this.globalName = data.global_name ?? null;\n this.avatar = data.avatar ?? null;\n this.bot = data.bot ?? false;\n this.system = data.system ?? false;\n this.flags = data.public_flags ?? 0;\n }\n /** Gets the effective display name. @returns Global display name or username. */\n public get displayName(): string {\n return this.globalName ?? this.username;\n }\n /** Creates an avatar CDN URL. @param options URL format options. @returns Avatar URL, or null when no custom avatar exists. */\n public avatarURL(\n options: { extension?: \"png\" | \"jpg\" | \"webp\" | \"gif\"; size?: number } = {},\n ): string | null {\n if (!this.avatar) return null;\n const extension =\n options.extension ?? (this.avatar.startsWith(\"a_\") ? \"gif\" : \"png\");\n return `https://cdn.discordapp.com/avatars/${this.id}/${this.avatar}.${extension}${options.size ? `?size=${options.size}` : \"\"}`;\n }\n /** Creates the default avatar URL. @returns Discord default avatar URL. */\n public defaultAvatarURL(): string {\n return `https://cdn.discordapp.com/embed/avatars/${Number(BigInt(this.id) % 5n)}.png`;\n }\n /** Creates an avatar URL with default fallback. @param options URL format options. @returns Avatar or default avatar URL. */\n public displayAvatarURL(\n options: { extension?: \"png\" | \"jpg\" | \"webp\" | \"gif\"; size?: number } = {},\n ): string {\n return this.avatarURL(options) ?? this.defaultAvatarURL();\n }\n}\n\n/** Represents a Discord channel. */\nexport class Channel extends BaseStructure {\n /** Discord channel type. */ public type: number;\n /** Channel name. */ public name?: string | null;\n /** Guild containing the channel. */ public guildId?: string;\n readonly #context?: ResourceContext;\n /** Creates a channel from Discord API data. @param data Channel payload. @param context Optional owning resource context. @throws {TypeError|RangeError} If required channel data is invalid. */\n public constructor(\n data: import(\"@lunibee/types\").APIChannel,\n context?: ResourceContext,\n ) {\n super(data.id);\n if (!Number.isInteger(data.type) || data.type < 0)\n throw new RangeError(\"A Discord channel requires a valid channel type.\");\n this.type = data.type;\n this.name = data.name;\n this.guildId = data.guild_id;\n this.#context = context;\n }\n /** Sends a message through the owning manager. @param options Message payload. @returns The created message. @throws {Error} If this channel is detached from a client. */\n public sendMessage(options: {\n content?: string;\n }): Promise<import(\"./index.js\").Message> {\n if (!this.#context)\n throw new Error(\"This channel is not attached to a client.\");\n return this.#context.sendMessage(this.id, options);\n }\n}\n\n/** Represents a Discord guild. */\nexport class Guild extends BaseStructure {\n /** Guild name. */ public name: string;\n /** Preferred guild locale. */ public preferredLocale?: string;\n /** Guild owner ID. */ public ownerId?: string;\n /** Creates a guild from Discord API data. @param data Guild payload. @throws {TypeError} If required data is invalid. */\n public constructor(data: {\n id: string;\n name: string;\n preferred_locale?: string;\n owner_id?: string;\n }) {\n super(data.id);\n if (!data.name) throw new TypeError(\"A Discord guild requires a name.\");\n this.name = data.name;\n this.preferredLocale = data.preferred_locale;\n this.ownerId = data.owner_id;\n }\n}\n",
9
+ "/** Permission bit values exposed by Discord. */\r\nexport const Permissions = {\r\n /** Create instant invite permission. */ CreateInstantInvite: 1n << 0n,\r\n /** Kick members permission. */ KickMembers: 1n << 1n,\r\n /** Ban members permission. */ BanMembers: 1n << 2n,\r\n /** Administrator permission. */ Administrator: 1n << 3n,\r\n /** Manage channels permission. */ ManageChannels: 1n << 4n,\r\n /** Manage guild permission. */ ManageGuild: 1n << 5n,\r\n /** Add reactions permission. */ AddReactions: 1n << 6n,\r\n /** View audit log permission. */ ViewAuditLog: 1n << 7n,\r\n /** Priority speaker permission. */ PrioritySpeaker: 1n << 8n,\r\n /** Stream permission. */ Stream: 1n << 9n,\r\n /** View channel permission. */ ViewChannel: 1n << 10n,\r\n /** Send messages permission. */ SendMessages: 1n << 11n,\r\n /** Send TTS messages permission. */ SendTTSMessages: 1n << 12n,\r\n /** Manage messages permission. */ ManageMessages: 1n << 13n,\r\n /** Embed links permission. */ EmbedLinks: 1n << 14n,\r\n /** Attach files permission. */ AttachFiles: 1n << 15n,\r\n /** Read message history permission. */ ReadMessageHistory: 1n << 16n,\r\n /** Mention everyone permission. */ MentionEveryone: 1n << 17n,\r\n /** Use external emojis permission. */ UseExternalEmojis: 1n << 18n,\r\n /** View guild insights permission. */ ViewGuildInsights: 1n << 19n,\r\n /** Connect permission. */ Connect: 1n << 20n,\r\n /** Speak permission. */ Speak: 1n << 21n,\r\n /** Mute members permission. */ MuteMembers: 1n << 22n,\r\n /** Deafen members permission. */ DeafenMembers: 1n << 23n,\r\n /** Move members permission. */ MoveMembers: 1n << 24n,\r\n /** Use voice activity detection permission. */ UseVAD: 1n << 25n,\r\n /** Change nickname permission. */ ChangeNickname: 1n << 26n,\r\n /** Manage nicknames permission. */ ManageNicknames: 1n << 27n,\r\n /** Manage roles permission. */ ManageRoles: 1n << 28n,\r\n /** Manage webhooks permission. */ ManageWebhooks: 1n << 29n,\r\n /** Manage guild expressions permission. */ ManageGuildExpressions: 1n << 30n,\r\n /** Use application commands permission. */ UseApplicationCommands: 1n << 31n,\r\n /** Request to speak permission. */ RequestToSpeak: 1n << 32n,\r\n /** Manage events permission. */ ManageEvents: 1n << 33n,\r\n /** Manage threads permission. */ ManageThreads: 1n << 34n,\r\n /** Create public threads permission. */ CreatePublicThreads: 1n << 35n,\r\n /** Create private threads permission. */ CreatePrivateThreads: 1n << 36n,\r\n /** Use external stickers permission. */ UseExternalStickers: 1n << 37n,\r\n /** Send messages in threads permission. */ SendMessagesInThreads: 1n << 38n,\r\n /** Use embedded activities permission. */ UseEmbeddedActivities: 1n << 39n,\r\n /** Moderate members permission. */ ModerateMembers: 1n << 40n,\r\n /** View creator monetization analytics permission. */ ViewCreatorMonetizationAnalytics:\r\n 1n << 41n,\r\n /** Use soundboard permission. */ UseSoundboard: 1n << 42n,\r\n /** Create guild expressions permission. */ CreateGuildExpressions: 1n << 43n,\r\n /** Create events permission. */ CreateEvents: 1n << 44n,\r\n /** Use external sounds permission. */ UseExternalSounds: 1n << 45n,\r\n /** Send voice messages permission. */ SendVoiceMessages: 1n << 46n,\r\n /** Send polls permission. */ SendPolls: 1n << 49n,\r\n /** Use external apps permission. */ UseExternalApps: 1n << 50n,\r\n} as const;\r\n\r\n/** Public permission resolvable. */\r\nexport type PermissionResolvable =\r\n | bigint\r\n | number\r\n | string\r\n | PermissionName\r\n | PermissionSet\r\n | PermissionResolvable[];\r\n\r\n/** Immutable Discord permission bitfield. */\r\nexport class PermissionSet {\r\n /** Permission bitfield. */ public readonly bitfield: bigint;\r\n /** Creates a permission set. @param value Initial permission bitfield. @throws {RangeError} If the value is negative. @throws {TypeError} If the value is not a valid integer. */\r\n public constructor(value: PermissionResolvable = 0n) {\r\n try {\r\n if (Array.isArray(value)) {\r\n let bit = 0n;\r\n for (const item of value) bit |= this.#resolve(item);\r\n this.bitfield = bit;\r\n } else if (value instanceof PermissionSet) {\r\n this.bitfield = value.bitfield;\r\n } else {\r\n const bitfield = this.#resolve(value);\r\n if (bitfield < 0n)\r\n throw new RangeError(\"Permission bitfield cannot be negative.\");\r\n this.bitfield = bitfield;\r\n }\r\n } catch (error) {\r\n if (error instanceof RangeError) throw error;\r\n throw new TypeError(\r\n \"Permission bitfield must be a valid non-negative integer.\",\r\n { cause: error },\r\n );\r\n }\r\n }\r\n /** Checks whether all supplied permissions are present. @param permissions Permission names or raw bits. @returns True when every requested permission is present. */ public has(\r\n ...permissions: PermissionResolvable[]\r\n ): boolean {\r\n return permissions.every(\r\n (permission) =>\r\n (this.bitfield & this.#resolve(permission)) ===\r\n this.#resolve(permission),\r\n );\r\n }\r\n /** Checks whether any supplied permission is present. @param permissions Permission names or raw bits. @returns True when at least one requested permission is present. */ public any(\r\n ...permissions: PermissionResolvable[]\r\n ): boolean {\r\n return permissions.some(\r\n (permission) => (this.bitfield & this.#resolve(permission)) !== 0n,\r\n );\r\n }\r\n /** Returns a new set with permissions added. @param permissions Permission names or raw bits. @returns A new permission set. */ public add(\r\n ...permissions: PermissionResolvable[]\r\n ): PermissionSet {\r\n let bitfield = this.bitfield;\r\n for (const permission of permissions) bitfield |= this.#resolve(permission);\r\n return new PermissionSet(bitfield);\r\n }\r\n /** Returns a new set with permissions removed. @param permissions Permission names or raw bits. @returns A new permission set. */ public remove(\r\n ...permissions: PermissionResolvable[]\r\n ): PermissionSet {\r\n let bitfield = this.bitfield;\r\n for (const permission of permissions)\r\n bitfield &= ~this.#resolve(permission);\r\n return new PermissionSet(bitfield);\r\n }\r\n /** Checks equality with another permission set or raw bitfield. @param other Permission set or raw bitfield. @returns True when both values are equal. */ public equals(\r\n other: PermissionSet | bigint | number | string,\r\n ): boolean {\r\n return (\r\n this.bitfield ===\r\n (other instanceof PermissionSet\r\n ? other.bitfield\r\n : new PermissionSet(other).bitfield)\r\n );\r\n }\r\n /** Returns the decimal permission representation. @returns Decimal permission bitfield. */ public toString(): string {\r\n return this.bitfield.toString();\r\n }\r\n /** Returns known permission names contained in this set. @returns Names of all enabled known permissions. */ public toArray(): PermissionName[] {\r\n return (Object.keys(Permissions) as PermissionName[]).filter((permission) =>\r\n this.has(permission),\r\n );\r\n }\r\n /** Resolves a named permission or raw bit. @param permission Permission name or raw bit. @returns Numeric permission bit. */ #resolve(\r\n permission: PermissionResolvable,\r\n ): bigint {\r\n if (permission instanceof PermissionSet) return permission.bitfield;\r\n if (typeof permission === \"bigint\") return permission;\r\n if (typeof permission === \"number\") return BigInt(permission);\r\n if (Array.isArray(permission)) {\r\n let bit = 0n;\r\n for (const p of permission) bit |= this.#resolve(p);\r\n return bit;\r\n }\r\n if (typeof permission === \"string\") {\r\n if (permission in Permissions)\r\n return (Permissions as Record<string, bigint>)[permission]!;\r\n const matchedKey = Object.keys(Permissions).find(\r\n (k) => k.toLowerCase() === permission.toLowerCase(),\r\n );\r\n if (matchedKey)\r\n return (Permissions as Record<string, bigint>)[matchedKey]!;\r\n return BigInt(permission);\r\n }\r\n return 0n;\r\n }\r\n}\r\n\r\n/** Discord.js-compatible permission bitfield. */\r\nexport class PermissionsBitField extends PermissionSet {\r\n /** Creates a permissions bitfield. @param value Initial permission bitfield. */\r\n public constructor(value: PermissionResolvable = 0n) {\r\n super(value);\r\n }\r\n}\r\n",
10
+ "import { BaseStructure, Channel, User } from \"./base.js\";\nimport { PermissionsBitField } from \"./permissions.js\";\n\n/** A Discord guild member. */\nexport class GuildMember {\n /** User represented by the member. */ public readonly user: User;\n /** Guild containing the member. */ public readonly guildId: string;\n /** Nickname, if configured. */ public nickname: string | null;\n /** Role IDs assigned to the member. */ public readonly roleIds: string[];\n /** Whether the member is pending membership screening. */ public pending: boolean;\n /** Member join timestamp. */ public joinedAt?: Date;\n /** Raw effective permission bitfield supplied by Discord. */ public readonly permissions: PermissionsBitField;\n /** Creates a guild member from Discord data. @param data Discord guild-member payload. @throws {TypeError} If the guild ID is invalid. @throws {RangeError} If joined_at is invalid. */\n public constructor(data: {\n user: {\n id: string;\n username: string;\n global_name?: string | null;\n avatar?: string | null;\n bot?: boolean;\n system?: boolean;\n public_flags?: number;\n };\n guild_id: string;\n nick?: string | null;\n roles?: string[];\n pending?: boolean;\n joined_at?: string;\n permissions?: string;\n }) {\n this.user = new User(data.user);\n if (!/^\\d{1,20}$/.test(data.guild_id))\n throw new TypeError(\"Member guild_id must be a valid snowflake.\");\n this.guildId = data.guild_id;\n this.nickname = data.nick ?? null;\n this.roleIds = [...(data.roles ?? [])];\n this.pending = data.pending ?? false;\n this.joinedAt = data.joined_at ? new Date(data.joined_at) : undefined;\n if (this.joinedAt?.toString() === \"Invalid Date\")\n throw new RangeError(\"Member joined_at must be a valid date.\");\n this.permissions = new PermissionsBitField(data.permissions ?? 0n);\n }\n /** Effective member display name. @returns Nickname or user display name. */ public get displayName(): string {\n return this.nickname ?? this.user.displayName;\n }\n}\n\n/** A Discord guild role. */\nexport class Role extends BaseStructure {\n /** Role name. */ public name: string;\n /** Role color. */ public color: number;\n /** Whether the role is hoisted. */ public hoist: boolean;\n /** Permission bitfield. */ public permissions: PermissionsBitField;\n /** Whether the role is managed. */ public managed: boolean;\n /** Whether the role is mentionable. */ public mentionable: boolean;\n /** Creates a role from Discord data. @param data Discord role payload. */\n public constructor(data: {\n id: string;\n name: string;\n color?: number;\n hoist?: boolean;\n permissions?: string;\n managed?: boolean;\n mentionable?: boolean;\n }) {\n super(data.id);\n if (!data.name) throw new TypeError(\"Role name cannot be empty.\");\n this.name = data.name;\n this.color = data.color ?? 0;\n this.hoist = data.hoist ?? false;\n this.permissions = new PermissionsBitField(data.permissions ?? 0n);\n this.managed = data.managed ?? false;\n this.mentionable = data.mentionable ?? false;\n }\n /** Discord role mention string. @returns Role mention. */ public toString(): string {\n return `<@&${this.id}>`;\n }\n}\n\n/** A Discord text-capable channel. */\nexport class TextChannel extends Channel {\n /** Parent category ID. */ public parentId?: string | null;\n /** Creates a text channel from Discord data. @param data Discord channel payload. */\n public constructor(data: {\n id: string;\n type: number;\n name?: string;\n parent_id?: string | null;\n guild_id?: string;\n }) {\n super(data);\n this.parentId = data.parent_id;\n }\n /** Discord channel mention string. @returns Channel mention. */ public toString(): string {\n return `<#${this.id}>`;\n }\n}\n",
11
+ "import { BaseStructure, Channel, User } from \"./base.js\";\nimport type { ResourceContext } from \"./base.js\";\n\n/** Common Discord structure exports. */\nexport { BaseStructure, Channel, Guild, User } from \"./base.js\";\nexport type { ResourceContext } from \"./base.js\";\n\n/** Represents a Discord message. */\nexport class Message extends BaseStructure {\n /** Message content. */ public content: string;\n /** Message author. */ public author: User;\n /** Channel ID containing the message. */ public channelId: string;\n /** Channel containing the message. */ public readonly channel: Channel;\n /** Guild ID containing the message. */ public guildId?: string;\n /** Message flags. */ public flags: number;\n /** Message creation time. */ public readonly createdAt: Date;\n /** Message attachments. */ public readonly attachments: import(\"@lunibee/types\").APIAttachment[];\n /** Message embeds. */ public readonly embeds: import(\"@lunibee/types\").APIEmbed[];\n /** Mentioned users. */ public readonly mentions: User[];\n /** Mentioned role IDs. */ public readonly mentionRoles: string[];\n /** Whether the message is pinned. */ public pinned: boolean;\n /** Whether the message mentions everyone. */ public mentionEveryone: boolean;\n /** Discord message type. */ public type: number;\n /** Message reference (reply chain data). */ public readonly reference?: import(\"@lunibee/types\").APIMessageReference;\n /** The referenced/replied-to message, if included by Discord. */ public readonly referencedMessage?: Message | null;\n readonly #context?: ResourceContext;\n /** Creates a message from Discord API data. @param data Message payload. @param context Optional owning resource context. @throws {TypeError} If required message identifiers are invalid. */\n public constructor(\n data: import(\"@lunibee/types\").APIMessage,\n context?: ResourceContext,\n ) {\n super(data.id);\n if (!/^\\d{1,20}$/.test(data.channel_id))\n throw new TypeError(\"Message channel_id must be a valid snowflake.\");\n this.content = data.content ?? \"\";\n this.author = new User(data.author);\n this.channelId = data.channel_id;\n this.guildId = data.guild_id;\n this.flags = data.flags ?? 0;\n this.createdAt = new Date(\n data.timestamp ?? Number((BigInt(this.id) >> 22n) + 1420070400000n),\n );\n this.attachments = data.attachments ?? [];\n this.embeds = data.embeds ?? [];\n this.mentions = (data.mentions ?? []).map((user) => new User(user));\n this.mentionRoles = data.mention_roles ?? [];\n this.pinned = data.pinned ?? false;\n this.mentionEveryone = data.mention_everyone ?? false;\n this.type = data.type ?? 0;\n this.reference = data.message_reference;\n this.referencedMessage = data.referenced_message\n ? new Message(data.referenced_message, context)\n : data.referenced_message === null\n ? null\n : undefined;\n this.#context = context;\n this.channel = new Channel(\n { id: data.channel_id, type: 0, guild_id: data.guild_id },\n context,\n );\n }\n /** Whether embeds are suppressed. @returns True when the suppress-embeds flag is set. */ public get embedsSuppressed(): boolean {\n return (this.flags & 4) !== 0;\n }\n /** Edits this message. @param options Edit payload. @returns Updated message. @throws {Error} If detached from a client. */ public edit(options: {\n content?: string;\n }): Promise<Message> {\n if (!this.#context)\n throw new Error(\"This message is not attached to a client.\");\n return this.#context.editMessage(this.channelId, this.id, options);\n }\n /** Deletes this message. @returns Nothing. @throws {Error} If detached from a client. */ public delete(): Promise<void> {\n if (!this.#context)\n throw new Error(\"This message is not attached to a client.\");\n return this.#context.deleteMessage(this.channelId, this.id);\n }\n /** Crossposts this message. @returns Crossposted message. @throws {Error} If detached from a client. */ public crosspost(): Promise<Message> {\n if (!this.#context)\n throw new Error(\"This message is not attached to a client.\");\n return this.#context.crosspostMessage(this.channelId, this.id);\n }\n /** Replies in this message's channel, auto-populating message_reference. @param options Message content or payload. @returns Created reply. @throws {Error} If detached from a client. */ public reply(\n options: string | { content?: string; [key: string]: unknown },\n ): Promise<Message> {\n if (!this.#context)\n throw new Error(\"This message is not attached to a client.\");\n const payload =\n typeof options === \"string\" ? { content: options } : { ...options };\n // Automatically thread the reply via Discord's message_reference\n (payload as Record<string, unknown>).message_reference = {\n message_id: this.id,\n channel_id: this.channelId,\n guild_id: this.guildId,\n };\n return this.#context.sendMessage(this.channelId, payload);\n }\n}\n\nexport { GuildMember, Role, TextChannel } from \"./resources.js\";\nexport * from \"./interactions.js\";\n",
12
+ "import { Collection } from \"@lunibee/collection\";\nimport { REST, Routes } from \"@lunibee/rest\";\nimport { Message, type ResourceContext } from \"@lunibee/structures\";\n\n/** Manages message resources belonging to a single channel with canonical identity. */\nexport class MessageManager {\n /** Canonical message cache for this channel. */\n public readonly cache = new Collection<string, Message>();\n readonly #rest: REST;\n readonly #context: ResourceContext;\n readonly #channelId: string;\n\n /** Creates a message manager. @param rest REST transport. @param context Structure resource context. @param channelId Channel identifier. @throws {TypeError} If channelId is empty. */\n public constructor(rest: REST, context: ResourceContext, channelId: string) {\n if (!channelId) throw new TypeError(\"Channel ID is required.\");\n this.#rest = rest;\n this.#context = context;\n this.#channelId = channelId;\n }\n /** Resolves a message from cache or REST. @param messageId Message identifier. @returns Canonical message. */\n public async resolve(messageId: string): Promise<Message> {\n return this.cache.get(messageId) ?? this.fetch(messageId);\n }\n /** Sends a message and caches it canonically. @param options Message payload. @returns Canonical message. */\n public async send(options: { content?: string }): Promise<Message> {\n const data = await this.#rest.post<\n ConstructorParameters<typeof Message>[0]\n >(Routes.channelMessages(this.#channelId), options);\n return this.upsert(data);\n }\n /** Fetches one message and caches it canonically. @param messageId Message identifier. @returns Canonical message. */\n public async fetch(messageId: string): Promise<Message> {\n const data = await this.#rest.get<\n | ConstructorParameters<typeof Message>[0]\n | ConstructorParameters<typeof Message>[0][]\n >(Routes.message(this.#channelId, messageId));\n const message = Array.isArray(data) ? data[0] : data;\n if (!message) throw new Error(\"Discord returned no message payload.\");\n return this.upsert(message);\n }\n /** Fetches several messages by ID. @param messageIds Message identifiers. @returns Canonical messages. */\n public fetchMany(messageIds: Iterable<string>): Promise<Message[]> {\n return Promise.all(\n Array.from(messageIds, (messageId) => this.fetch(messageId)),\n );\n }\n /** Inserts or updates a message through the shared hydration path. @param data Discord message payload. @returns Canonical message. */\n public upsert(data: ConstructorParameters<typeof Message>[0]): Message {\n const existing = this.cache.get(data.id);\n const message = new Message(data, this.#context);\n if (existing) {\n Object.assign(existing, message);\n return existing;\n }\n this.cache.set(message.id, message);\n return message;\n }\n /** Removes a message from cache. @param messageId Message identifier. @returns Whether a cached message was removed. */\n public delete(messageId: string): boolean {\n return this.cache.delete(messageId);\n }\n}\n",
13
+ "import { REST, Routes } from \"@lunibee/rest\";\nimport { Channel, type ResourceContext } from \"@lunibee/structures\";\n\n/** Manages thread resources created from a parent channel. */\nexport class ThreadManager {\n readonly #rest: REST;\n readonly #context: ResourceContext;\n readonly #channelId: string;\n /** Creates a thread manager. @param rest REST transport. @param context Structure resource context. @param channelId Parent channel identifier. @throws {TypeError} If channelId is empty. */\n public constructor(rest: REST, context: ResourceContext, channelId: string) {\n if (!channelId) throw new TypeError(\"Channel ID is required.\");\n this.#rest = rest;\n this.#context = context;\n this.#channelId = channelId;\n }\n /** Creates a thread from a message. @param messageId Message identifier. @param options Thread creation options. @returns Created thread channel. @throws {Error} If REST rejects the request. */\n public async createFromMessage(\n messageId: string,\n options: {\n name: string;\n autoArchiveDuration?: 60 | 1440 | 4320 | 10080;\n rateLimitPerUser?: number;\n },\n ): Promise<Channel> {\n const data = await this.#rest.post<\n ConstructorParameters<typeof Channel>[0]\n >(Routes.messageThread(this.#channelId, messageId), {\n name: options.name,\n auto_archive_duration: options.autoArchiveDuration,\n rate_limit_per_user: options.rateLimitPerUser,\n });\n return new Channel(data, this.#context);\n }\n}\n",
14
+ "import { REST, Routes } from \"@lunibee/rest\";\nimport { Role } from \"@lunibee/structures\";\nimport { ResourceManager } from \"./base.js\";\n\nexport interface RoleCreateOptions {\n name: string;\n permissions?: bigint | number | string;\n color?: number;\n hoist?: boolean;\n mentionable?: boolean;\n reason?: string;\n}\n\nexport interface RoleEditOptions {\n name?: string;\n permissions?: bigint | number | string;\n color?: number;\n hoist?: boolean;\n mentionable?: boolean;\n position?: number;\n reason?: string;\n}\n\n/** Manages Discord guild roles. */\nexport class RoleManager extends ResourceManager<string, Role> {\n readonly #rest: REST;\n public readonly guildId: string;\n\n public constructor(guildId: string, rest: REST) {\n super(\n (id: string) =>\n rest\n .get(Routes.guildRole(guildId, id))\n .then((data: any) => new Role(data)),\n (role: Role) => role.id,\n );\n this.guildId = guildId;\n this.#rest = rest;\n }\n\n /** Fetches all roles in the guild. */\n public async fetchAll(): Promise<Role[]> {\n const data = await this.#rest.get<any[]>(Routes.guildRoles(this.guildId));\n return data.map((item) => {\n const role = new Role(item);\n this.set(role.id, role);\n return role;\n });\n }\n\n /** Creates a new role in the guild. */\n public async create(options: RoleCreateOptions): Promise<Role> {\n const { reason, ...payload } = options;\n const data = await this.#rest.post<any>(Routes.guildRoles(this.guildId), {\n ...payload,\n permissions:\n payload.permissions !== undefined\n ? String(payload.permissions)\n : undefined,\n });\n const role = new Role(data);\n this.set(role.id, role);\n return role;\n }\n\n /** Edits an existing role. */\n public async edit(roleId: string, options: RoleEditOptions): Promise<Role> {\n const { reason, ...payload } = options;\n const data = await this.#rest.patch<any>(\n Routes.guildRole(this.guildId, roleId),\n {\n ...payload,\n permissions:\n payload.permissions !== undefined\n ? String(payload.permissions)\n : undefined,\n },\n );\n const role = new Role(data);\n this.set(role.id, role);\n return role;\n }\n\n /** Deletes a role from the guild. */\n public async deleteRole(roleId: string): Promise<void> {\n await this.#rest.delete(Routes.guildRole(this.guildId, roleId));\n this.delete(roleId);\n }\n}\n",
15
+ "import { REST, Routes } from \"@lunibee/rest\";\nimport { GuildMember } from \"@lunibee/structures\";\nimport { ResourceManager } from \"./base.js\";\n\nexport interface MemberEditOptions {\n nick?: string | null;\n roles?: string[];\n mute?: boolean;\n deaf?: boolean;\n channel_id?: string | null;\n communication_disabled_until?: string | null;\n}\n\nexport interface BanOptions {\n reason?: string;\n deleteMessageSeconds?: number;\n}\n\n/** Manages Discord guild members. */\nexport class GuildMemberManager extends ResourceManager<string, GuildMember> {\n readonly #rest: REST;\n public readonly guildId: string;\n\n public constructor(guildId: string, rest: REST) {\n super(\n (id: string) =>\n rest\n .get(Routes.guildMember(guildId, id))\n .then((data: any) => new GuildMember({ ...data, guild_id: guildId })),\n (member: GuildMember) => member.user.id,\n );\n this.guildId = guildId;\n this.#rest = rest;\n }\n\n /** Kicks a member from the guild. */\n public async kick(userId: string): Promise<void> {\n await this.#rest.delete(Routes.guildMember(this.guildId, userId));\n this.delete(userId);\n }\n\n /** Bans a user from the guild. */\n public async ban(userId: string, options: BanOptions = {}): Promise<void> {\n await this.#rest.put(Routes.guildBan(this.guildId, userId), {\n delete_message_seconds: options.deleteMessageSeconds,\n });\n this.delete(userId);\n }\n\n /** Unbans a user from the guild. */\n public async unban(userId: string): Promise<void> {\n await this.#rest.delete(Routes.guildBan(this.guildId, userId));\n }\n\n /** Edits a guild member (nickname, roles, timeout, mute, deaf). */\n public async edit(\n userId: string,\n options: MemberEditOptions,\n ): Promise<GuildMember> {\n const data = await this.#rest.patch<any>(\n Routes.guildMember(this.guildId, userId),\n options,\n );\n const member = new GuildMember({ ...data, guild_id: this.guildId });\n this.set(member.user.id, member);\n return member;\n }\n\n /** Adds a role to a member. */\n public async addRole(userId: string, roleId: string): Promise<void> {\n await this.#rest.put(Routes.guildMemberRole(this.guildId, userId, roleId));\n }\n\n /** Removes a role from a member. */\n public async removeRole(userId: string, roleId: string): Promise<void> {\n await this.#rest.delete(\n Routes.guildMemberRole(this.guildId, userId, roleId),\n );\n }\n\n /** Times out a member for a given duration in milliseconds (or clears timeout if null). */\n public async timeout(\n userId: string,\n milliseconds: number | null,\n ): Promise<GuildMember> {\n const timeoutDate =\n milliseconds === null\n ? null\n : new Date(Date.now() + milliseconds).toISOString();\n return this.edit(userId, { communication_disabled_until: timeoutDate });\n }\n}\n",
16
+ "import { REST, Routes } from \"@lunibee/rest\";\r\nimport type {\r\n APIApplicationCommand,\r\n ApplicationCommandData,\r\n} from \"@lunibee/types\";\r\n\r\n/** Manages global and guild-scoped application commands for a Discord application. */\r\nexport class ApplicationCommandManager {\r\n readonly #rest: REST;\r\n readonly #applicationId: string;\r\n\r\n /** Creates an application command manager. @param rest REST transport. @param applicationId Application identifier. */\r\n public constructor(rest: REST, applicationId: string) {\r\n this.#rest = rest;\r\n this.#applicationId = applicationId;\r\n }\r\n\r\n // ──────────────────── Global commands ────────────────────\r\n\r\n /** Fetches all global application commands. @returns Array of registered commands. */\r\n public fetch(): Promise<APIApplicationCommand[]> {\r\n return this.#rest.get<APIApplicationCommand[]>(\r\n Routes.applicationCommands(this.#applicationId),\r\n );\r\n }\r\n\r\n /** Creates a single global application command. @param data Command data. @returns Created command. */\r\n public create(data: ApplicationCommandData): Promise<APIApplicationCommand> {\r\n return this.#rest.post<APIApplicationCommand>(\r\n Routes.applicationCommands(this.#applicationId),\r\n data,\r\n );\r\n }\r\n\r\n /** Overwrites all global application commands atomically. @param commands Array of command data. @returns New full command list. */\r\n public set(\r\n commands: ApplicationCommandData[],\r\n ): Promise<APIApplicationCommand[]> {\r\n return this.#rest.put<APIApplicationCommand[]>(\r\n Routes.applicationCommands(this.#applicationId),\r\n commands,\r\n );\r\n }\r\n\r\n /** Edits a global application command. @param commandId Command identifier. @param data Partial command data. @returns Updated command. */\r\n public edit(\r\n commandId: string,\r\n data: Partial<ApplicationCommandData>,\r\n ): Promise<APIApplicationCommand> {\r\n return this.#rest.patch<APIApplicationCommand>(\r\n Routes.applicationCommand(this.#applicationId, commandId),\r\n data,\r\n );\r\n }\r\n\r\n /** Deletes a global application command. @param commandId Command identifier. @returns Nothing. */\r\n public async delete(commandId: string): Promise<void> {\r\n await this.#rest.delete(\r\n Routes.applicationCommand(this.#applicationId, commandId),\r\n );\r\n }\r\n\r\n // ──────────────────── Guild-scoped commands ────────────────────\r\n\r\n /** Fetches all guild-scoped application commands. @param guildId Guild identifier. @returns Array of registered guild commands. */\r\n public fetchGuild(guildId: string): Promise<APIApplicationCommand[]> {\r\n return this.#rest.get<APIApplicationCommand[]>(\r\n Routes.guildApplicationCommands(this.#applicationId, guildId),\r\n );\r\n }\r\n\r\n /** Creates a single guild-scoped application command. @param guildId Guild identifier. @param data Command data. @returns Created command. */\r\n public createGuild(\r\n guildId: string,\r\n data: ApplicationCommandData,\r\n ): Promise<APIApplicationCommand> {\r\n return this.#rest.post<APIApplicationCommand>(\r\n Routes.guildApplicationCommands(this.#applicationId, guildId),\r\n data,\r\n );\r\n }\r\n\r\n /** Overwrites all guild-scoped application commands atomically. @param guildId Guild identifier. @param commands Array of command data. @returns New full command list. */\r\n public setGuild(\r\n guildId: string,\r\n commands: ApplicationCommandData[],\r\n ): Promise<APIApplicationCommand[]> {\r\n return this.#rest.put<APIApplicationCommand[]>(\r\n Routes.guildApplicationCommands(this.#applicationId, guildId),\r\n commands,\r\n );\r\n }\r\n\r\n /** Edits a guild-scoped application command. @param guildId Guild identifier. @param commandId Command identifier. @param data Partial command data. @returns Updated command. */\r\n public editGuild(\r\n guildId: string,\r\n commandId: string,\r\n data: Partial<ApplicationCommandData>,\r\n ): Promise<APIApplicationCommand> {\r\n return this.#rest.patch<APIApplicationCommand>(\r\n Routes.guildApplicationCommand(this.#applicationId, guildId, commandId),\r\n data,\r\n );\r\n }\r\n\r\n /** Deletes a guild-scoped application command. @param guildId Guild identifier. @param commandId Command identifier. @returns Nothing. */\r\n public async deleteGuild(guildId: string, commandId: string): Promise<void> {\r\n await this.#rest.delete(\r\n Routes.guildApplicationCommand(this.#applicationId, guildId, commandId),\r\n );\r\n }\r\n}\r\n",
17
+ "import { Manager, ResourceManager } from \"./base.js\";\r\nexport { Manager, ResourceManager } from \"./base.js\";\r\n/** Collection-backed generic resource manager. */\r\nimport { Collection } from \"@lunibee/collection\";\r\nimport { REST, Routes } from \"@lunibee/rest\";\r\nimport {\r\n Channel,\r\n Message,\r\n User,\r\n Guild,\r\n type ResourceContext,\r\n} from \"@lunibee/structures\";\r\nimport { MessageManager } from \"./message.js\";\r\nimport { ThreadManager } from \"./thread.js\";\r\n\r\n/** Manages users. */\r\nexport class UserManager extends ResourceManager<string, User> {\r\n /** Creates a user manager. @param rest REST transport. */ public constructor(\r\n rest: REST,\r\n ) {\r\n super(\r\n async (id) =>\r\n new User(\r\n await rest.get<ConstructorParameters<typeof User>[0]>(\r\n Routes.userById(id),\r\n ),\r\n ),\r\n (user) => user.id,\r\n );\r\n }\r\n}\r\n/** Manages guilds. */\r\nexport class GuildManager extends ResourceManager<string, Guild> {\r\n /** Creates a guild manager. @param rest REST transport. */ public constructor(\r\n rest: REST,\r\n ) {\r\n super(\r\n async (id) =>\r\n new Guild(\r\n await rest.get<ConstructorParameters<typeof Guild>[0]>(\r\n Routes.guild(id),\r\n ),\r\n ),\r\n (guild) => guild.id,\r\n );\r\n }\r\n}\r\n/** Message creation options. */\r\nexport interface MessageCreateOptions {\r\n /** Message content. */ content?: string;\r\n}\r\n/** Message edit options. */\r\nexport interface MessageEditOptions {\r\n /** New message content. */ content?: string;\r\n}\r\n/** Message fetch options. */\r\nexport interface MessageFetchOptions {\r\n /** Whether to use cache. */ cache?: boolean;\r\n}\r\n/** Message list query options. */\r\nexport interface MessageQueryOptions {\r\n /** Message before this ID. */ before?: string;\r\n /** Message after this ID. */ after?: string;\r\n /** Message around this ID. */ around?: string;\r\n /** Maximum number of messages. */ limit?: number;\r\n}\r\n/** Message thread creation options. */\r\nexport interface MessageThreadOptions {\r\n /** Thread name. */ name: string;\r\n /** Auto archive duration. */ autoArchiveDuration?: 60 | 1440 | 4320 | 10080;\r\n /** Slowmode duration. */ rateLimitPerUser?: number;\r\n}\r\n/** Reaction list options. */\r\nexport interface ReactionFetchOptions {\r\n /** Maximum reactions. */ limit?: number;\r\n /** Reaction pagination cursor. */ after?: string;\r\n}\r\n/** Runtime compatibility placeholders for legacy value imports. */\r\nexport const MessageCreateOptions = undefined;\r\n/** Runtime compatibility placeholder. */\r\nexport const MessageEditOptions = undefined;\r\n/** Runtime compatibility placeholder. */\r\nexport const MessageFetchOptions = undefined;\r\n/** Runtime compatibility placeholder. */\r\nexport const MessageThreadOptions = undefined;\r\n/** Runtime compatibility placeholder. */\r\nexport const ReactionFetchOptions = undefined;\r\n\r\n/** Manages Discord channels and their message APIs. */\r\nexport class ChannelManager extends Manager<string, Channel> {\r\n readonly #rest: REST;\r\n readonly #context: ResourceContext;\r\n readonly #messageManagers = new Map<string, MessageManager>();\r\n /** Creates a channel manager. @param rest REST transport. */\r\n public constructor(rest: REST) {\r\n super();\r\n this.#rest = rest;\r\n this.#context = {\r\n sendMessage: (channelId, options) => this.send(channelId, options),\r\n editMessage: (channelId, messageId, options) =>\r\n this.editMessage(channelId, messageId, options),\r\n deleteMessage: (channelId, messageId) =>\r\n this.deleteMessage(channelId, messageId),\r\n crosspostMessage: (channelId, messageId) =>\r\n this.crosspostMessage(channelId, messageId),\r\n };\r\n }\r\n /** Gets the canonical message manager for a channel. @param channelId Channel ID. @returns Message manager. */ public messages(\r\n channelId: string,\r\n ): MessageManager {\r\n let manager = this.#messageManagers.get(channelId);\r\n if (!manager) {\r\n manager = new MessageManager(this.#rest, this.#context, channelId);\r\n this.#messageManagers.set(channelId, manager);\r\n }\r\n return manager;\r\n }\r\n /** Creates a thread manager. @param channelId Channel ID. @returns Thread manager. */ public threads(\r\n channelId: string,\r\n ): ThreadManager {\r\n return new ThreadManager(this.#rest, this.#context, channelId);\r\n }\r\n /** Fetches a channel. @param channelId Channel ID. @returns Channel. */ public async fetch(\r\n channelId: string,\r\n ): Promise<Channel> {\r\n const data = await this.#rest.get<ConstructorParameters<typeof Channel>[0]>(\r\n Routes.channel(channelId),\r\n );\r\n return this.upsert(data);\r\n }\r\n /** Resolves a channel. @param channelId Channel ID. @returns Canonical channel. */ public async resolve(\r\n channelId: string,\r\n ): Promise<Channel> {\r\n return this.get(channelId) ?? this.fetch(channelId);\r\n }\r\n /** Inserts or updates a channel. @param data Channel payload. @returns Canonical channel. */ public upsert(\r\n data: ConstructorParameters<typeof Channel>[0],\r\n ): Channel {\r\n const existing = this.get(data.id);\r\n const channel = new Channel(data, this.#context);\r\n if (existing) {\r\n Object.assign(existing, channel);\r\n return existing;\r\n }\r\n this.set(channel.id, channel);\r\n return channel;\r\n }\r\n /** Updates a channel. @param channel Channel. @returns This manager. */ public update(\r\n channel: Channel,\r\n ): this {\r\n return this.set(channel.id, channel);\r\n }\r\n /** Sends a message. @param channelId Channel ID. @param options Message options. @returns Created message. */ public send(\r\n channelId: string,\r\n options: MessageCreateOptions,\r\n ): Promise<Message> {\r\n return this.messages(channelId).send(options);\r\n }\r\n /** Alias for send. @param channelId Channel ID. @param options Message options. @returns Created message. */ public sendMessage(\r\n channelId: string,\r\n options: MessageCreateOptions,\r\n ): Promise<Message> {\r\n return this.send(channelId, options);\r\n }\r\n /** Fetches one message. @param channelId Channel ID. @param messageId Message ID. @param options Fetch options. @returns Message. */ public async fetchMessage(\r\n channelId: string,\r\n messageId: string,\r\n options: MessageFetchOptions = {},\r\n ): Promise<Message> {\r\n void options;\r\n return this.messages(channelId).fetch(messageId);\r\n }\r\n /** Fetches messages by query or by iterable IDs. @param channelId Channel ID. @param query Query options or message IDs. @returns Messages. */ public fetchMessages(\r\n channelId: string,\r\n query: MessageQueryOptions | Iterable<string>,\r\n ): Promise<Message[]> {\r\n if (isMessageQuery(query)) {\r\n const params = new URLSearchParams();\r\n if (query.before) params.set(\"before\", query.before);\r\n if (query.after) params.set(\"after\", query.after);\r\n if (query.around) params.set(\"around\", query.around);\r\n if (query.limit !== undefined) params.set(\"limit\", String(query.limit));\r\n const suffix = params.toString();\r\n return this.#rest\r\n .get<ConstructorParameters<typeof Message>[0][]>(\r\n `${Routes.channelMessages(channelId)}${suffix ? `?${suffix}` : \"\"}`,\r\n )\r\n .then((data) =>\r\n data.map((item) => this.messages(channelId).upsert(item)),\r\n );\r\n }\r\n return this.messages(channelId).fetchMany(query);\r\n }\r\n /** Inserts a message through the canonical cache path. @param data Message payload. @returns Canonical message. */ public upsertMessage(\r\n data: ConstructorParameters<typeof Message>[0],\r\n ): Message {\r\n return this.messages(data.channel_id).upsert(data);\r\n }\r\n /** Edits a message. @param channelId Channel ID. @param messageId Message ID. @param options Edit options. @returns Updated message. */ public async editMessage(\r\n channelId: string,\r\n messageId: string,\r\n options: MessageEditOptions,\r\n ): Promise<Message> {\r\n const data = await this.#rest.patch<\r\n ConstructorParameters<typeof Message>[0]\r\n >(Routes.message(channelId, messageId), options);\r\n return this.messages(channelId).upsert(data);\r\n }\r\n /** Deletes a message. @param channelId Channel ID. @param messageId Message ID. @returns Nothing. */ public async deleteMessage(\r\n channelId: string,\r\n messageId: string,\r\n ): Promise<void> {\r\n await this.#rest.delete(Routes.message(channelId, messageId));\r\n this.messages(channelId).delete(messageId);\r\n }\r\n /** Deletes a cached message. @param channelId Channel ID. @param messageId Message ID. @returns Whether removed. */ public deleteCachedMessage(\r\n channelId: string,\r\n messageId: string,\r\n ): boolean {\r\n return this.messages(channelId).delete(messageId);\r\n }\r\n /** Crossposts a message. @param channelId Channel ID. @param messageId Message ID. @returns Crossposted message. */ public async crosspostMessage(\r\n channelId: string,\r\n messageId: string,\r\n ): Promise<Message> {\r\n const data = await this.#rest.post<\r\n ConstructorParameters<typeof Message>[0]\r\n >(Routes.crosspostMessage(channelId, messageId));\r\n return this.messages(channelId).upsert(data);\r\n }\r\n /** Bulk deletes messages. @param channelId Channel ID. @param messageIds Message IDs. @returns Nothing. */ public async bulkDeleteMessages(\r\n channelId: string,\r\n messageIds: Iterable<string>,\r\n ): Promise<void> {\r\n const ids = [...messageIds];\r\n await this.#rest.post(Routes.channelBulkDelete(channelId), {\r\n messages: ids,\r\n });\r\n for (const id of ids) this.messages(channelId).delete(id);\r\n }\r\n /** Adds a reaction. @param channelId Channel ID. @param messageId Message ID. @param emoji Emoji identifier. @returns Nothing. */ public async addReaction(\r\n channelId: string,\r\n messageId: string,\r\n emoji: string,\r\n ): Promise<void> {\r\n await this.#rest.put(Routes.messageReactions(channelId, messageId, emoji));\r\n }\r\n /** Fetches users who reacted. @param channelId Channel ID. @param messageId Message ID. @param emoji Emoji identifier. @param options Query options. @returns Users. */ public async fetchReactions(\r\n channelId: string,\r\n messageId: string,\r\n emoji: string,\r\n options: ReactionFetchOptions = {},\r\n ): Promise<User[]> {\r\n const params = new URLSearchParams();\r\n if (options.limit !== undefined) params.set(\"limit\", String(options.limit));\r\n if (options.after) params.set(\"after\", options.after);\r\n const suffix = params.toString();\r\n const data = await this.#rest.get<ConstructorParameters<typeof User>[0][]>(\r\n `${Routes.messageReactions(channelId, messageId, emoji)}${suffix ? `?${suffix}` : \"\"}`,\r\n );\r\n return data.map((user) => new User(user));\r\n }\r\n /** Removes the current bot user's reaction. @param channelId Channel ID. @param messageId Message ID. @param emoji Emoji identifier. @returns Nothing. */ public async removeOwnReaction(\r\n channelId: string,\r\n messageId: string,\r\n emoji: string,\r\n ): Promise<void> {\r\n await this.#rest.delete(\r\n Routes.messageReactions(channelId, messageId, emoji) + \"/@me\",\r\n );\r\n }\r\n /** Removes a user's reaction. @param channelId Channel ID. @param messageId Message ID. @param emoji Emoji identifier. @param userId User ID. @returns Nothing. */ public async removeReaction(\r\n channelId: string,\r\n messageId: string,\r\n emoji: string,\r\n userId: string,\r\n ): Promise<void> {\r\n await this.#rest.delete(\r\n `${Routes.messageReactions(channelId, messageId, emoji)}/${userId}`,\r\n );\r\n }\r\n /** Removes all reactions. @param channelId Channel ID. @param messageId Message ID. @returns Nothing. */ public async removeAllReactions(\r\n channelId: string,\r\n messageId: string,\r\n ): Promise<void> {\r\n await this.#rest.delete(Routes.messageReactionsAll(channelId, messageId));\r\n }\r\n /** Fetches pinned messages. @param channelId Channel ID. @returns Pinned messages. */ public async fetchPinnedMessages(\r\n channelId: string,\r\n ): Promise<Message[]> {\r\n const data = await this.#rest.get<\r\n ConstructorParameters<typeof Message>[0][]\r\n >(Routes.channelPins(channelId));\r\n return data.map((item) => this.messages(channelId).upsert(item));\r\n }\r\n /** Pins a message. @param channelId Channel ID. @param messageId Message ID. @returns Nothing. */ public async pinMessage(\r\n channelId: string,\r\n messageId: string,\r\n ): Promise<void> {\r\n await this.#rest.put(Routes.channelPin(channelId, messageId));\r\n }\r\n /** Unpins a message. @param channelId Channel ID. @param messageId Message ID. @returns Nothing. */ public async unpinMessage(\r\n channelId: string,\r\n messageId: string,\r\n ): Promise<void> {\r\n await this.#rest.delete(Routes.channelPin(channelId, messageId));\r\n }\r\n /** Creates a thread from a message. @param channelId Channel ID. @param messageId Message ID. @param options Thread options. @returns Created thread channel. */ public createThreadFromMessage(\r\n channelId: string,\r\n messageId: string,\r\n options: MessageThreadOptions,\r\n ): Promise<Channel> {\r\n return this.threads(channelId).createFromMessage(messageId, options);\r\n }\r\n /** Deletes a channel and its message manager. @param channelId Channel ID. @returns Whether removed. */ public delete(\r\n channelId: string,\r\n ): boolean {\r\n this.#messageManagers.delete(channelId);\r\n return super.delete(channelId);\r\n }\r\n /** Clears all channels and message managers. @returns Nothing. */ public clear(): void {\r\n this.#messageManagers.clear();\r\n super.clear();\r\n }\r\n}\r\n/** Determines whether a message query object was supplied. @param value Candidate query. @returns True when it is a query object. */\r\nfunction isMessageQuery(\r\n value: MessageQueryOptions | Iterable<string>,\r\n): value is MessageQueryOptions {\r\n return (\r\n typeof value === \"object\" && value !== null && !(Symbol.iterator in value)\r\n );\r\n}\r\n/** Backward-compatible message option alias. */\r\nexport type CreateMessageOptions = MessageCreateOptions;\r\n/** Exposes the message manager class. */\r\nexport { MessageManager } from \"./message.js\";\r\n/** Exposes the thread manager class. */\r\nexport { ThreadManager } from \"./thread.js\";\r\n\r\nexport {\r\n RoleManager,\r\n type RoleCreateOptions,\r\n type RoleEditOptions,\r\n} from \"./role.js\";\r\nexport {\r\n GuildMemberManager,\r\n type MemberEditOptions,\r\n type BanOptions,\r\n} from \"./member.js\";\r\nexport { ApplicationCommandManager } from \"./application.js\";\r\n"
18
+ ],
19
+ "mappings": "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",
20
+ "debugId": "B1F523C9C7EE890964756E2164756E21",
21
+ "names": []
22
+ }
@@ -0,0 +1,35 @@
1
+ import { REST } from "@lunibee/rest";
2
+ import { GuildMember } from "@lunibee/structures";
3
+ import { ResourceManager } from "./base.js";
4
+ export interface MemberEditOptions {
5
+ nick?: string | null;
6
+ roles?: string[];
7
+ mute?: boolean;
8
+ deaf?: boolean;
9
+ channel_id?: string | null;
10
+ communication_disabled_until?: string | null;
11
+ }
12
+ export interface BanOptions {
13
+ reason?: string;
14
+ deleteMessageSeconds?: number;
15
+ }
16
+ /** Manages Discord guild members. */
17
+ export declare class GuildMemberManager extends ResourceManager<string, GuildMember> {
18
+ #private;
19
+ readonly guildId: string;
20
+ constructor(guildId: string, rest: REST);
21
+ /** Kicks a member from the guild. */
22
+ kick(userId: string): Promise<void>;
23
+ /** Bans a user from the guild. */
24
+ ban(userId: string, options?: BanOptions): Promise<void>;
25
+ /** Unbans a user from the guild. */
26
+ unban(userId: string): Promise<void>;
27
+ /** Edits a guild member (nickname, roles, timeout, mute, deaf). */
28
+ edit(userId: string, options: MemberEditOptions): Promise<GuildMember>;
29
+ /** Adds a role to a member. */
30
+ addRole(userId: string, roleId: string): Promise<void>;
31
+ /** Removes a role from a member. */
32
+ removeRole(userId: string, roleId: string): Promise<void>;
33
+ /** Times out a member for a given duration in milliseconds (or clears timeout if null). */
34
+ timeout(userId: string, milliseconds: number | null): Promise<GuildMember>;
35
+ }
@@ -0,0 +1,25 @@
1
+ import { Collection } from "@lunibee/collection";
2
+ import { REST } from "@lunibee/rest";
3
+ import { Message, type ResourceContext } from "@lunibee/structures";
4
+ /** Manages message resources belonging to a single channel with canonical identity. */
5
+ export declare class MessageManager {
6
+ #private;
7
+ /** Canonical message cache for this channel. */
8
+ readonly cache: Collection<string, Message>;
9
+ /** Creates a message manager. @param rest REST transport. @param context Structure resource context. @param channelId Channel identifier. @throws {TypeError} If channelId is empty. */
10
+ constructor(rest: REST, context: ResourceContext, channelId: string);
11
+ /** Resolves a message from cache or REST. @param messageId Message identifier. @returns Canonical message. */
12
+ resolve(messageId: string): Promise<Message>;
13
+ /** Sends a message and caches it canonically. @param options Message payload. @returns Canonical message. */
14
+ send(options: {
15
+ content?: string;
16
+ }): Promise<Message>;
17
+ /** Fetches one message and caches it canonically. @param messageId Message identifier. @returns Canonical message. */
18
+ fetch(messageId: string): Promise<Message>;
19
+ /** Fetches several messages by ID. @param messageIds Message identifiers. @returns Canonical messages. */
20
+ fetchMany(messageIds: Iterable<string>): Promise<Message[]>;
21
+ /** Inserts or updates a message through the shared hydration path. @param data Discord message payload. @returns Canonical message. */
22
+ upsert(data: ConstructorParameters<typeof Message>[0]): Message;
23
+ /** Removes a message from cache. @param messageId Message identifier. @returns Whether a cached message was removed. */
24
+ delete(messageId: string): boolean;
25
+ }
@@ -0,0 +1,34 @@
1
+ import { REST } from "@lunibee/rest";
2
+ import { Role } from "@lunibee/structures";
3
+ import { ResourceManager } from "./base.js";
4
+ export interface RoleCreateOptions {
5
+ name: string;
6
+ permissions?: bigint | number | string;
7
+ color?: number;
8
+ hoist?: boolean;
9
+ mentionable?: boolean;
10
+ reason?: string;
11
+ }
12
+ export interface RoleEditOptions {
13
+ name?: string;
14
+ permissions?: bigint | number | string;
15
+ color?: number;
16
+ hoist?: boolean;
17
+ mentionable?: boolean;
18
+ position?: number;
19
+ reason?: string;
20
+ }
21
+ /** Manages Discord guild roles. */
22
+ export declare class RoleManager extends ResourceManager<string, Role> {
23
+ #private;
24
+ readonly guildId: string;
25
+ constructor(guildId: string, rest: REST);
26
+ /** Fetches all roles in the guild. */
27
+ fetchAll(): Promise<Role[]>;
28
+ /** Creates a new role in the guild. */
29
+ create(options: RoleCreateOptions): Promise<Role>;
30
+ /** Edits an existing role. */
31
+ edit(roleId: string, options: RoleEditOptions): Promise<Role>;
32
+ /** Deletes a role from the guild. */
33
+ deleteRole(roleId: string): Promise<void>;
34
+ }
@@ -0,0 +1,14 @@
1
+ import { REST } from "@lunibee/rest";
2
+ import { Channel, type ResourceContext } from "@lunibee/structures";
3
+ /** Manages thread resources created from a parent channel. */
4
+ export declare class ThreadManager {
5
+ #private;
6
+ /** Creates a thread manager. @param rest REST transport. @param context Structure resource context. @param channelId Parent channel identifier. @throws {TypeError} If channelId is empty. */
7
+ constructor(rest: REST, context: ResourceContext, channelId: string);
8
+ /** Creates a thread from a message. @param messageId Message identifier. @param options Thread creation options. @returns Created thread channel. @throws {Error} If REST rejects the request. */
9
+ createFromMessage(messageId: string, options: {
10
+ name: string;
11
+ autoArchiveDuration?: 60 | 1440 | 4320 | 10080;
12
+ rateLimitPerUser?: number;
13
+ }): Promise<Channel>;
14
+ }
@@ -0,0 +1,49 @@
1
+ /** Error thrown when Discord rejects a REST request. */
2
+ export declare class RESTError extends Error {
3
+ /** HTTP status returned by Discord. */ readonly status: number;
4
+ /** Discord API error code, when provided. */ readonly code?: number;
5
+ /** Raw Discord validation/error payload. */ readonly errors?: unknown;
6
+ /** HTTP method used for the failed request. */ readonly method?: string;
7
+ /** API path used for the failed request. */ readonly path?: string;
8
+ /** Creates a REST error with request context. @param message Error message. @param status HTTP status. @param code Discord error code. @param errors Raw error payload. @param options Request context and cause. */
9
+ constructor(message: string, status: number, code?: number, errors?: unknown, options?: {
10
+ method?: string;
11
+ path?: string;
12
+ cause?: unknown;
13
+ });
14
+ }
15
+ /** Options controlling an individual REST request. */
16
+ export interface RESTRequestOptions {
17
+ /** Abort signal used to cancel the request and any queued wait. */ signal?: AbortSignal;
18
+ }
19
+ /** Configures which REST failures may be retried. */
20
+ export interface RetryPolicy {
21
+ /** Maximum retry attempts. */ maxRetries: number;
22
+ /** Determines whether a request may be retried. @param method HTTP method. @param status HTTP status, or zero for transport errors. @returns True when retrying is safe under the policy. */ shouldRetry(method: string, status: number): boolean;
23
+ /** Calculates delay before the next attempt. @param attempt Zero-based retry number. @param retryAfter Server-provided delay, when available. @returns Delay in milliseconds. */ getDelay(attempt: number, retryAfter?: number): number;
24
+ }
25
+ /** Creates the default conservative REST retry policy. @param maxRetries Maximum retries. @returns Retry policy that retries rate limits and idempotent transient failures. @throws {TypeError} If maxRetries is negative or not finite. */
26
+ export declare function createRetryPolicy(maxRetries?: number): RetryPolicy;
27
+ /** Bun-native REST transport with Discord bucket-aware rate limiting, retries, and cancellation. */
28
+ export declare class REST {
29
+ #private;
30
+ /** Creates a REST transport. @param options Transport configuration. @throws {TypeError} If retry configuration is invalid. */
31
+ constructor(options?: {
32
+ token?: string;
33
+ timeout?: number;
34
+ retries?: number;
35
+ retryPolicy?: RetryPolicy;
36
+ baseURL?: string;
37
+ });
38
+ /** Sets the authentication token. @param token Discord bot token. @returns Nothing. @throws {TypeError} If token is empty. */
39
+ setToken(token: string): void;
40
+ /** Executes an HTTP request with Discord bucket/global rate limits, retry handling, and AbortSignal support. @param method HTTP method. @param path API path. @param body Optional JSON body. @param options Cancellation options. @returns Decoded response body. @throws {RESTError} If Discord or transport rejects the request. */
41
+ request<T>(method: string, path: string, body?: unknown, options?: RESTRequestOptions): Promise<T>;
42
+ /** Sends a GET request. @param path API path. @param options Cancellation options. @returns Decoded response. @throws {RESTError} When the request fails. */ get<T>(path: string, options?: RESTRequestOptions): Promise<T>;
43
+ /** Sends a POST request. @param path API path. @param body Optional JSON body. @param options Cancellation options. @returns Decoded response. @throws {RESTError} When the request fails. */ post<T>(path: string, body?: unknown, options?: RESTRequestOptions): Promise<T>;
44
+ /** Sends a PATCH request. @param path API path. @param body Optional JSON body. @param options Cancellation options. @returns Decoded response. @throws {RESTError} When the request fails. */ patch<T>(path: string, body?: unknown, options?: RESTRequestOptions): Promise<T>;
45
+ /** Sends a PUT request. @param path API path. @param body Optional JSON body. @param options Cancellation options. @returns Decoded response. @throws {RESTError} When the request fails. */ put<T>(path: string, body?: unknown, options?: RESTRequestOptions): Promise<T>;
46
+ /** Sends a DELETE request. @param path API path. @param options Cancellation options. @returns Decoded response. @throws {RESTError} When the request fails. */ delete<T>(path: string, options?: RESTRequestOptions): Promise<T>;
47
+ }
48
+ export { Routes } from "./routes.js";
49
+ export { WebhookClient, type WebhookClientOptions, type WebhookMessageOptions, } from "./webhook.js";