baff.js 0.0.0-stage → 0.1.1

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 (262) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/LICENSE +7 -0
  3. package/README.md +244 -3
  4. package/dist/cjs/builders/EmbedBuilder.d.ts +51 -0
  5. package/dist/cjs/builders/EmbedBuilder.js +150 -0
  6. package/dist/cjs/builders/SlashCommandBuilder.d.ts +69 -0
  7. package/dist/cjs/builders/SlashCommandBuilder.js +185 -0
  8. package/dist/cjs/builders/components/ActionRowBuilder.d.ts +14 -0
  9. package/dist/cjs/builders/components/ActionRowBuilder.js +53 -0
  10. package/dist/cjs/builders/components/ButtonBuilder.d.ts +19 -0
  11. package/dist/cjs/builders/components/ButtonBuilder.js +69 -0
  12. package/dist/cjs/builders/components/LayoutBuilders.d.ts +63 -0
  13. package/dist/cjs/builders/components/LayoutBuilders.js +179 -0
  14. package/dist/cjs/builders/components/ModalBuilder.d.ts +36 -0
  15. package/dist/cjs/builders/components/ModalBuilder.js +118 -0
  16. package/dist/cjs/builders/components/SelectMenuBuilder.d.ts +80 -0
  17. package/dist/cjs/builders/components/SelectMenuBuilder.js +192 -0
  18. package/dist/cjs/builders/components/shared.d.ts +16 -0
  19. package/dist/cjs/builders/components/shared.js +32 -0
  20. package/dist/cjs/builders/messagePayload.d.ts +35 -0
  21. package/dist/cjs/builders/messagePayload.js +88 -0
  22. package/dist/cjs/builders/validate.d.ts +12 -0
  23. package/dist/cjs/builders/validate.js +54 -0
  24. package/dist/cjs/client/Client.d.ts +63 -0
  25. package/dist/cjs/client/Client.js +152 -0
  26. package/dist/cjs/client/dispatch.d.ts +2 -0
  27. package/dist/cjs/client/dispatch.js +224 -0
  28. package/dist/cjs/client/events.d.ts +129 -0
  29. package/dist/cjs/client/events.js +2 -0
  30. package/dist/cjs/collectors/Collector.d.ts +37 -0
  31. package/dist/cjs/collectors/Collector.js +84 -0
  32. package/dist/cjs/collectors/InteractionCollector.d.ts +21 -0
  33. package/dist/cjs/collectors/InteractionCollector.js +44 -0
  34. package/dist/cjs/collectors/MessageCollector.d.ts +14 -0
  35. package/dist/cjs/collectors/MessageCollector.js +23 -0
  36. package/dist/cjs/errors/BaffError.d.ts +26 -0
  37. package/dist/cjs/errors/BaffError.js +39 -0
  38. package/dist/cjs/gateway/Gateway.d.ts +53 -0
  39. package/dist/cjs/gateway/Gateway.js +128 -0
  40. package/dist/cjs/http/handler.d.ts +11 -0
  41. package/dist/cjs/http/handler.js +72 -0
  42. package/dist/cjs/http/verify.d.ts +11 -0
  43. package/dist/cjs/http/verify.js +28 -0
  44. package/dist/cjs/index.d.ts +51 -0
  45. package/dist/cjs/index.js +185 -0
  46. package/dist/cjs/managers/CachedManager.d.ts +16 -0
  47. package/dist/cjs/managers/CachedManager.js +18 -0
  48. package/dist/cjs/managers/ChannelManager.d.ts +23 -0
  49. package/dist/cjs/managers/ChannelManager.js +85 -0
  50. package/dist/cjs/managers/CommandManager.d.ts +32 -0
  51. package/dist/cjs/managers/CommandManager.js +72 -0
  52. package/dist/cjs/managers/EventManager.d.ts +15 -0
  53. package/dist/cjs/managers/EventManager.js +36 -0
  54. package/dist/cjs/managers/ExpressionManagers.d.ts +36 -0
  55. package/dist/cjs/managers/ExpressionManagers.js +73 -0
  56. package/dist/cjs/managers/InviteManager.d.ts +17 -0
  57. package/dist/cjs/managers/InviteManager.js +26 -0
  58. package/dist/cjs/managers/MemberManager.d.ts +31 -0
  59. package/dist/cjs/managers/MemberManager.js +62 -0
  60. package/dist/cjs/managers/MessageManager.d.ts +32 -0
  61. package/dist/cjs/managers/MessageManager.js +79 -0
  62. package/dist/cjs/managers/RoleManager.d.ts +22 -0
  63. package/dist/cjs/managers/RoleManager.js +73 -0
  64. package/dist/cjs/managers/ServerChannelManager.d.ts +20 -0
  65. package/dist/cjs/managers/ServerChannelManager.js +30 -0
  66. package/dist/cjs/managers/ServerManager.d.ts +12 -0
  67. package/dist/cjs/managers/ServerManager.js +62 -0
  68. package/dist/cjs/managers/ThreadManager.d.ts +12 -0
  69. package/dist/cjs/managers/ThreadManager.js +20 -0
  70. package/dist/cjs/managers/UserManager.d.ts +11 -0
  71. package/dist/cjs/managers/UserManager.js +38 -0
  72. package/dist/cjs/managers/VoiceManager.d.ts +8 -0
  73. package/dist/cjs/managers/VoiceManager.js +17 -0
  74. package/dist/cjs/package.json +1 -0
  75. package/dist/cjs/rest/REST.d.ts +58 -0
  76. package/dist/cjs/rest/REST.js +193 -0
  77. package/dist/cjs/rest/Routes.d.ts +54 -0
  78. package/dist/cjs/rest/Routes.js +58 -0
  79. package/dist/cjs/rest/files.d.ts +19 -0
  80. package/dist/cjs/rest/files.js +37 -0
  81. package/dist/cjs/structures/Base.d.ts +13 -0
  82. package/dist/cjs/structures/Base.js +30 -0
  83. package/dist/cjs/structures/Message.d.ts +91 -0
  84. package/dist/cjs/structures/Message.js +200 -0
  85. package/dist/cjs/structures/Role.d.ts +34 -0
  86. package/dist/cjs/structures/Role.js +84 -0
  87. package/dist/cjs/structures/ScheduledEvent.d.ts +37 -0
  88. package/dist/cjs/structures/ScheduledEvent.js +73 -0
  89. package/dist/cjs/structures/Server.d.ts +68 -0
  90. package/dist/cjs/structures/Server.js +124 -0
  91. package/dist/cjs/structures/ServerAssets.d.ts +48 -0
  92. package/dist/cjs/structures/ServerAssets.js +104 -0
  93. package/dist/cjs/structures/ServerMember.d.ts +47 -0
  94. package/dist/cjs/structures/ServerMember.js +138 -0
  95. package/dist/cjs/structures/User.d.ts +35 -0
  96. package/dist/cjs/structures/User.js +87 -0
  97. package/dist/cjs/structures/Webhook.d.ts +30 -0
  98. package/dist/cjs/structures/Webhook.js +68 -0
  99. package/dist/cjs/structures/channels/BaseChannel.d.ts +49 -0
  100. package/dist/cjs/structures/channels/BaseChannel.js +81 -0
  101. package/dist/cjs/structures/channels/DMChannel.d.ts +9 -0
  102. package/dist/cjs/structures/channels/DMChannel.js +21 -0
  103. package/dist/cjs/structures/channels/ServerChannels.d.ts +57 -0
  104. package/dist/cjs/structures/channels/ServerChannels.js +138 -0
  105. package/dist/cjs/structures/channels/TextBasedChannel.d.ts +25 -0
  106. package/dist/cjs/structures/channels/TextBasedChannel.js +53 -0
  107. package/dist/cjs/structures/interactions/BaseInteraction.d.ts +74 -0
  108. package/dist/cjs/structures/interactions/BaseInteraction.js +221 -0
  109. package/dist/cjs/structures/interactions/CommandInteraction.d.ts +44 -0
  110. package/dist/cjs/structures/interactions/CommandInteraction.js +109 -0
  111. package/dist/cjs/structures/interactions/ComponentInteraction.d.ts +44 -0
  112. package/dist/cjs/structures/interactions/ComponentInteraction.js +64 -0
  113. package/dist/cjs/structures/interactions/ModalSubmitInteraction.d.ts +29 -0
  114. package/dist/cjs/structures/interactions/ModalSubmitInteraction.js +42 -0
  115. package/dist/cjs/structures/interactions/createInteraction.d.ts +4 -0
  116. package/dist/cjs/structures/interactions/createInteraction.js +34 -0
  117. package/dist/cjs/types.d.ts +369 -0
  118. package/dist/cjs/types.js +2 -0
  119. package/dist/cjs/util/Collection.d.ts +32 -0
  120. package/dist/cjs/util/Collection.js +145 -0
  121. package/dist/cjs/util/Permissions.d.ts +87 -0
  122. package/dist/cjs/util/Permissions.js +115 -0
  123. package/dist/cjs/util/Snowflake.d.ts +20 -0
  124. package/dist/cjs/util/Snowflake.js +40 -0
  125. package/dist/cjs/util/TypedEmitter.d.ts +17 -0
  126. package/dist/cjs/util/TypedEmitter.js +5 -0
  127. package/dist/cjs/util/constants.d.ts +78 -0
  128. package/dist/cjs/util/constants.js +81 -0
  129. package/dist/cjs/util/emoji.d.ts +8 -0
  130. package/dist/cjs/util/emoji.js +10 -0
  131. package/dist/cjs/util/formatters.d.ts +29 -0
  132. package/dist/cjs/util/formatters.js +55 -0
  133. package/dist/esm/builders/EmbedBuilder.d.ts +51 -0
  134. package/dist/esm/builders/EmbedBuilder.js +145 -0
  135. package/dist/esm/builders/SlashCommandBuilder.d.ts +69 -0
  136. package/dist/esm/builders/SlashCommandBuilder.js +170 -0
  137. package/dist/esm/builders/components/ActionRowBuilder.d.ts +14 -0
  138. package/dist/esm/builders/components/ActionRowBuilder.js +49 -0
  139. package/dist/esm/builders/components/ButtonBuilder.d.ts +19 -0
  140. package/dist/esm/builders/components/ButtonBuilder.js +65 -0
  141. package/dist/esm/builders/components/LayoutBuilders.d.ts +63 -0
  142. package/dist/esm/builders/components/LayoutBuilders.js +169 -0
  143. package/dist/esm/builders/components/ModalBuilder.d.ts +36 -0
  144. package/dist/esm/builders/components/ModalBuilder.js +113 -0
  145. package/dist/esm/builders/components/SelectMenuBuilder.d.ts +80 -0
  146. package/dist/esm/builders/components/SelectMenuBuilder.js +183 -0
  147. package/dist/esm/builders/components/shared.d.ts +16 -0
  148. package/dist/esm/builders/components/shared.js +26 -0
  149. package/dist/esm/builders/messagePayload.d.ts +35 -0
  150. package/dist/esm/builders/messagePayload.js +83 -0
  151. package/dist/esm/builders/validate.d.ts +12 -0
  152. package/dist/esm/builders/validate.js +46 -0
  153. package/dist/esm/client/Client.d.ts +63 -0
  154. package/dist/esm/client/Client.js +147 -0
  155. package/dist/esm/client/dispatch.d.ts +2 -0
  156. package/dist/esm/client/dispatch.js +221 -0
  157. package/dist/esm/client/events.d.ts +129 -0
  158. package/dist/esm/client/events.js +1 -0
  159. package/dist/esm/collectors/Collector.d.ts +37 -0
  160. package/dist/esm/collectors/Collector.js +78 -0
  161. package/dist/esm/collectors/InteractionCollector.d.ts +21 -0
  162. package/dist/esm/collectors/InteractionCollector.js +40 -0
  163. package/dist/esm/collectors/MessageCollector.d.ts +14 -0
  164. package/dist/esm/collectors/MessageCollector.js +19 -0
  165. package/dist/esm/errors/BaffError.d.ts +26 -0
  166. package/dist/esm/errors/BaffError.js +33 -0
  167. package/dist/esm/gateway/Gateway.d.ts +53 -0
  168. package/dist/esm/gateway/Gateway.js +124 -0
  169. package/dist/esm/http/handler.d.ts +11 -0
  170. package/dist/esm/http/handler.js +68 -0
  171. package/dist/esm/http/verify.d.ts +11 -0
  172. package/dist/esm/http/verify.js +22 -0
  173. package/dist/esm/index.d.ts +51 -0
  174. package/dist/esm/index.js +49 -0
  175. package/dist/esm/managers/CachedManager.d.ts +16 -0
  176. package/dist/esm/managers/CachedManager.js +14 -0
  177. package/dist/esm/managers/ChannelManager.d.ts +23 -0
  178. package/dist/esm/managers/ChannelManager.js +81 -0
  179. package/dist/esm/managers/CommandManager.d.ts +32 -0
  180. package/dist/esm/managers/CommandManager.js +67 -0
  181. package/dist/esm/managers/EventManager.d.ts +15 -0
  182. package/dist/esm/managers/EventManager.js +32 -0
  183. package/dist/esm/managers/ExpressionManagers.d.ts +36 -0
  184. package/dist/esm/managers/ExpressionManagers.js +68 -0
  185. package/dist/esm/managers/InviteManager.d.ts +17 -0
  186. package/dist/esm/managers/InviteManager.js +22 -0
  187. package/dist/esm/managers/MemberManager.d.ts +31 -0
  188. package/dist/esm/managers/MemberManager.js +58 -0
  189. package/dist/esm/managers/MessageManager.d.ts +32 -0
  190. package/dist/esm/managers/MessageManager.js +75 -0
  191. package/dist/esm/managers/RoleManager.d.ts +22 -0
  192. package/dist/esm/managers/RoleManager.js +69 -0
  193. package/dist/esm/managers/ServerChannelManager.d.ts +20 -0
  194. package/dist/esm/managers/ServerChannelManager.js +26 -0
  195. package/dist/esm/managers/ServerManager.d.ts +12 -0
  196. package/dist/esm/managers/ServerManager.js +58 -0
  197. package/dist/esm/managers/ThreadManager.d.ts +12 -0
  198. package/dist/esm/managers/ThreadManager.js +16 -0
  199. package/dist/esm/managers/UserManager.d.ts +11 -0
  200. package/dist/esm/managers/UserManager.js +34 -0
  201. package/dist/esm/managers/VoiceManager.d.ts +8 -0
  202. package/dist/esm/managers/VoiceManager.js +13 -0
  203. package/dist/esm/package.json +1 -0
  204. package/dist/esm/rest/REST.d.ts +58 -0
  205. package/dist/esm/rest/REST.js +188 -0
  206. package/dist/esm/rest/Routes.d.ts +54 -0
  207. package/dist/esm/rest/Routes.js +55 -0
  208. package/dist/esm/rest/files.d.ts +19 -0
  209. package/dist/esm/rest/files.js +31 -0
  210. package/dist/esm/structures/Base.d.ts +13 -0
  211. package/dist/esm/structures/Base.js +25 -0
  212. package/dist/esm/structures/Message.d.ts +91 -0
  213. package/dist/esm/structures/Message.js +194 -0
  214. package/dist/esm/structures/Role.d.ts +34 -0
  215. package/dist/esm/structures/Role.js +79 -0
  216. package/dist/esm/structures/ScheduledEvent.d.ts +37 -0
  217. package/dist/esm/structures/ScheduledEvent.js +68 -0
  218. package/dist/esm/structures/Server.d.ts +68 -0
  219. package/dist/esm/structures/Server.js +120 -0
  220. package/dist/esm/structures/ServerAssets.d.ts +48 -0
  221. package/dist/esm/structures/ServerAssets.js +98 -0
  222. package/dist/esm/structures/ServerMember.d.ts +47 -0
  223. package/dist/esm/structures/ServerMember.js +133 -0
  224. package/dist/esm/structures/User.d.ts +35 -0
  225. package/dist/esm/structures/User.js +82 -0
  226. package/dist/esm/structures/Webhook.d.ts +30 -0
  227. package/dist/esm/structures/Webhook.js +63 -0
  228. package/dist/esm/structures/channels/BaseChannel.d.ts +49 -0
  229. package/dist/esm/structures/channels/BaseChannel.js +77 -0
  230. package/dist/esm/structures/channels/DMChannel.d.ts +9 -0
  231. package/dist/esm/structures/channels/DMChannel.js +17 -0
  232. package/dist/esm/structures/channels/ServerChannels.d.ts +57 -0
  233. package/dist/esm/structures/channels/ServerChannels.js +129 -0
  234. package/dist/esm/structures/channels/TextBasedChannel.d.ts +25 -0
  235. package/dist/esm/structures/channels/TextBasedChannel.js +49 -0
  236. package/dist/esm/structures/interactions/BaseInteraction.d.ts +74 -0
  237. package/dist/esm/structures/interactions/BaseInteraction.js +217 -0
  238. package/dist/esm/structures/interactions/CommandInteraction.d.ts +44 -0
  239. package/dist/esm/structures/interactions/CommandInteraction.js +104 -0
  240. package/dist/esm/structures/interactions/ComponentInteraction.d.ts +44 -0
  241. package/dist/esm/structures/interactions/ComponentInteraction.js +53 -0
  242. package/dist/esm/structures/interactions/ModalSubmitInteraction.d.ts +29 -0
  243. package/dist/esm/structures/interactions/ModalSubmitInteraction.js +37 -0
  244. package/dist/esm/structures/interactions/createInteraction.d.ts +4 -0
  245. package/dist/esm/structures/interactions/createInteraction.js +31 -0
  246. package/dist/esm/types.d.ts +369 -0
  247. package/dist/esm/types.js +1 -0
  248. package/dist/esm/util/Collection.d.ts +32 -0
  249. package/dist/esm/util/Collection.js +141 -0
  250. package/dist/esm/util/Permissions.d.ts +87 -0
  251. package/dist/esm/util/Permissions.js +111 -0
  252. package/dist/esm/util/Snowflake.d.ts +20 -0
  253. package/dist/esm/util/Snowflake.js +37 -0
  254. package/dist/esm/util/TypedEmitter.d.ts +17 -0
  255. package/dist/esm/util/TypedEmitter.js +2 -0
  256. package/dist/esm/util/constants.d.ts +78 -0
  257. package/dist/esm/util/constants.js +78 -0
  258. package/dist/esm/util/emoji.d.ts +8 -0
  259. package/dist/esm/util/emoji.js +7 -0
  260. package/dist/esm/util/formatters.d.ts +29 -0
  261. package/dist/esm/util/formatters.js +34 -0
  262. package/package.json +57 -5
