baff.js 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/CHANGELOG.md +20 -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 +45 -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 +113 -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 +41 -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 +109 -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 +58 -6
@@ -0,0 +1,57 @@
1
+ import type { Client } from '../../client/Client.js';
2
+ import { ThreadManager } from '../../managers/ThreadManager.js';
3
+ import type { MessageOptions } from '../../builders/messagePayload.js';
4
+ import type { APIChannel, APIVoiceJoin } from '../../types.js';
5
+ import { Collection } from '../../util/Collection.js';
6
+ import { BaseChannel } from './BaseChannel.js';
7
+ import { DMChannel } from './DMChannel.js';
8
+ import { TextBasedChannel } from './TextBasedChannel.js';
9
+ export declare class TextChannel extends TextBasedChannel {
10
+ contentMode: 'default' | 'spoiler' | 'age_restricted';
11
+ readonly threads: ThreadManager;
12
+ _patch(data: Partial<APIChannel>): this;
13
+ get isAnnouncement(): boolean;
14
+ get isStage(): boolean;
15
+ }
16
+ export declare class ThreadChannel extends TextBasedChannel {
17
+ ownerId: string | null;
18
+ starterId: string | null;
19
+ archived: boolean;
20
+ locked: boolean;
21
+ autoArchiveMinutes: number | null;
22
+ messageCount: number;
23
+ _patch(data: Partial<APIChannel>): this;
24
+ setArchived(archived?: boolean): Promise<this>;
25
+ setLocked(locked?: boolean): Promise<this>;
26
+ }
27
+ export declare class VoiceChannel extends BaseChannel {
28
+ voiceStatus: string | null;
29
+ _patch(data: Partial<APIChannel>): this;
30
+ join(): Promise<APIVoiceJoin>;
31
+ setVoiceStatus(status: string | null): Promise<void>;
32
+ }
33
+ export declare class CategoryChannel extends BaseChannel {
34
+ get children(): Collection<string, ServerChannel>;
35
+ }
36
+ export declare class ForumChannel extends BaseChannel {
37
+ topic: string | null;
38
+ availableTags: NonNullable<APIChannel['availableTags']>;
39
+ requireTag: boolean;
40
+ _patch(data: Partial<APIChannel>): this;
41
+ createPost(options: {
42
+ name: string;
43
+ message: string | MessageOptions;
44
+ appliedTags?: string[];
45
+ autoArchiveMinutes?: number;
46
+ }): Promise<ThreadChannel>;
47
+ fetchPosts(options?: {
48
+ sort?: 'activity' | 'created';
49
+ q?: string;
50
+ tags?: string[];
51
+ offset?: number;
52
+ limit?: number;
53
+ }): Promise<ThreadChannel[]>;
54
+ }
55
+ export type ServerChannel = TextChannel | ThreadChannel | VoiceChannel | CategoryChannel | ForumChannel;
56
+ export type Channel = ServerChannel | DMChannel;
57
+ export declare function createChannel(client: Client, data: APIChannel): Channel;
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ForumChannel = exports.CategoryChannel = exports.VoiceChannel = exports.ThreadChannel = exports.TextChannel = void 0;
4
+ exports.createChannel = createChannel;
5
+ const ThreadManager_js_1 = require("../../managers/ThreadManager.js");
6
+ const messagePayload_js_1 = require("../../builders/messagePayload.js");
7
+ const Routes_js_1 = require("../../rest/Routes.js");
8
+ const BaffError_js_1 = require("../../errors/BaffError.js");
9
+ const BaseChannel_js_1 = require("./BaseChannel.js");
10
+ const DMChannel_js_1 = require("./DMChannel.js");
11
+ const TextBasedChannel_js_1 = require("./TextBasedChannel.js");
12
+ class TextChannel extends TextBasedChannel_js_1.TextBasedChannel {
13
+ contentMode = 'default';
14
+ threads = new ThreadManager_js_1.ThreadManager(this);
15
+ _patch(data) {
16
+ super._patch(data);
17
+ if (data.contentMode !== undefined)
18
+ this.contentMode = data.contentMode;
19
+ return this;
20
+ }
21
+ get isAnnouncement() {
22
+ return this.kind === 'announcement';
23
+ }
24
+ get isStage() {
25
+ return this.kind === 'stage';
26
+ }
27
+ }
28
+ exports.TextChannel = TextChannel;
29
+ class ThreadChannel extends TextBasedChannel_js_1.TextBasedChannel {
30
+ ownerId = null;
31
+ starterId = null;
32
+ archived = false;
33
+ locked = false;
34
+ autoArchiveMinutes = null;
35
+ messageCount = 0;
36
+ _patch(data) {
37
+ super._patch(data);
38
+ if (data.threadOwnerId !== undefined)
39
+ this.ownerId = data.threadOwnerId;
40
+ if (data.threadStarterId !== undefined)
41
+ this.starterId = data.threadStarterId;
42
+ if (data.archived !== undefined)
43
+ this.archived = data.archived;
44
+ if (data.threadLocked !== undefined)
45
+ this.locked = data.threadLocked;
46
+ if (data.autoArchiveMinutes !== undefined)
47
+ this.autoArchiveMinutes = data.autoArchiveMinutes;
48
+ if (data.messageCount !== undefined)
49
+ this.messageCount = data.messageCount;
50
+ return this;
51
+ }
52
+ setArchived(archived = true) {
53
+ return this.edit({ archived });
54
+ }
55
+ setLocked(locked = true) {
56
+ return this.edit({ locked });
57
+ }
58
+ }
59
+ exports.ThreadChannel = ThreadChannel;
60
+ class VoiceChannel extends BaseChannel_js_1.BaseChannel {
61
+ voiceStatus = null;
62
+ _patch(data) {
63
+ super._patch(data);
64
+ if (data.voiceStatus !== undefined)
65
+ this.voiceStatus = data.voiceStatus;
66
+ return this;
67
+ }
68
+ join() {
69
+ return this.client.voice.join(this.id);
70
+ }
71
+ async setVoiceStatus(status) {
72
+ await this.client.rest.put(Routes_js_1.Routes.channelVoiceStatus(this.id), { body: { status } });
73
+ this.voiceStatus = status;
74
+ }
75
+ }
76
+ exports.VoiceChannel = VoiceChannel;
77
+ class CategoryChannel extends BaseChannel_js_1.BaseChannel {
78
+ get children() {
79
+ return this.client.channels.cache.filter((c) => c.parentId === this.id && c.inServer());
80
+ }
81
+ }
82
+ exports.CategoryChannel = CategoryChannel;
83
+ class ForumChannel extends BaseChannel_js_1.BaseChannel {
84
+ topic = null;
85
+ availableTags = [];
86
+ requireTag = false;
87
+ _patch(data) {
88
+ super._patch(data);
89
+ if (data.topic !== undefined)
90
+ this.topic = data.topic;
91
+ if (data.availableTags !== undefined)
92
+ this.availableTags = data.availableTags;
93
+ if (data.requireTag !== undefined)
94
+ this.requireTag = data.requireTag;
95
+ return this;
96
+ }
97
+ async createPost(options) {
98
+ const { body, files } = (0, messagePayload_js_1.resolveMessage)(options.message);
99
+ const payload = { name: options.name, appliedTags: options.appliedTags, autoArchiveMinutes: options.autoArchiveMinutes, message: body };
100
+ const data = await this.client.rest.post(Routes_js_1.Routes.channelThreads(this.id), { body: payload, files });
101
+ const post = createChannel(this.client, data);
102
+ if (!(post instanceof ThreadChannel))
103
+ throw new BaffError_js_1.BaffError('UNEXPECTED_RESPONSE', 'The server did not answer with a post.');
104
+ this.client.channels._set(post);
105
+ return post;
106
+ }
107
+ async fetchPosts(options = {}) {
108
+ const res = await this.client.rest.get(Routes_js_1.Routes.channelPosts(this.id), { query: { ...options } });
109
+ return res.posts.map((p) => {
110
+ const post = createChannel(this.client, p.channel);
111
+ this.client.channels._set(post);
112
+ return post;
113
+ });
114
+ }
115
+ }
116
+ exports.ForumChannel = ForumChannel;
117
+ function createChannel(client, data) {
118
+ const channel = construct(client, data);
119
+ channel._patch(data);
120
+ return channel;
121
+ }
122
+ function construct(client, data) {
123
+ switch (data.kind ?? data.type) {
124
+ case 'thread':
125
+ return new ThreadChannel(client, data);
126
+ case 'voice':
127
+ return new VoiceChannel(client, data);
128
+ case 'category':
129
+ return new CategoryChannel(client, data);
130
+ case 'forum':
131
+ return new ForumChannel(client, data);
132
+ case 'dm':
133
+ case 'group_dm':
134
+ return new DMChannel_js_1.DMChannel(client, data);
135
+ default:
136
+ return new TextChannel(client, data);
137
+ }
138
+ }
@@ -0,0 +1,25 @@
1
+ import type { MessageOptions } from '../../builders/messagePayload.js';
2
+ import { InteractionCollector, type InteractionCollectorOptions } from '../../collectors/InteractionCollector.js';
3
+ import { MessageCollector, type AwaitMessagesOptions, type MessageCollectorOptions } from '../../collectors/MessageCollector.js';
4
+ import { MessageManager } from '../../managers/MessageManager.js';
5
+ import type { APIChannel } from '../../types.js';
6
+ import type { Collection } from '../../util/Collection.js';
7
+ import type { MessageComponentInteraction } from '../interactions/ComponentInteraction.js';
8
+ import type { Message } from '../Message.js';
9
+ import { Webhook } from '../Webhook.js';
10
+ import { BaseChannel } from './BaseChannel.js';
11
+ export declare class TextBasedChannel extends BaseChannel {
12
+ readonly messages: MessageManager;
13
+ lastMessageId: string | null;
14
+ topic: string | null;
15
+ slowmodeSecs: number;
16
+ _patch(data: Partial<APIChannel>): this;
17
+ send(options: string | MessageOptions): Promise<Message>;
18
+ sendTyping(): Promise<void>;
19
+ createMessageCollector(options?: MessageCollectorOptions): MessageCollector;
20
+ awaitMessages(options?: AwaitMessagesOptions): Promise<Collection<string, Message>>;
21
+ createMessageComponentCollector(options?: InteractionCollectorOptions): InteractionCollector;
22
+ awaitMessageComponent(options?: InteractionCollectorOptions): Promise<MessageComponentInteraction>;
23
+ createWebhook(name: string): Promise<Webhook>;
24
+ fetchWebhooks(): Promise<Webhook[]>;
25
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TextBasedChannel = void 0;
4
+ const InteractionCollector_js_1 = require("../../collectors/InteractionCollector.js");
5
+ const MessageCollector_js_1 = require("../../collectors/MessageCollector.js");
6
+ const Collector_js_1 = require("../../collectors/Collector.js");
7
+ const MessageManager_js_1 = require("../../managers/MessageManager.js");
8
+ const Routes_js_1 = require("../../rest/Routes.js");
9
+ const Webhook_js_1 = require("../Webhook.js");
10
+ const BaseChannel_js_1 = require("./BaseChannel.js");
11
+ class TextBasedChannel extends BaseChannel_js_1.BaseChannel {
12
+ messages = new MessageManager_js_1.MessageManager(this);
13
+ lastMessageId = null;
14
+ topic = null;
15
+ slowmodeSecs = 0;
16
+ _patch(data) {
17
+ super._patch(data);
18
+ if (data.lastMessageId !== undefined)
19
+ this.lastMessageId = data.lastMessageId;
20
+ if (data.topic !== undefined)
21
+ this.topic = data.topic;
22
+ if (data.slowmodeSecs !== undefined)
23
+ this.slowmodeSecs = data.slowmodeSecs;
24
+ return this;
25
+ }
26
+ send(options) {
27
+ return this.messages.send(options);
28
+ }
29
+ async sendTyping() {
30
+ await this.client.rest.post(Routes_js_1.Routes.channelTyping(this.id));
31
+ }
32
+ createMessageCollector(options = {}) {
33
+ return new MessageCollector_js_1.MessageCollector(this, options);
34
+ }
35
+ awaitMessages(options = {}) {
36
+ return (0, Collector_js_1.awaitCollector)(this.createMessageCollector(options), options.errors);
37
+ }
38
+ createMessageComponentCollector(options = {}) {
39
+ return new InteractionCollector_js_1.InteractionCollector(this.client, { ...options, channelId: this.id });
40
+ }
41
+ async awaitMessageComponent(options = {}) {
42
+ const collected = await (0, Collector_js_1.awaitCollector)(this.createMessageComponentCollector({ ...options, max: 1 }), ['time']);
43
+ return collected.first();
44
+ }
45
+ async createWebhook(name) {
46
+ return new Webhook_js_1.Webhook(this.client, await this.client.rest.post(Routes_js_1.Routes.channelWebhooks(this.id), { body: { name } }), this.id);
47
+ }
48
+ async fetchWebhooks() {
49
+ const list = await this.client.rest.get(Routes_js_1.Routes.channelWebhooks(this.id));
50
+ return list.map((data) => new Webhook_js_1.Webhook(this.client, data, this.id));
51
+ }
52
+ }
53
+ exports.TextBasedChannel = TextBasedChannel;
@@ -0,0 +1,74 @@
1
+ import type { Client } from '../../client/Client.js';
2
+ import { type MessageOptions } from '../../builders/messagePayload.js';
3
+ import type { ModalBuilder } from '../../builders/components/ModalBuilder.js';
4
+ import type { APIInteraction } from '../../types.js';
5
+ import { PermissionsBitField } from '../../util/Permissions.js';
6
+ import { Identified } from '../Base.js';
7
+ import type { TextBasedChannel } from '../channels/TextBasedChannel.js';
8
+ import type { Message } from '../Message.js';
9
+ import type { Server } from '../Server.js';
10
+ import type { ServerMember } from '../ServerMember.js';
11
+ import type { User } from '../User.js';
12
+ import type { ButtonInteraction, ChannelSelectMenuInteraction, MentionableSelectMenuInteraction, MessageComponentInteraction, RoleSelectMenuInteraction, SelectMenuInteraction, StringSelectMenuInteraction, UserSelectMenuInteraction } from './ComponentInteraction.js';
13
+ import type { ChatInputCommandInteraction } from './CommandInteraction.js';
14
+ import type { ModalSubmitInteraction } from './ModalSubmitInteraction.js';
15
+ export interface InteractionReplyOptions extends MessageOptions {
16
+ ephemeral?: boolean;
17
+ }
18
+ type AnswerKind = 'message' | 'defer' | 'update' | 'deferUpdate' | 'modal';
19
+ export declare abstract class BaseInteraction extends Identified {
20
+ protected readonly raw: APIInteraction;
21
+ readonly id: string;
22
+ readonly token: string;
23
+ readonly applicationId: string;
24
+ readonly channelId: string;
25
+ readonly serverId: string | null;
26
+ readonly user: User;
27
+ readonly roleIds: string[];
28
+ readonly memberPermissions: PermissionsBitField | null;
29
+ readonly appPermissions: PermissionsBitField | null;
30
+ replied: boolean;
31
+ deferred: boolean;
32
+ ephemeral: boolean;
33
+ protected answeredWith: AnswerKind | null;
34
+ protected replyMessage: Message | null;
35
+ private sink;
36
+ private viaResponse;
37
+ constructor(client: Client, raw: APIInteraction);
38
+ abstract readonly commandName: string;
39
+ get fullCommandName(): string;
40
+ get channel(): TextBasedChannel;
41
+ get server(): Server | null;
42
+ get member(): ServerMember | null;
43
+ get message(): Message | null;
44
+ get responded(): boolean;
45
+ _setSink(sink: ((body: Record<string, unknown>) => void) | null): void;
46
+ isChatInputCommand(): this is ChatInputCommandInteraction;
47
+ isMessageComponent(): this is MessageComponentInteraction;
48
+ isButton(): this is ButtonInteraction;
49
+ isAnySelectMenu(): this is SelectMenuInteraction;
50
+ isStringSelectMenu(): this is StringSelectMenuInteraction;
51
+ isUserSelectMenu(): this is UserSelectMenuInteraction;
52
+ isRoleSelectMenu(): this is RoleSelectMenuInteraction;
53
+ isMentionableSelectMenu(): this is MentionableSelectMenuInteraction;
54
+ isChannelSelectMenu(): this is ChannelSelectMenuInteraction;
55
+ isModalSubmit(): this is ModalSubmitInteraction;
56
+ isRepliable(): boolean;
57
+ reply(options: string | InteractionReplyOptions): Promise<void>;
58
+ deferReply(options?: {
59
+ ephemeral?: boolean;
60
+ }): Promise<void>;
61
+ update(options: string | MessageOptions): Promise<void>;
62
+ deferUpdate(): Promise<void>;
63
+ showModal(modal: ModalBuilder | ReturnType<ModalBuilder['toJSON']>): Promise<void>;
64
+ editReply(options: string | MessageOptions): Promise<Message | void>;
65
+ followUp(options: string | InteractionReplyOptions): Promise<void>;
66
+ deleteReply(): Promise<void>;
67
+ fetchReply(): Promise<Message>;
68
+ private afterAnswer;
69
+ private callback;
70
+ private mark;
71
+ private assertFresh;
72
+ private assertFromMessage;
73
+ }
74
+ export {};
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseInteraction = void 0;
4
+ const messagePayload_js_1 = require("../../builders/messagePayload.js");
5
+ const BaffError_js_1 = require("../../errors/BaffError.js");
6
+ const Routes_js_1 = require("../../rest/Routes.js");
7
+ const Permissions_js_1 = require("../../util/Permissions.js");
8
+ const Base_js_1 = require("../Base.js");
9
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
10
+ class BaseInteraction extends Base_js_1.Identified {
11
+ raw;
12
+ id;
13
+ token;
14
+ applicationId;
15
+ channelId;
16
+ serverId;
17
+ user;
18
+ roleIds;
19
+ memberPermissions;
20
+ appPermissions;
21
+ replied = false;
22
+ deferred = false;
23
+ ephemeral = false;
24
+ answeredWith = null;
25
+ replyMessage = null;
26
+ sink = null;
27
+ viaResponse = false;
28
+ constructor(client, raw) {
29
+ super(client);
30
+ this.raw = raw;
31
+ this.id = raw.id;
32
+ this.token = raw.token;
33
+ this.applicationId = raw.applicationId;
34
+ this.channelId = raw.channelId;
35
+ this.serverId = raw.serverId;
36
+ this.user = client.users._add(raw.user);
37
+ this.roleIds = raw.user.roles ?? [];
38
+ this.memberPermissions = raw.user.permissions !== undefined ? Permissions_js_1.PermissionsBitField.fromBits(raw.user.permissions) : null;
39
+ this.appPermissions = raw.appPermissions !== undefined ? Permissions_js_1.PermissionsBitField.fromBits(raw.appPermissions) : null;
40
+ }
41
+ get fullCommandName() {
42
+ return this.commandName;
43
+ }
44
+ get channel() {
45
+ return this.client.channels._textChannel(this.channelId, this.serverId);
46
+ }
47
+ get server() {
48
+ return this.serverId ? (this.client.servers.cache.get(this.serverId) ?? null) : null;
49
+ }
50
+ get member() {
51
+ return this.server?.members.cache.get(this.user.id) ?? null;
52
+ }
53
+ get message() {
54
+ return null;
55
+ }
56
+ get responded() {
57
+ return this.replied || this.deferred;
58
+ }
59
+ _setSink(sink) {
60
+ this.sink = sink;
61
+ if (sink)
62
+ this.viaResponse = true;
63
+ }
64
+ isChatInputCommand() {
65
+ return this.raw.type === 'command';
66
+ }
67
+ isMessageComponent() {
68
+ return this.raw.type === 'component';
69
+ }
70
+ isButton() {
71
+ return this.isMessageComponent() && this.raw.data.componentType === 2;
72
+ }
73
+ isAnySelectMenu() {
74
+ return this.isMessageComponent() && [3, 5, 6, 7, 8].includes(this.raw.data.componentType ?? 0);
75
+ }
76
+ isStringSelectMenu() {
77
+ return this.isMessageComponent() && this.raw.data.componentType === 3;
78
+ }
79
+ isUserSelectMenu() {
80
+ return this.isMessageComponent() && this.raw.data.componentType === 5;
81
+ }
82
+ isRoleSelectMenu() {
83
+ return this.isMessageComponent() && this.raw.data.componentType === 6;
84
+ }
85
+ isMentionableSelectMenu() {
86
+ return this.isMessageComponent() && this.raw.data.componentType === 7;
87
+ }
88
+ isChannelSelectMenu() {
89
+ return this.isMessageComponent() && this.raw.data.componentType === 8;
90
+ }
91
+ isModalSubmit() {
92
+ return this.raw.type === 'modal_submit';
93
+ }
94
+ isRepliable() {
95
+ return true;
96
+ }
97
+ async reply(options) {
98
+ this.assertFresh();
99
+ const { body, files } = (0, messagePayload_js_1.resolveMessage)(options, { allowEphemeral: true });
100
+ if (files.length)
101
+ throw new BaffError_js_1.BaffError('INVALID_MESSAGE', 'Interaction answers cannot carry files. Send the files with channel.send or after a defer.');
102
+ await this.callback({ type: 'message', ...body });
103
+ this.mark('message', typeof options === 'object' && options.ephemeral === true);
104
+ }
105
+ async deferReply(options = {}) {
106
+ this.assertFresh();
107
+ await this.callback({ type: 'defer' });
108
+ this.mark('defer', options.ephemeral === true);
109
+ }
110
+ async update(options) {
111
+ this.assertFresh();
112
+ this.assertFromMessage();
113
+ const { body } = (0, messagePayload_js_1.resolveMessage)(options);
114
+ await this.callback({ type: 'update', ...body });
115
+ this.mark('update', false);
116
+ }
117
+ async deferUpdate() {
118
+ this.assertFresh();
119
+ this.assertFromMessage();
120
+ await this.callback({ type: 'deferUpdate' });
121
+ this.mark('deferUpdate', false);
122
+ }
123
+ async showModal(modal) {
124
+ this.assertFresh();
125
+ if (this.isModalSubmit())
126
+ throw new BaffError_js_1.BaffError('INVALID_INTERACTION', 'A modal submit cannot be answered with another modal.');
127
+ await this.callback({ type: 'modal', ...('toJSON' in modal ? modal.toJSON() : modal) });
128
+ this.mark('modal', false);
129
+ }
130
+ async editReply(options) {
131
+ if (!this.responded)
132
+ throw new BaffError_js_1.BaffError('INTERACTION_NOT_REPLIED', 'Reply to or defer the interaction before editing its reply.');
133
+ if (this.answeredWith === 'update' || this.answeredWith === 'deferUpdate') {
134
+ const { body } = (0, messagePayload_js_1.resolveMessage)(options);
135
+ await this.afterAnswer(() => this.client.rest.patch(Routes_js_1.Routes.interactionOriginal(this.id, this.token), { body, auth: false }));
136
+ return;
137
+ }
138
+ if (this.answeredWith === 'defer' && this.deferred) {
139
+ const { body, files } = (0, messagePayload_js_1.resolveMessage)(options, { allowEphemeral: true });
140
+ await this.afterAnswer(() => this.client.rest.post(Routes_js_1.Routes.interactionFollowup(this.id, this.token), { body: { ...body, ephemeral: this.ephemeral }, files, auth: false }));
141
+ this.deferred = false;
142
+ this.replied = true;
143
+ return;
144
+ }
145
+ if (this.ephemeral)
146
+ throw new BaffError_js_1.BaffError('CANNOT_EDIT_REPLY', 'baff.gg cannot edit an ephemeral reply after it was sent. Send a new follow-up or answer with update on a component.');
147
+ return (await this.fetchReply()).edit(options);
148
+ }
149
+ async followUp(options) {
150
+ if (!this.responded)
151
+ throw new BaffError_js_1.BaffError('INTERACTION_NOT_REPLIED', 'Reply to or defer the interaction before sending a follow-up.');
152
+ const { body, files } = (0, messagePayload_js_1.resolveMessage)(options, { allowEphemeral: true });
153
+ await this.afterAnswer(() => this.client.rest.post(Routes_js_1.Routes.interactionFollowup(this.id, this.token), { body, files, auth: false }));
154
+ if (this.deferred) {
155
+ this.deferred = false;
156
+ this.replied = true;
157
+ }
158
+ }
159
+ async deleteReply() {
160
+ if (this.ephemeral)
161
+ throw new BaffError_js_1.BaffError('CANNOT_DELETE_REPLY', 'baff.gg cannot delete an ephemeral reply.');
162
+ await (await this.fetchReply()).delete();
163
+ this.replyMessage = null;
164
+ }
165
+ async fetchReply() {
166
+ if (this.replyMessage)
167
+ return this.replyMessage;
168
+ if (!this.replied)
169
+ throw new BaffError_js_1.BaffError('INTERACTION_NOT_REPLIED', 'There is no reply yet.');
170
+ if (this.ephemeral)
171
+ throw new BaffError_js_1.BaffError('CANNOT_FETCH_REPLY', 'Ephemeral replies are not stored, so they cannot be fetched.');
172
+ const self = await this.client.fetchSelf();
173
+ for (let attempt = 0; attempt < (this.viaResponse ? 20 : 3); attempt++) {
174
+ const list = await this.client.rest.get(Routes_js_1.Routes.channelMessages(this.channelId), { query: { after: this.id, limit: 25 } });
175
+ const found = list.find((m) => m.author.id === self.id && m.interaction?.name === this.fullCommandName && m.interaction.user.id === this.user.id);
176
+ if (found)
177
+ return (this.replyMessage = this.channel.messages._add({ serverId: this.serverId, ...found }));
178
+ await sleep(this.viaResponse ? 100 : 150);
179
+ }
180
+ throw new BaffError_js_1.BaffError('REPLY_NOT_FOUND', 'Could not find the reply message in this channel.');
181
+ }
182
+ async afterAnswer(request) {
183
+ for (let attempt = 0;; attempt++) {
184
+ try {
185
+ return await request();
186
+ }
187
+ catch (error) {
188
+ const early = error instanceof BaffError_js_1.BaffAPIError && error.code === 'not_answered';
189
+ if (!early || !this.viaResponse || attempt >= 20)
190
+ throw error;
191
+ await sleep(100);
192
+ }
193
+ }
194
+ }
195
+ async callback(body) {
196
+ if (this.sink) {
197
+ const sink = this.sink;
198
+ this.sink = null;
199
+ sink(body);
200
+ return;
201
+ }
202
+ await this.client.rest.post(Routes_js_1.Routes.interactionCallback(this.id, this.token), { body, auth: false });
203
+ }
204
+ mark(kind, ephemeral) {
205
+ this.answeredWith = kind;
206
+ this.ephemeral = ephemeral;
207
+ if (kind === 'defer')
208
+ this.deferred = true;
209
+ else
210
+ this.replied = true;
211
+ }
212
+ assertFresh() {
213
+ if (this.responded)
214
+ throw new BaffError_js_1.BaffError('INTERACTION_ALREADY_REPLIED', 'This interaction was already answered. Use followUp or editReply.');
215
+ }
216
+ assertFromMessage() {
217
+ if (!this.raw.message)
218
+ throw new BaffError_js_1.BaffError('INVALID_INTERACTION', 'Only interactions from a component can update a message.');
219
+ }
220
+ }
221
+ exports.BaseInteraction = BaseInteraction;
@@ -0,0 +1,44 @@
1
+ import type { Client } from '../../client/Client.js';
2
+ import type { APIInteraction, APIInteractionOption } from '../../types.js';
3
+ import type { Role } from '../Role.js';
4
+ import type { User } from '../User.js';
5
+ import type { Channel } from '../channels/ServerChannels.js';
6
+ import { BaseInteraction } from './BaseInteraction.js';
7
+ export declare class CommandInteractionOptions {
8
+ private readonly client;
9
+ private readonly serverId;
10
+ readonly data: APIInteractionOption[];
11
+ readonly subcommandGroup: string | null;
12
+ readonly subcommand: string | null;
13
+ private readonly values;
14
+ constructor(client: Client, serverId: string | null, options?: APIInteractionOption[]);
15
+ get(name: string, required?: boolean): APIInteractionOption | null;
16
+ getSubcommand(required?: boolean): string | null;
17
+ getSubcommandGroup(required?: boolean): string | null;
18
+ getString(name: string, required: true): string;
19
+ getString(name: string, required?: boolean): string | null;
20
+ getInteger(name: string, required: true): number;
21
+ getInteger(name: string, required?: boolean): number | null;
22
+ getNumber(name: string, required: true): number;
23
+ getNumber(name: string, required?: boolean): number | null;
24
+ getBoolean(name: string, required: true): boolean;
25
+ getBoolean(name: string, required?: boolean): boolean | null;
26
+ getUserId(name: string, required: true): string;
27
+ getUserId(name: string, required?: boolean): string | null;
28
+ getRoleId(name: string, required: true): string;
29
+ getRoleId(name: string, required?: boolean): string | null;
30
+ getChannelId(name: string, required: true): string;
31
+ getChannelId(name: string, required?: boolean): string | null;
32
+ getUser(name: string): User | null;
33
+ fetchUser(name: string): Promise<User | null>;
34
+ getRole(name: string): Role | null;
35
+ getChannel(name: string): Channel | null;
36
+ private typed;
37
+ }
38
+ export declare class ChatInputCommandInteraction extends BaseInteraction {
39
+ readonly commandId: string;
40
+ readonly commandName: string;
41
+ readonly options: CommandInteractionOptions;
42
+ constructor(client: Client, raw: APIInteraction);
43
+ get fullCommandName(): string;
44
+ }