@@ -0,0 +1,22 @@
1
+ import { createHmac, timingSafeEqual } from 'node:crypto';
2
+ export const SIGNATURE_HEADERS = ['x-bafflux-signature', 'x-baff.gg-signature'];
3
+ export const TIMESTAMP_HEADERS = ['x-bafflux-timestamp', 'x-baff.gg-timestamp'];
4
+ export function sign(secret, timestamp, body) {
5
+ return createHmac('sha256', secret).update(`${timestamp}.`).update(body).digest('hex');
6
+ }
7
+ export function verifyKey(body, signature, timestamp, secret, options = {}) {
8
+ if (!signature || !timestamp || !secret)
9
+ return false;
10
+ if (!/^\d{1,12}$/.test(timestamp))
11
+ return false;
12
+ const now = (options.now ?? Date.now)() / 1000;
13
+ if (Math.abs(now - Number(timestamp)) > (options.toleranceSeconds ?? 300))
14
+ return false;
15
+ const expected = Buffer.from(sign(secret, timestamp, body), 'hex');
16
+ const given = Buffer.from(signature, 'hex');
17
+ return given.length === expected.length && timingSafeEqual(given, expected);
18
+ }
19
+ export function verifyRequestHeaders(headers, body, secret, options) {
20
+ const find = (names) => names.map((name) => headers.get(name)).find((value) => value !== null) ?? null;
21
+ return verifyKey(body, find(SIGNATURE_HEADERS), find(TIMESTAMP_HEADERS), secret, options);
22
+ }
@@ -0,0 +1,51 @@
1
+ export { Client, ClientApplication, type ClientOptions } from './client/Client.js';
2
+ export type { ClientEvents, MemberRemoval, MentionEvent, MessageDeleteEvent, MessagePinEvent, PresenceEvent, ReactionEvent, ServerRemoval, TypingEvent } from './client/events.js';
3
+ export { REST, bucketKey, type HTTPMethod, type RateLimitInfo, type RequestOptions, type RESTOptions } from './rest/REST.js';
4
+ export { Routes } from './rest/Routes.js';
5
+ export { AttachmentBuilder, type FileData, type RawFile } from './rest/files.js';
6
+ export { Gateway, type GatewayOptions, type WebSocketConstructor, type WebSocketLike } from './gateway/Gateway.js';
7
+ export { BaffAPIError, BaffError, BaffRateLimitError } from './errors/BaffError.js';
8
+ export { Collection } from './util/Collection.js';
9
+ export { Snowflake, type DeconstructedSnowflake, type SnowflakeParts } from './util/Snowflake.js';
10
+ export { PermissionFlagsBits, PermissionsBitField, type PermissionResolvable, type PermissionString } from './util/Permissions.js';
11
+ export * from './util/formatters.js';
12
+ export { resolveEmoji, type EmojiResolvable } from './util/emoji.js';
13
+ export { ApplicationCommandOptionType, ButtonStyle, ChannelType, Colors, ComponentType, DEFAULT_API_URL, DEFAULT_GATEWAY_URL, MessageFlags, PresenceStatus, SeparatorSpacing, TextInputStyle, VERSION } from './util/constants.js';
14
+ export { EmbedBuilder, EmbedLimits, resolveColor, type ColorResolvable } from './builders/EmbedBuilder.js';
15
+ export { ActionRowBuilder } from './builders/components/ActionRowBuilder.js';
16
+ export { ButtonBuilder } from './builders/components/ButtonBuilder.js';
17
+ export { ChannelSelectMenuBuilder, MentionableSelectMenuBuilder, RoleSelectMenuBuilder, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, UserSelectMenuBuilder, type SelectOptionData } from './builders/components/SelectMenuBuilder.js';
18
+ export { ModalBuilder, TextInputBuilder } from './builders/components/ModalBuilder.js';
19
+ export { ContainerBuilder, MediaGalleryBuilder, MediaGalleryItemBuilder, SectionBuilder, SeparatorBuilder, TextDisplayBuilder, ThumbnailBuilder } from './builders/components/LayoutBuilders.js';
20
+ export { BooleanOption, ChannelOption, IntegerOption, NumberOption, PrefixCommandBuilder, RoleOption, SlashCommandBuilder, StringOption, SubcommandBuilder, SubcommandGroupBuilder, UserOption } from './builders/SlashCommandBuilder.js';
21
+ export { checkComponents, resolveEmbeds, resolveMessage, type MessageOptions, type PollData, type ResolvedMessage } from './builders/messagePayload.js';
22
+ export { Collector, CollectorError, awaitCollector, type CollectorOptions } from './collectors/Collector.js';
23
+ export { InteractionCollector, type InteractionCollectorOptions } from './collectors/InteractionCollector.js';
24
+ export { MessageCollector, type AwaitMessagesOptions, type MessageCollectorOptions } from './collectors/MessageCollector.js';
25
+ export { createInteractionsHandler, toNodeListener, type InteractionsHandler, type InteractionsHandlerOptions } from './http/handler.js';
26
+ export { sign as signInteractionBody, verifyKey, verifyRequestHeaders, type VerifyOptions } from './http/verify.js';
27
+ export { CachedManager, type FetchOptions } from './managers/CachedManager.js';
28
+ export { ApplicationCommand, ApplicationCommandManager } from './managers/CommandManager.js';
29
+ export { MessageManager, type FetchMessagesOptions } from './managers/MessageManager.js';
30
+ export { MemberManager, type Ban } from './managers/MemberManager.js';
31
+ export { RoleManager } from './managers/RoleManager.js';
32
+ export { ServerChannelManager, type CreateChannelOptions } from './managers/ServerChannelManager.js';
33
+ export { InviteManager, type CreateInviteOptions } from './managers/InviteManager.js';
34
+ export { BaseChannel, type ChannelEditData } from './structures/channels/BaseChannel.js';
35
+ export { DMChannel } from './structures/channels/DMChannel.js';
36
+ export { CategoryChannel, ForumChannel, TextChannel, ThreadChannel, VoiceChannel, createChannel, type Channel, type ServerChannel } from './structures/channels/ServerChannels.js';
37
+ export { TextBasedChannel } from './structures/channels/TextBasedChannel.js';
38
+ export { BaseInteraction, type InteractionReplyOptions } from './structures/interactions/BaseInteraction.js';
39
+ export { ChatInputCommandInteraction, CommandInteractionOptions } from './structures/interactions/CommandInteraction.js';
40
+ export { ButtonInteraction, ChannelSelectMenuInteraction, MentionableSelectMenuInteraction, MessageComponentInteraction, RoleSelectMenuInteraction, SelectMenuInteraction, StringSelectMenuInteraction, UserSelectMenuInteraction } from './structures/interactions/ComponentInteraction.js';
41
+ export { ModalSubmitFields, ModalSubmitInteraction } from './structures/interactions/ModalSubmitInteraction.js';
42
+ export { createInteraction } from './structures/interactions/createInteraction.js';
43
+ export { Message, MessageMentions, MessageReaction } from './structures/Message.js';
44
+ export { Role, type RoleEditData } from './structures/Role.js';
45
+ export { ScheduledEvent, type ScheduledEventData } from './structures/ScheduledEvent.js';
46
+ export { Server, type AuditLogEntry, type AuditLogQuery, type ServerEditData } from './structures/Server.js';
47
+ export { Emoji, Invite, Sticker } from './structures/ServerAssets.js';
48
+ export { MemberRoleManager, ServerMember } from './structures/ServerMember.js';
49
+ export { ClientUser, User } from './structures/User.js';
50
+ export { Webhook, WebhookClient, type WebhookMessageOptions } from './structures/Webhook.js';
51
+ export type * from './types.js';
@@ -0,0 +1,49 @@
1
+ export { Client, ClientApplication } from './client/Client.js';
2
+ export { REST, bucketKey } from './rest/REST.js';
3
+ export { Routes } from './rest/Routes.js';
4
+ export { AttachmentBuilder } from './rest/files.js';
5
+ export { Gateway } from './gateway/Gateway.js';
6
+ export { BaffAPIError, BaffError, BaffRateLimitError } from './errors/BaffError.js';
7
+ export { Collection } from './util/Collection.js';
8
+ export { Snowflake } from './util/Snowflake.js';
9
+ export { PermissionFlagsBits, PermissionsBitField } from './util/Permissions.js';
10
+ export * from './util/formatters.js';
11
+ export { resolveEmoji } from './util/emoji.js';
12
+ export { ApplicationCommandOptionType, ButtonStyle, ChannelType, Colors, ComponentType, DEFAULT_API_URL, DEFAULT_GATEWAY_URL, MessageFlags, PresenceStatus, SeparatorSpacing, TextInputStyle, VERSION } from './util/constants.js';
13
+ export { EmbedBuilder, EmbedLimits, resolveColor } from './builders/EmbedBuilder.js';
14
+ export { ActionRowBuilder } from './builders/components/ActionRowBuilder.js';
15
+ export { ButtonBuilder } from './builders/components/ButtonBuilder.js';
16
+ export { ChannelSelectMenuBuilder, MentionableSelectMenuBuilder, RoleSelectMenuBuilder, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, UserSelectMenuBuilder } from './builders/components/SelectMenuBuilder.js';
17
+ export { ModalBuilder, TextInputBuilder } from './builders/components/ModalBuilder.js';
18
+ export { ContainerBuilder, MediaGalleryBuilder, MediaGalleryItemBuilder, SectionBuilder, SeparatorBuilder, TextDisplayBuilder, ThumbnailBuilder } from './builders/components/LayoutBuilders.js';
19
+ export { BooleanOption, ChannelOption, IntegerOption, NumberOption, PrefixCommandBuilder, RoleOption, SlashCommandBuilder, StringOption, SubcommandBuilder, SubcommandGroupBuilder, UserOption } from './builders/SlashCommandBuilder.js';
20
+ export { checkComponents, resolveEmbeds, resolveMessage } from './builders/messagePayload.js';
21
+ export { Collector, CollectorError, awaitCollector } from './collectors/Collector.js';
22
+ export { InteractionCollector } from './collectors/InteractionCollector.js';
23
+ export { MessageCollector } from './collectors/MessageCollector.js';
24
+ export { createInteractionsHandler, toNodeListener } from './http/handler.js';
25
+ export { sign as signInteractionBody, verifyKey, verifyRequestHeaders } from './http/verify.js';
26
+ export { CachedManager } from './managers/CachedManager.js';
27
+ export { ApplicationCommand, ApplicationCommandManager } from './managers/CommandManager.js';
28
+ export { MessageManager } from './managers/MessageManager.js';
29
+ export { MemberManager } from './managers/MemberManager.js';
30
+ export { RoleManager } from './managers/RoleManager.js';
31
+ export { ServerChannelManager } from './managers/ServerChannelManager.js';
32
+ export { InviteManager } from './managers/InviteManager.js';
33
+ export { BaseChannel } from './structures/channels/BaseChannel.js';
34
+ export { DMChannel } from './structures/channels/DMChannel.js';
35
+ export { CategoryChannel, ForumChannel, TextChannel, ThreadChannel, VoiceChannel, createChannel } from './structures/channels/ServerChannels.js';
36
+ export { TextBasedChannel } from './structures/channels/TextBasedChannel.js';
37
+ export { BaseInteraction } from './structures/interactions/BaseInteraction.js';
38
+ export { ChatInputCommandInteraction, CommandInteractionOptions } from './structures/interactions/CommandInteraction.js';
39
+ export { ButtonInteraction, ChannelSelectMenuInteraction, MentionableSelectMenuInteraction, MessageComponentInteraction, RoleSelectMenuInteraction, SelectMenuInteraction, StringSelectMenuInteraction, UserSelectMenuInteraction } from './structures/interactions/ComponentInteraction.js';
40
+ export { ModalSubmitFields, ModalSubmitInteraction } from './structures/interactions/ModalSubmitInteraction.js';
41
+ export { createInteraction } from './structures/interactions/createInteraction.js';
42
+ export { Message, MessageMentions, MessageReaction } from './structures/Message.js';
43
+ export { Role } from './structures/Role.js';
44
+ export { ScheduledEvent } from './structures/ScheduledEvent.js';
45
+ export { Server } from './structures/Server.js';
46
+ export { Emoji, Invite, Sticker } from './structures/ServerAssets.js';
47
+ export { MemberRoleManager, ServerMember } from './structures/ServerMember.js';
48
+ export { ClientUser, User } from './structures/User.js';
49
+ export { Webhook, WebhookClient } from './structures/Webhook.js';
@@ -0,0 +1,16 @@
1
+ import type { Client } from '../client/Client.js';
2
+ import { Collection } from '../util/Collection.js';
3
+ export declare abstract class CachedManager<V extends {
4
+ id: string;
5
+ }> {
6
+ readonly client: Client;
7
+ readonly cache: Collection<string, V>;
8
+ constructor(client: Client);
9
+ resolve(target: string | V): V | null;
10
+ resolveId(target: string | {
11
+ id: string;
12
+ }): string;
13
+ }
14
+ export interface FetchOptions {
15
+ force?: boolean;
16
+ }
@@ -0,0 +1,14 @@
1
+ import { Collection } from '../util/Collection.js';
2
+ export class CachedManager {
3
+ client;
4
+ cache = new Collection();
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ resolve(target) {
9
+ return typeof target === 'string' ? (this.cache.get(target) ?? null) : target;
10
+ }
11
+ resolveId(target) {
12
+ return typeof target === 'string' ? target : target.id;
13
+ }
14
+ }
@@ -0,0 +1,23 @@
1
+ import { DMChannel } from '../structures/channels/DMChannel.js';
2
+ import { ThreadChannel, type Channel, type ServerChannel } from '../structures/channels/ServerChannels.js';
3
+ import type { TextBasedChannel } from '../structures/channels/TextBasedChannel.js';
4
+ import type { APIChannel } from '../types.js';
5
+ import { Collection } from '../util/Collection.js';
6
+ import { CachedManager, type FetchOptions } from './CachedManager.js';
7
+ export declare class ChannelManager extends CachedManager<Channel> {
8
+ private readonly byServer;
9
+ forServer(serverId: string): Collection<string, ServerChannel>;
10
+ _set(channel: Channel): Channel;
11
+ _upsert(data: APIChannel): Channel;
12
+ _remove(id: string): Channel | null;
13
+ _replaceServer(serverId: string, list: APIChannel[]): {
14
+ created: Channel[];
15
+ updated: [Channel, Channel][];
16
+ deleted: Channel[];
17
+ };
18
+ _addDM(data: APIChannel): DMChannel;
19
+ _addThread(data: APIChannel): ThreadChannel;
20
+ _textChannel(id: string, serverId: string | null): TextBasedChannel;
21
+ fetchDMs(): Promise<Collection<string, DMChannel>>;
22
+ fetch(id: string, options?: FetchOptions): Promise<Channel>;
23
+ }
@@ -0,0 +1,81 @@
1
+ import { BaffError } from '../errors/BaffError.js';
2
+ import { Routes } from '../rest/Routes.js';
3
+ import { createChannel, ThreadChannel } from '../structures/channels/ServerChannels.js';
4
+ import { Collection } from '../util/Collection.js';
5
+ import { CachedManager } from './CachedManager.js';
6
+ export class ChannelManager extends CachedManager {
7
+ byServer = new Map();
8
+ forServer(serverId) {
9
+ let list = this.byServer.get(serverId);
10
+ if (!list)
11
+ this.byServer.set(serverId, (list = new Collection()));
12
+ return list;
13
+ }
14
+ _set(channel) {
15
+ this.cache.set(channel.id, channel);
16
+ if (channel.serverId)
17
+ this.forServer(channel.serverId).set(channel.id, channel);
18
+ return channel;
19
+ }
20
+ _upsert(data) {
21
+ const existing = this.cache.get(data.id);
22
+ if (existing && (data.kind ?? data.type ?? existing.kind) === existing.kind)
23
+ return existing._patch(data);
24
+ return this._set(createChannel(this.client, data));
25
+ }
26
+ _remove(id) {
27
+ const channel = this.cache.get(id) ?? null;
28
+ this.cache.delete(id);
29
+ if (channel?.serverId)
30
+ this.forServer(channel.serverId).delete(id);
31
+ return channel;
32
+ }
33
+ _replaceServer(serverId, list) {
34
+ const seen = new Set();
35
+ const created = [];
36
+ const updated = [];
37
+ for (const data of list) {
38
+ const withServer = { ...data, serverId };
39
+ seen.add(data.id);
40
+ const existing = this.cache.get(data.id);
41
+ if (!existing) {
42
+ created.push(this._upsert(withServer));
43
+ continue;
44
+ }
45
+ const before = existing._clone();
46
+ updated.push([before, this._upsert(withServer)]);
47
+ }
48
+ const deleted = [];
49
+ for (const [id, channel] of this.forServer(serverId)) {
50
+ if (!seen.has(id) && !(channel instanceof ThreadChannel))
51
+ deleted.push(this._remove(id));
52
+ }
53
+ return { created, updated, deleted };
54
+ }
55
+ _addDM(data) {
56
+ return this._upsert({ ...data, serverId: null });
57
+ }
58
+ _addThread(data) {
59
+ return this._upsert(data);
60
+ }
61
+ _textChannel(id, serverId) {
62
+ const cached = this.cache.get(id);
63
+ if (cached?.isTextBased())
64
+ return cached;
65
+ return this._set(createChannel(this.client, { id, kind: serverId ? 'text' : 'dm', serverId }));
66
+ }
67
+ async fetchDMs() {
68
+ const list = await this.client.rest.get(Routes.dms());
69
+ return new Collection(list.map((data) => [data.id, this._addDM(data)]));
70
+ }
71
+ async fetch(id, options = {}) {
72
+ const cached = this.cache.get(id);
73
+ if (cached && !options.force)
74
+ return cached;
75
+ await Promise.all([this.client.servers.fetch(undefined, { force: true }), this.fetchDMs()]);
76
+ const channel = this.cache.get(id);
77
+ if (!channel)
78
+ throw new BaffError('UNKNOWN_CHANNEL', `Channel ${id} was not found in the servers or DMs this bot can see.`);
79
+ return channel;
80
+ }
81
+ }
@@ -0,0 +1,32 @@
1
+ import type { Client } from '../client/Client.js';
2
+ import { type Serializable } from '../builders/validate.js';
3
+ import { Identified } from '../structures/Base.js';
4
+ import type { APICommand } from '../types.js';
5
+ import { Collection } from '../util/Collection.js';
6
+ export declare class ApplicationCommand extends Identified {
7
+ private readonly manager;
8
+ readonly id: string;
9
+ readonly applicationId: string;
10
+ readonly serverId: string | null;
11
+ readonly kind: 'slash' | 'prefix';
12
+ readonly name: string;
13
+ readonly description: string;
14
+ readonly options: NonNullable<APICommand['options']>;
15
+ readonly prefix: string | null;
16
+ constructor(client: Client, data: APICommand, manager: ApplicationCommandManager);
17
+ delete(): Promise<void>;
18
+ toString(): string;
19
+ }
20
+ export declare class ApplicationCommandManager {
21
+ private readonly client;
22
+ private readonly appId;
23
+ readonly serverId: string | null;
24
+ readonly cache: Collection<string, ApplicationCommand>;
25
+ constructor(client: Client, appId: () => string, serverId?: string | null);
26
+ get applicationId(): string;
27
+ private get path();
28
+ private load;
29
+ fetch(): Promise<Collection<string, ApplicationCommand>>;
30
+ set(commands: (Serializable | APICommand)[]): Promise<Collection<string, ApplicationCommand>>;
31
+ delete(commandId: string): Promise<void>;
32
+ }
@@ -0,0 +1,67 @@
1
+ import { resolveJSON } from '../builders/validate.js';
2
+ import { Routes } from '../rest/Routes.js';
3
+ import { Identified } from '../structures/Base.js';
4
+ import { Collection } from '../util/Collection.js';
5
+ export class ApplicationCommand extends Identified {
6
+ manager;
7
+ id;
8
+ applicationId;
9
+ serverId;
10
+ kind;
11
+ name;
12
+ description;
13
+ options;
14
+ prefix;
15
+ constructor(client, data, manager) {
16
+ super(client);
17
+ this.manager = manager;
18
+ this.id = data.id;
19
+ this.applicationId = data.applicationId ?? manager.applicationId;
20
+ this.serverId = data.serverId ?? null;
21
+ this.kind = data.kind ?? 'slash';
22
+ this.name = data.name;
23
+ this.description = data.description;
24
+ this.options = data.options ?? [];
25
+ this.prefix = data.prefix ?? null;
26
+ }
27
+ delete() {
28
+ return this.manager.delete(this.id);
29
+ }
30
+ toString() {
31
+ return this.kind === 'prefix' ? `${this.prefix}${this.name}` : `/${this.name}`;
32
+ }
33
+ }
34
+ export class ApplicationCommandManager {
35
+ client;
36
+ appId;
37
+ serverId;
38
+ cache = new Collection();
39
+ constructor(client, appId, serverId = null) {
40
+ this.client = client;
41
+ this.appId = appId;
42
+ this.serverId = serverId;
43
+ }
44
+ get applicationId() {
45
+ return this.appId();
46
+ }
47
+ get path() {
48
+ return this.serverId ? Routes.serverCommands(this.applicationId, this.serverId) : Routes.applicationCommands(this.applicationId);
49
+ }
50
+ load(list) {
51
+ this.cache.clear();
52
+ for (const data of list)
53
+ this.cache.set(data.id, new ApplicationCommand(this.client, data, this));
54
+ return this.cache;
55
+ }
56
+ async fetch() {
57
+ return this.load(await this.client.rest.get(this.path));
58
+ }
59
+ async set(commands) {
60
+ const body = commands.map((c) => resolveJSON(c));
61
+ return this.load(await this.client.rest.put(this.path, { body }));
62
+ }
63
+ async delete(commandId) {
64
+ await this.client.rest.delete(Routes.applicationCommand(this.applicationId, commandId));
65
+ this.cache.delete(commandId);
66
+ }
67
+ }
@@ -0,0 +1,15 @@
1
+ import type { Client } from '../client/Client.js';
2
+ import { ScheduledEvent, type ScheduledEventData } from '../structures/ScheduledEvent.js';
3
+ import type { APIServerEvent } from '../types.js';
4
+ import { CachedManager } from './CachedManager.js';
5
+ import type { Collection } from '../util/Collection.js';
6
+ export declare class EventManager extends CachedManager<ScheduledEvent> {
7
+ readonly serverId: string;
8
+ constructor(client: Client, serverId: string);
9
+ _add(data: APIServerEvent): ScheduledEvent;
10
+ fetch(): Promise<Collection<string, ScheduledEvent>>;
11
+ create(data: Required<Pick<ScheduledEventData, 'name' | 'locationKind' | 'startAt'>> & ScheduledEventData): Promise<ScheduledEvent>;
12
+ delete(event: string | {
13
+ id: string;
14
+ }): Promise<void>;
15
+ }
@@ -0,0 +1,32 @@
1
+ import { Routes } from '../rest/Routes.js';
2
+ import { eventBody, ScheduledEvent } from '../structures/ScheduledEvent.js';
3
+ import { CachedManager } from './CachedManager.js';
4
+ export class EventManager extends CachedManager {
5
+ serverId;
6
+ constructor(client, serverId) {
7
+ super(client);
8
+ this.serverId = serverId;
9
+ }
10
+ _add(data) {
11
+ const existing = this.cache.get(data.id);
12
+ if (existing)
13
+ return existing._patch(data);
14
+ const event = new ScheduledEvent(this.client, data);
15
+ this.cache.set(event.id, event);
16
+ return event;
17
+ }
18
+ async fetch() {
19
+ const list = await this.client.rest.get(Routes.serverEvents(this.serverId));
20
+ this.cache.clear();
21
+ list.forEach((data) => this._add(data));
22
+ return this.cache;
23
+ }
24
+ async create(data) {
25
+ return this._add(await this.client.rest.post(Routes.serverEvents(this.serverId), { body: eventBody(data) }));
26
+ }
27
+ async delete(event) {
28
+ const id = this.resolveId(event);
29
+ await this.client.rest.delete(Routes.serverEvent(this.serverId, id));
30
+ this.cache.delete(id);
31
+ }
32
+ }
@@ -0,0 +1,36 @@
1
+ import type { Client } from '../client/Client.js';
2
+ import { AttachmentBuilder, type FileData } from '../rest/files.js';
3
+ import { Emoji, Sticker } from '../structures/ServerAssets.js';
4
+ import type { APIEmoji, APISticker } from '../types.js';
5
+ import { Collection } from '../util/Collection.js';
6
+ import { CachedManager } from './CachedManager.js';
7
+ type Upload = FileData | AttachmentBuilder;
8
+ export declare class EmojiManager extends CachedManager<Emoji> {
9
+ readonly serverId: string;
10
+ constructor(client: Client, serverId: string);
11
+ _add(data: APIEmoji): Emoji;
12
+ fetch(): Promise<Collection<string, Emoji>>;
13
+ create(options: {
14
+ name: string;
15
+ attachment: Upload;
16
+ }): Promise<Emoji>;
17
+ delete(emoji: string | {
18
+ id: string;
19
+ }): Promise<void>;
20
+ }
21
+ export declare class StickerManager extends CachedManager<Sticker> {
22
+ readonly serverId: string;
23
+ constructor(client: Client, serverId: string);
24
+ _setAll(list: APISticker[]): void;
25
+ fetch(): Promise<Collection<string, Sticker>>;
26
+ create(options: {
27
+ name: string;
28
+ description?: string;
29
+ emoji: string;
30
+ file: Upload;
31
+ }): Promise<Sticker>;
32
+ delete(sticker: string | {
33
+ id: string;
34
+ }): Promise<void>;
35
+ }
36
+ export {};
@@ -0,0 +1,68 @@
1
+ import { AttachmentBuilder, toBlob } from '../rest/files.js';
2
+ import { Routes } from '../rest/Routes.js';
3
+ import { Emoji, Sticker } from '../structures/ServerAssets.js';
4
+ import { CachedManager } from './CachedManager.js';
5
+ function fileForm(fields, upload) {
6
+ const form = new FormData();
7
+ for (const [key, value] of Object.entries(fields))
8
+ if (value !== undefined)
9
+ form.append(key, value);
10
+ const file = upload instanceof AttachmentBuilder ? upload.toFile() : { name: 'file', data: upload };
11
+ form.append('file', toBlob(file), file.name);
12
+ return form;
13
+ }
14
+ export class EmojiManager extends CachedManager {
15
+ serverId;
16
+ constructor(client, serverId) {
17
+ super(client);
18
+ this.serverId = serverId;
19
+ }
20
+ _add(data) {
21
+ const emoji = new Emoji(this.client, { ...data, serverId: this.serverId });
22
+ this.cache.set(emoji.id, emoji);
23
+ return emoji;
24
+ }
25
+ async fetch() {
26
+ const list = await this.client.rest.get(Routes.serverEmojis(this.serverId));
27
+ this.cache.clear();
28
+ list.forEach((data) => this._add(data));
29
+ return this.cache;
30
+ }
31
+ async create(options) {
32
+ const data = await this.client.rest.post(Routes.serverEmojis(this.serverId), { body: fileForm({ name: options.name }, options.attachment) });
33
+ return this._add(data);
34
+ }
35
+ async delete(emoji) {
36
+ const id = this.resolveId(emoji);
37
+ await this.client.rest.delete(Routes.serverEmoji(this.serverId, id));
38
+ this.cache.delete(id);
39
+ }
40
+ }
41
+ export class StickerManager extends CachedManager {
42
+ serverId;
43
+ constructor(client, serverId) {
44
+ super(client);
45
+ this.serverId = serverId;
46
+ }
47
+ _setAll(list) {
48
+ this.cache.clear();
49
+ for (const data of list)
50
+ this.cache.set(data.id, new Sticker(this.client, data, this.serverId));
51
+ }
52
+ async fetch() {
53
+ this._setAll(await this.client.rest.get(Routes.serverStickers(this.serverId)));
54
+ return this.cache;
55
+ }
56
+ async create(options) {
57
+ const form = fileForm({ name: options.name, description: options.description ?? '', emoji: options.emoji }, options.file);
58
+ const data = await this.client.rest.post(Routes.serverStickers(this.serverId), { body: form });
59
+ const sticker = new Sticker(this.client, data, this.serverId);
60
+ this.cache.set(sticker.id, sticker);
61
+ return sticker;
62
+ }
63
+ async delete(sticker) {
64
+ const id = this.resolveId(sticker);
65
+ await this.client.rest.delete(Routes.serverSticker(this.serverId, id));
66
+ this.cache.delete(id);
67
+ }
68
+ }
@@ -0,0 +1,17 @@
1
+ import type { Client } from '../client/Client.js';
2
+ import { Invite } from '../structures/ServerAssets.js';
3
+ import { Collection } from '../util/Collection.js';
4
+ export interface CreateInviteOptions {
5
+ maxAgeSecs?: number;
6
+ maxUses?: number;
7
+ temporary?: boolean;
8
+ unique?: boolean;
9
+ }
10
+ export declare class InviteManager {
11
+ private readonly client;
12
+ readonly serverId: string;
13
+ constructor(client: Client, serverId: string);
14
+ create(options?: CreateInviteOptions): Promise<Invite>;
15
+ fetch(): Promise<Collection<string, Invite>>;
16
+ delete(code: string | Invite): Promise<void>;
17
+ }
@@ -0,0 +1,22 @@
1
+ import { Routes } from '../rest/Routes.js';
2
+ import { Invite } from '../structures/ServerAssets.js';
3
+ import { Collection } from '../util/Collection.js';
4
+ export class InviteManager {
5
+ client;
6
+ serverId;
7
+ constructor(client, serverId) {
8
+ this.client = client;
9
+ this.serverId = serverId;
10
+ }
11
+ async create(options = {}) {
12
+ const data = await this.client.rest.post(Routes.serverInvites(this.serverId), { body: options });
13
+ return new Invite(this.client, data, this.serverId);
14
+ }
15
+ async fetch() {
16
+ const list = await this.client.rest.get(Routes.serverInvites(this.serverId));
17
+ return new Collection(list.map((data) => [data.code, new Invite(this.client, data, this.serverId)]));
18
+ }
19
+ async delete(code) {
20
+ await this.client.rest.delete(Routes.serverInvite(this.serverId, typeof code === 'string' ? code : code.code));
21
+ }
22
+ }
@@ -0,0 +1,31 @@
1
+ import type { Client } from '../client/Client.js';
2
+ import { ServerMember } from '../structures/ServerMember.js';
3
+ import type { User } from '../structures/User.js';
4
+ import type { APIMember } from '../types.js';
5
+ import { Collection } from '../util/Collection.js';
6
+ import { CachedManager, type FetchOptions } from './CachedManager.js';
7
+ export interface Ban {
8
+ user: User;
9
+ reason: string | null;
10
+ createdAt: Date;
11
+ }
12
+ export declare class MemberManager extends CachedManager<ServerMember> {
13
+ readonly serverId: string;
14
+ constructor(client: Client, serverId: string);
15
+ _add(data: APIMember): ServerMember;
16
+ get me(): ServerMember | null;
17
+ fetch(): Promise<Collection<string, ServerMember>>;
18
+ fetch(userId: string, options?: FetchOptions): Promise<ServerMember>;
19
+ kick(user: string | {
20
+ id: string;
21
+ }, reason?: string): Promise<void>;
22
+ ban(user: string | {
23
+ id: string;
24
+ }, options?: {
25
+ reason?: string;
26
+ }): Promise<void>;
27
+ unban(user: string | {
28
+ id: string;
29
+ }): Promise<void>;
30
+ fetchBans(): Promise<Collection<string, Ban>>;
31
+ }
@@ -0,0 +1,58 @@
1
+ import { BaffError } from '../errors/BaffError.js';
2
+ import { Routes } from '../rest/Routes.js';
3
+ import { ServerMember } from '../structures/ServerMember.js';
4
+ import { Collection } from '../util/Collection.js';
5
+ import { CachedManager } from './CachedManager.js';
6
+ export class MemberManager extends CachedManager {
7
+ serverId;
8
+ constructor(client, serverId) {
9
+ super(client);
10
+ this.serverId = serverId;
11
+ }
12
+ _add(data) {
13
+ const user = this.client.users._add({ ...data.user, status: data.status ?? data.user.status, customStatus: data.customStatus ?? data.user.customStatus });
14
+ const existing = this.cache.get(user.id);
15
+ if (existing)
16
+ return existing._patch(data);
17
+ const member = new ServerMember(this.client, this.serverId, user, data);
18
+ this.cache.set(user.id, member);
19
+ return member;
20
+ }
21
+ get me() {
22
+ const id = this.client.user?.id;
23
+ return id ? (this.cache.get(id) ?? null) : null;
24
+ }
25
+ async fetch(userId, options = {}) {
26
+ if (userId !== undefined) {
27
+ const cached = this.cache.get(userId);
28
+ if (cached && !options.force)
29
+ return cached;
30
+ }
31
+ const list = await this.client.rest.get(Routes.serverMembers(this.serverId));
32
+ const all = new Collection();
33
+ for (const data of list)
34
+ all.set(data.user.id, this._add(data));
35
+ for (const id of this.cache.keys())
36
+ if (!all.has(id))
37
+ this.cache.delete(id);
38
+ if (userId === undefined)
39
+ return all;
40
+ const found = all.get(userId);
41
+ if (!found)
42
+ throw new BaffError('UNKNOWN_MEMBER', `User ${userId} is not a member of server ${this.serverId}.`);
43
+ return found;
44
+ }
45
+ kick(user, reason) {
46
+ return this.client.rest.delete(Routes.serverMember(this.serverId, this.resolveId(user)), { body: reason ? { reason } : undefined });
47
+ }
48
+ ban(user, options = {}) {
49
+ return this.client.rest.put(Routes.serverBan(this.serverId, this.resolveId(user)), { body: options });
50
+ }
51
+ unban(user) {
52
+ return this.client.rest.delete(Routes.serverBan(this.serverId, this.resolveId(user)));
53
+ }
54
+ async fetchBans() {
55
+ const list = await this.client.rest.get(Routes.serverBans(this.serverId));
56
+ return new Collection(list.map((b) => [b.user.id, { user: this.client.users._add(b.user), reason: b.reason, createdAt: new Date(b.createdAt) }]));
57
+ }
58
+ }