oceanic.js 1.10.1-dev.97cef9c → 1.10.1-dev.9b37972

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 (204) hide show
  1. package/dist/package.json +5 -5
  2. package/esm.mjs +2 -0
  3. package/package.json +5 -5
  4. package/dist/lib/Client.d.ts +0 -91
  5. package/dist/lib/Client.js +0 -254
  6. package/dist/lib/Constants.d.ts +0 -1121
  7. package/dist/lib/Constants.js +0 -1401
  8. package/dist/lib/gateway/Shard.d.ts +0 -77
  9. package/dist/lib/gateway/Shard.js +0 -1582
  10. package/dist/lib/gateway/ShardManager.d.ts +0 -26
  11. package/dist/lib/gateway/ShardManager.js +0 -304
  12. package/dist/lib/index.d.ts +0 -83
  13. package/dist/lib/index.js +0 -166
  14. package/dist/lib/rest/Bucket.d.ts +0 -33
  15. package/dist/lib/rest/Bucket.js +0 -78
  16. package/dist/lib/rest/DiscordHTTPError.d.ts +0 -16
  17. package/dist/lib/rest/DiscordHTTPError.js +0 -65
  18. package/dist/lib/rest/DiscordRESTError.d.ts +0 -19
  19. package/dist/lib/rest/DiscordRESTError.js +0 -89
  20. package/dist/lib/rest/OAuthHelper.d.ts +0 -60
  21. package/dist/lib/rest/OAuthHelper.js +0 -180
  22. package/dist/lib/rest/RESTManager.d.ts +0 -42
  23. package/dist/lib/rest/RESTManager.js +0 -82
  24. package/dist/lib/rest/RequestHandler.d.ts +0 -28
  25. package/dist/lib/rest/RequestHandler.js +0 -313
  26. package/dist/lib/rest/SequentialBucket.d.ts +0 -25
  27. package/dist/lib/rest/SequentialBucket.js +0 -76
  28. package/dist/lib/routes/Applications.d.ts +0 -171
  29. package/dist/lib/routes/Applications.js +0 -447
  30. package/dist/lib/routes/Channels.d.ts +0 -391
  31. package/dist/lib/routes/Channels.js +0 -1107
  32. package/dist/lib/routes/Guilds.d.ts +0 -606
  33. package/dist/lib/routes/Guilds.js +0 -1669
  34. package/dist/lib/routes/Interactions.d.ts +0 -74
  35. package/dist/lib/routes/Interactions.js +0 -141
  36. package/dist/lib/routes/Miscellaneous.d.ts +0 -25
  37. package/dist/lib/routes/Miscellaneous.js +0 -54
  38. package/dist/lib/routes/OAuth.d.ts +0 -105
  39. package/dist/lib/routes/OAuth.js +0 -309
  40. package/dist/lib/routes/Users.d.ts +0 -32
  41. package/dist/lib/routes/Users.js +0 -59
  42. package/dist/lib/routes/Webhooks.d.ts +0 -128
  43. package/dist/lib/routes/Webhooks.js +0 -264
  44. package/dist/lib/structures/AnnouncementChannel.d.ts +0 -36
  45. package/dist/lib/structures/AnnouncementChannel.js +0 -47
  46. package/dist/lib/structures/AnnouncementThreadChannel.d.ts +0 -18
  47. package/dist/lib/structures/AnnouncementThreadChannel.js +0 -27
  48. package/dist/lib/structures/Application.d.ts +0 -68
  49. package/dist/lib/structures/Application.js +0 -178
  50. package/dist/lib/structures/ApplicationCommand.d.ts +0 -74
  51. package/dist/lib/structures/ApplicationCommand.js +0 -141
  52. package/dist/lib/structures/Attachment.d.ts +0 -34
  53. package/dist/lib/structures/Attachment.js +0 -64
  54. package/dist/lib/structures/AuditLogEntry.d.ts +0 -25
  55. package/dist/lib/structures/AuditLogEntry.js +0 -53
  56. package/dist/lib/structures/AutoModerationRule.d.ts +0 -49
  57. package/dist/lib/structures/AutoModerationRule.js +0 -139
  58. package/dist/lib/structures/AutocompleteInteraction.d.ts +0 -62
  59. package/dist/lib/structures/AutocompleteInteraction.js +0 -115
  60. package/dist/lib/structures/Base.d.ts +0 -20
  61. package/dist/lib/structures/Base.js +0 -58
  62. package/dist/lib/structures/BaseEntitlement.d.ts +0 -19
  63. package/dist/lib/structures/BaseEntitlement.js +0 -44
  64. package/dist/lib/structures/CategoryChannel.d.ts +0 -41
  65. package/dist/lib/structures/CategoryChannel.js +0 -105
  66. package/dist/lib/structures/Channel.d.ts +0 -20
  67. package/dist/lib/structures/Channel.js +0 -91
  68. package/dist/lib/structures/ClientApplication.d.ts +0 -153
  69. package/dist/lib/structures/ClientApplication.js +0 -220
  70. package/dist/lib/structures/CommandInteraction.d.ts +0 -127
  71. package/dist/lib/structures/CommandInteraction.js +0 -297
  72. package/dist/lib/structures/ComponentInteraction.d.ts +0 -137
  73. package/dist/lib/structures/ComponentInteraction.js +0 -311
  74. package/dist/lib/structures/Entitlement.d.ts +0 -12
  75. package/dist/lib/structures/Entitlement.js +0 -26
  76. package/dist/lib/structures/ExtendedUser.d.ts +0 -26
  77. package/dist/lib/structures/ExtendedUser.js +0 -57
  78. package/dist/lib/structures/ForumChannel.d.ts +0 -11
  79. package/dist/lib/structures/ForumChannel.js +0 -19
  80. package/dist/lib/structures/GroupChannel.d.ts +0 -62
  81. package/dist/lib/structures/GroupChannel.js +0 -133
  82. package/dist/lib/structures/Guild.d.ts +0 -654
  83. package/dist/lib/structures/Guild.js +0 -1319
  84. package/dist/lib/structures/GuildChannel.d.ts +0 -34
  85. package/dist/lib/structures/GuildChannel.js +0 -75
  86. package/dist/lib/structures/GuildPreview.d.ts +0 -50
  87. package/dist/lib/structures/GuildPreview.js +0 -119
  88. package/dist/lib/structures/GuildScheduledEvent.d.ts +0 -60
  89. package/dist/lib/structures/GuildScheduledEvent.js +0 -154
  90. package/dist/lib/structures/GuildTemplate.d.ts +0 -55
  91. package/dist/lib/structures/GuildTemplate.js +0 -126
  92. package/dist/lib/structures/Integration.d.ts +0 -54
  93. package/dist/lib/structures/Integration.js +0 -156
  94. package/dist/lib/structures/Interaction.d.ts +0 -40
  95. package/dist/lib/structures/Interaction.js +0 -91
  96. package/dist/lib/structures/InteractionResolvedChannel.d.ts +0 -28
  97. package/dist/lib/structures/InteractionResolvedChannel.js +0 -45
  98. package/dist/lib/structures/Invite.d.ts +0 -64
  99. package/dist/lib/structures/Invite.js +0 -193
  100. package/dist/lib/structures/InviteGuild.d.ts +0 -52
  101. package/dist/lib/structures/InviteGuild.js +0 -88
  102. package/dist/lib/structures/MediaChannel.d.ts +0 -11
  103. package/dist/lib/structures/MediaChannel.js +0 -19
  104. package/dist/lib/structures/Member.d.ts +0 -122
  105. package/dist/lib/structures/Member.js +0 -255
  106. package/dist/lib/structures/Message.d.ts +0 -183
  107. package/dist/lib/structures/Message.js +0 -455
  108. package/dist/lib/structures/ModalSubmitInteraction.d.ts +0 -128
  109. package/dist/lib/structures/ModalSubmitInteraction.js +0 -240
  110. package/dist/lib/structures/OAuthApplication.d.ts +0 -79
  111. package/dist/lib/structures/OAuthApplication.js +0 -210
  112. package/dist/lib/structures/OAuthGuild.d.ts +0 -35
  113. package/dist/lib/structures/OAuthGuild.js +0 -61
  114. package/dist/lib/structures/PartialApplication.d.ts +0 -30
  115. package/dist/lib/structures/PartialApplication.js +0 -67
  116. package/dist/lib/structures/Permission.d.ts +0 -21
  117. package/dist/lib/structures/Permission.js +0 -68
  118. package/dist/lib/structures/PermissionOverwrite.d.ts +0 -26
  119. package/dist/lib/structures/PermissionOverwrite.js +0 -49
  120. package/dist/lib/structures/PingInteraction.d.ts +0 -16
  121. package/dist/lib/structures/PingInteraction.js +0 -26
  122. package/dist/lib/structures/PrivateChannel.d.ts +0 -90
  123. package/dist/lib/structures/PrivateChannel.js +0 -131
  124. package/dist/lib/structures/PrivateThreadChannel.d.ts +0 -18
  125. package/dist/lib/structures/PrivateThreadChannel.js +0 -27
  126. package/dist/lib/structures/PublicThreadChannel.d.ts +0 -21
  127. package/dist/lib/structures/PublicThreadChannel.js +0 -37
  128. package/dist/lib/structures/Role.d.ts +0 -50
  129. package/dist/lib/structures/Role.js +0 -131
  130. package/dist/lib/structures/SKU.d.ts +0 -32
  131. package/dist/lib/structures/SKU.js +0 -53
  132. package/dist/lib/structures/StageChannel.d.ts +0 -33
  133. package/dist/lib/structures/StageChannel.js +0 -44
  134. package/dist/lib/structures/StageInstance.d.ts +0 -36
  135. package/dist/lib/structures/StageInstance.js +0 -94
  136. package/dist/lib/structures/Team.d.ts +0 -22
  137. package/dist/lib/structures/Team.js +0 -67
  138. package/dist/lib/structures/TestEntitlement.d.ts +0 -10
  139. package/dist/lib/structures/TestEntitlement.js +0 -21
  140. package/dist/lib/structures/TextChannel.d.ts +0 -34
  141. package/dist/lib/structures/TextChannel.js +0 -46
  142. package/dist/lib/structures/TextableChannel.d.ts +0 -158
  143. package/dist/lib/structures/TextableChannel.js +0 -276
  144. package/dist/lib/structures/TextableVoiceChannel.d.ts +0 -39
  145. package/dist/lib/structures/TextableVoiceChannel.js +0 -81
  146. package/dist/lib/structures/ThreadChannel.d.ts +0 -159
  147. package/dist/lib/structures/ThreadChannel.js +0 -295
  148. package/dist/lib/structures/ThreadOnlyChannel.d.ts +0 -99
  149. package/dist/lib/structures/ThreadOnlyChannel.js +0 -233
  150. package/dist/lib/structures/ThreadableChannel.d.ts +0 -36
  151. package/dist/lib/structures/ThreadableChannel.js +0 -58
  152. package/dist/lib/structures/UnavailableGuild.d.ts +0 -11
  153. package/dist/lib/structures/UnavailableGuild.js +0 -21
  154. package/dist/lib/structures/User.d.ts +0 -82
  155. package/dist/lib/structures/User.js +0 -168
  156. package/dist/lib/structures/VoiceChannel.d.ts +0 -20
  157. package/dist/lib/structures/VoiceChannel.js +0 -35
  158. package/dist/lib/structures/VoiceState.d.ts +0 -51
  159. package/dist/lib/structures/VoiceState.js +0 -140
  160. package/dist/lib/structures/Webhook.d.ts +0 -129
  161. package/dist/lib/structures/Webhook.js +0 -206
  162. package/dist/lib/types/applications.d.ts +0 -448
  163. package/dist/lib/types/audit-log.d.ts +0 -121
  164. package/dist/lib/types/auto-moderation.d.ts +0 -99
  165. package/dist/lib/types/channels.d.ts +0 -1150
  166. package/dist/lib/types/client.d.ts +0 -228
  167. package/dist/lib/types/events.d.ts +0 -260
  168. package/dist/lib/types/gateway-raw.d.ts +0 -567
  169. package/dist/lib/types/gateway.d.ts +0 -338
  170. package/dist/lib/types/guild-template.d.ts +0 -33
  171. package/dist/lib/types/guilds.d.ts +0 -854
  172. package/dist/lib/types/index.d.ts +0 -18
  173. package/dist/lib/types/interactions.d.ts +0 -376
  174. package/dist/lib/types/json.d.ts +0 -709
  175. package/dist/lib/types/misc.d.ts +0 -13
  176. package/dist/lib/types/oauth.d.ts +0 -201
  177. package/dist/lib/types/request-handler.d.ts +0 -52
  178. package/dist/lib/types/scheduled-events.d.ts +0 -88
  179. package/dist/lib/types/shared.d.ts +0 -9
  180. package/dist/lib/types/users.d.ts +0 -45
  181. package/dist/lib/types/voice.d.ts +0 -45
  182. package/dist/lib/types/webhooks.d.ts +0 -73
  183. package/dist/lib/util/Collection.d.ts +0 -47
  184. package/dist/lib/util/Collection.js +0 -78
  185. package/dist/lib/util/Errors.d.ts +0 -29
  186. package/dist/lib/util/Errors.js +0 -56
  187. package/dist/lib/util/Routes.d.ts +0 -124
  188. package/dist/lib/util/Routes.js +0 -243
  189. package/dist/lib/util/SimpleCollection.d.ts +0 -12
  190. package/dist/lib/util/SimpleCollection.js +0 -81
  191. package/dist/lib/util/TypedCollection.d.ts +0 -24
  192. package/dist/lib/util/TypedCollection.js +0 -76
  193. package/dist/lib/util/TypedEmitter.d.ts +0 -19
  194. package/dist/lib/util/TypedEmitter.js +0 -19
  195. package/dist/lib/util/Util.d.ts +0 -52
  196. package/dist/lib/util/Util.js +0 -469
  197. package/dist/lib/util/interactions/InteractionOptionsWrapper.d.ts +0 -170
  198. package/dist/lib/util/interactions/InteractionOptionsWrapper.js +0 -213
  199. package/dist/lib/util/interactions/MessageInteractionResponse.d.ts +0 -24
  200. package/dist/lib/util/interactions/MessageInteractionResponse.js +0 -28
  201. package/dist/lib/util/interactions/ModalSubmitInteractionComponentsWrapper.d.ts +0 -24
  202. package/dist/lib/util/interactions/ModalSubmitInteractionComponentsWrapper.js +0 -34
  203. package/dist/lib/util/interactions/SelectMenuValuesWrapper.d.ts +0 -60
  204. package/dist/lib/util/interactions/SelectMenuValuesWrapper.js +0 -124
@@ -1,1107 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const Routes = tslib_1.__importStar(require("../util/Routes"));
5
- const Invite_1 = tslib_1.__importDefault(require("../structures/Invite"));
6
- const StageInstance_1 = tslib_1.__importDefault(require("../structures/StageInstance"));
7
- /** Various methods for interacting with channels. Located at {@link Client#rest | Client#rest}{@link RESTManager#channels | .channels}. */
8
- class Channels {
9
- #manager;
10
- constructor(manager) {
11
- this.#manager = manager;
12
- }
13
- /**
14
- * Add a user to a group channel.
15
- * @param groupID The ID of the group to add the user to.
16
- * @param options The options for adding the recipient.
17
- * @caching This method **does not** cache its result.
18
- */
19
- async addGroupRecipient(groupID, options) {
20
- await this.#manager.authRequest({
21
- method: "PUT",
22
- path: Routes.GROUP_RECIPIENT(groupID, options.userID),
23
- json: {
24
- access_token: options.accessToken,
25
- nick: options.nick
26
- }
27
- });
28
- }
29
- /**
30
- * Add a member to a thread.
31
- * @param channelID The ID of the thread to add them to.
32
- * @param userID The ID of the user to add to the thread.
33
- * @caching This method **does not** cache its result.
34
- */
35
- async addThreadMember(channelID, userID) {
36
- await this.#manager.authRequest({
37
- method: "PUT",
38
- path: Routes.CHANNEL_THREAD_MEMBER(channelID, userID)
39
- });
40
- }
41
- /**
42
- * Create a direct message. This will not create a new channel if you have already started a dm with the user.
43
- * @param recipient The ID of the recipient of the direct message.
44
- * @caching This method **does** cache its result.
45
- * @caches {@link Client#privateChannels | Client#privateChannels}
46
- */
47
- async createDM(recipient) {
48
- let cache;
49
- if ((cache = this.#manager.client.privateChannels.find(ch => ch.recipient.id === recipient))) {
50
- return cache;
51
- }
52
- return this.#manager.authRequest({
53
- method: "POST",
54
- path: Routes.OAUTH_CHANNELS,
55
- json: { recipient_id: recipient }
56
- }).then(data => this.#manager.client.privateChannels.update(data));
57
- }
58
- /**
59
- * Create a group dm.
60
- * @param options The options for creating the group dm.
61
- * @caching This method **does** cache its result.
62
- * @caches {@link Client#groupChannels | Client#groupChannels}
63
- */
64
- async createGroupDM(options) {
65
- return this.#manager.authRequest({
66
- method: "POST",
67
- path: Routes.OAUTH_CHANNELS,
68
- json: {
69
- access_tokens: options.accessTokens,
70
- nicks: options.nicks
71
- }
72
- }).then(data => this.#manager.client.groupChannels.update(data));
73
- }
74
- /**
75
- * Create an invite for a channel. If the guild is not a `COMMUNITY` server, invites can only be made to last 30 days.
76
- * @param channelID The ID of the channel to create an invite for.
77
- * @param options The options for creating the invite.
78
- * @caching This method **does not** cache its result.
79
- */
80
- async createInvite(channelID, options) {
81
- const reason = options.reason;
82
- if (options.reason) {
83
- delete options.reason;
84
- }
85
- return this.#manager.authRequest({
86
- method: "POST",
87
- path: Routes.CHANNEL_INVITES(channelID),
88
- json: {
89
- max_age: options.maxAge,
90
- max_uses: options.maxUses,
91
- target_application_id: options.targetApplicationID,
92
- target_type: options.targetType,
93
- target_user_id: options.targetUserID,
94
- temporary: options.temporary,
95
- unique: options.unique
96
- },
97
- reason
98
- }).then(data => new Invite_1.default(data, this.#manager.client));
99
- }
100
- /**
101
- * Create a message in a channel.
102
- * @param channelID The ID of the channel to create the message in.
103
- * @param options The options for creating the message.
104
- * @caching This method **may** cache its result. The result will not be cached if the channel is not cached.
105
- * @caches {@link TextableChannel#messages | TextableChannel#messages}<br>{@link ThreadChannel#messages | ThreadChannel#messages}<br>{@link PrivateChannel#messages | PrivateChannel#messages}
106
- */
107
- async createMessage(channelID, options) {
108
- const files = options.files;
109
- if (options.files) {
110
- delete options.files;
111
- }
112
- return this.#manager.authRequest({
113
- method: "POST",
114
- path: Routes.CHANNEL_MESSAGES(channelID),
115
- json: {
116
- allowed_mentions: this.#manager.client.util.formatAllowedMentions(options.allowedMentions),
117
- attachments: options.attachments,
118
- components: options.components ? this.#manager.client.util.componentsToRaw(options.components) : undefined,
119
- content: options.content,
120
- embeds: options.embeds ? this.#manager.client.util.embedsToRaw(options.embeds) : undefined,
121
- flags: options.flags,
122
- sticker_ids: options.stickerIDs,
123
- message_reference: options.messageReference ? {
124
- channel_id: options.messageReference.channelID,
125
- fail_if_not_exists: options.messageReference.failIfNotExists,
126
- guild_id: options.messageReference.guildID,
127
- message_id: options.messageReference.messageID
128
- } : undefined,
129
- tts: options.tts
130
- },
131
- files
132
- }).then(data => this.#manager.client.util.updateMessage(data));
133
- }
134
- /**
135
- * Add a reaction to a message.
136
- * @param channelID The ID of the channel the message is in.
137
- * @param messageID The ID of the message to add a reaction to.
138
- * @param emoji The reaction to add to the message. `name:id` for custom emojis, and the unicode codepoint for default emojis.
139
- * @caching This method **does not** cache its result.
140
- */
141
- async createReaction(channelID, messageID, emoji) {
142
- if (emoji === decodeURIComponent(emoji)) {
143
- emoji = encodeURIComponent(emoji);
144
- }
145
- await this.#manager.authRequest({
146
- method: "PUT",
147
- path: Routes.CHANNEL_REACTION_USER(channelID, messageID, emoji, "@me")
148
- });
149
- }
150
- /**
151
- * Create a stage instance.
152
- * @param channelID The ID of the channel to create the stage instance on.
153
- * @param options The options for creating the stage instance.
154
- * @caching This method **does not** cache its result.
155
- */
156
- async createStageInstance(channelID, options) {
157
- const reason = options.reason;
158
- if (options.reason) {
159
- delete options.reason;
160
- }
161
- return this.#manager.authRequest({
162
- method: "POST",
163
- path: Routes.STAGE_INSTANCES,
164
- json: {
165
- channel_id: channelID,
166
- topic: options.topic,
167
- privacy_level: options.privacyLevel,
168
- send_start_notification: options.sendStartNotification
169
- },
170
- reason
171
- }).then(data => new StageInstance_1.default(data, this.#manager.client));
172
- }
173
- /**
174
- * Crosspost a message in an announcement channel.
175
- * @param channelID The ID of the channel to crosspost the message in.
176
- * @param messageID The ID of the message to crosspost.
177
- * @caching This method **may** cache its result. The result will not be cached if the channel is not cached.
178
- * @caches {@link TextableChannel#messages | TextableChannel#messages}<br>{@link ThreadChannel#messages | ThreadChannel#messages}<br>{@link PrivateChannel#messages | PrivateChannel#messages}
179
- */
180
- async crosspostMessage(channelID, messageID) {
181
- return this.#manager.authRequest({
182
- method: "POST",
183
- path: Routes.CHANNEL_MESSAGES_CROSSPOST(channelID, messageID)
184
- }).then(data => this.#manager.client.util.updateMessage(data));
185
- }
186
- /**
187
- * Delete or close a channel.
188
- * @param channelID The ID of the channel to delete or close.
189
- * @param reason The reason to be displayed in the audit log.
190
- * @caching This method **does not** cache its result.
191
- */
192
- async delete(channelID, reason) {
193
- await this.#manager.authRequest({
194
- method: "DELETE",
195
- path: Routes.CHANNEL(channelID),
196
- reason
197
- });
198
- }
199
- /**
200
- * Delete an invite.
201
- * @param code The code of the invite to delete.
202
- * @param reason The reason for deleting the invite.
203
- * @caching This method **does not** cache its result.
204
- */
205
- async deleteInvite(code, reason) {
206
- return this.#manager.authRequest({
207
- method: "DELETE",
208
- path: Routes.INVITE(code),
209
- reason
210
- }).then(data => new Invite_1.default(data, this.#manager.client));
211
- }
212
- /**
213
- * Delete a message.
214
- * @param channelID The ID of the channel to delete the message in.
215
- * @param messageID The ID of the message to delete.
216
- * @param reason The reason for deleting the message.
217
- * @caching This method **does not** cache its result.
218
- */
219
- async deleteMessage(channelID, messageID, reason) {
220
- await this.#manager.authRequest({
221
- method: "DELETE",
222
- path: Routes.CHANNEL_MESSAGE(channelID, messageID),
223
- reason
224
- });
225
- }
226
- /**
227
- * Bulk delete messages.
228
- * @param channelID The ID of the channel to delete the messages in.
229
- * @param messageIDs The IDs of the messages to delete. Any duplicates or messages older than two weeks will cause an error.
230
- * @param reason The reason for deleting the messages.
231
- * @caching This method **does not** cache its result.
232
- */
233
- async deleteMessages(channelID, messageIDs, reason) {
234
- const chunks = [];
235
- messageIDs = Array.from(messageIDs);
236
- const amountOfMessages = messageIDs.length;
237
- while (messageIDs.length !== 0) {
238
- chunks.push(messageIDs.splice(0, 100));
239
- }
240
- let done = 0;
241
- for (const chunk of chunks.values()) {
242
- if (chunks.length > 1) {
243
- const left = amountOfMessages - done;
244
- this.#manager.client.emit("debug", `Deleting ${left} messages in ${channelID}`);
245
- }
246
- if (chunk.length === 1) {
247
- this.#manager.client.emit("debug", "deleteMessages created a chunk with only 1 element, using deleteMessage instead.");
248
- await this.deleteMessage(channelID, chunk[0], reason);
249
- continue;
250
- }
251
- await this.#manager.authRequest({
252
- method: "POST",
253
- path: Routes.CHANNEL_BULK_DELETE_MESSAGES(channelID),
254
- json: { messages: chunk },
255
- reason
256
- });
257
- done += chunk.length;
258
- }
259
- return amountOfMessages;
260
- }
261
- /**
262
- * Delete a permission overwrite.
263
- * @param channelID The ID of the channel to delete the permission overwrite in.
264
- * @param overwriteID The ID of the permission overwrite to delete.
265
- * @param reason The reason for deleting the permission overwrite.
266
- * @caching This method **does not** cache its result.
267
- */
268
- async deletePermission(channelID, overwriteID, reason) {
269
- await this.#manager.authRequest({
270
- method: "DELETE",
271
- path: Routes.CHANNEL_PERMISSION(channelID, overwriteID),
272
- reason
273
- });
274
- }
275
- /**
276
- * Remove a reaction from a message.
277
- * @param channelID The ID of the channel the message is in.
278
- * @param messageID The ID of the message to remove a reaction from.
279
- * @param emoji The reaction to remove from the message. `name:id` for custom emojis, and the unicode codepoint for default emojis.
280
- * @param user The user to remove the reaction from, `@me` for the current user (default).
281
- * @caching This method **does not** cache its result.
282
- */
283
- async deleteReaction(channelID, messageID, emoji, user = "@me") {
284
- if (emoji === decodeURIComponent(emoji)) {
285
- emoji = encodeURIComponent(emoji);
286
- }
287
- await this.#manager.authRequest({
288
- method: "DELETE",
289
- path: Routes.CHANNEL_REACTION_USER(channelID, messageID, emoji, user)
290
- });
291
- }
292
- /**
293
- * Remove all, or a specific emoji's reactions from a message.
294
- * @param channelID The ID of the channel the message is in.
295
- * @param messageID The ID of the message to remove reactions from.
296
- * @param emoji The reaction to remove from the message. `name:id` for custom emojis, and the unicode codepoint for default emojis. Omit to remove all reactions.
297
- * @caching This method **does not** cache its result.
298
- */
299
- async deleteReactions(channelID, messageID, emoji) {
300
- if (emoji && emoji === decodeURIComponent(emoji)) {
301
- emoji = encodeURIComponent(emoji);
302
- }
303
- await this.#manager.authRequest({
304
- method: "DELETE",
305
- path: emoji ? Routes.CHANNEL_REACTION(channelID, messageID, emoji) : Routes.CHANNEL_REACTIONS(channelID, messageID)
306
- });
307
- }
308
- /**
309
- * Delete a stage instance.
310
- * @param channelID The ID of the channel to delete the stage instance on.
311
- * @param reason The reason for deleting the stage instance.
312
- * @caching This method **does not** cache its result.
313
- */
314
- async deleteStageInstance(channelID, reason) {
315
- await this.#manager.authRequest({
316
- method: "DELETE",
317
- path: Routes.STAGE_INSTANCE(channelID),
318
- reason
319
- });
320
- }
321
- /**
322
- * Edit a channel.
323
- * @param channelID The ID of the channel to edit.
324
- * @param options The options for editing the channel.
325
- * @caching This method **may** cache its result. If a guild channel, the result will not be cached if the guild is not cached.
326
- * @caches {@link Guild#channels | Guild#channels}<br>{@link Guild#threads | Guild#threads}<br>{@link Client#groupChannels | Client#groupChannels}
327
- */
328
- async edit(channelID, options) {
329
- const reason = options.reason;
330
- if (options.reason) {
331
- delete options.reason;
332
- }
333
- if (options.icon) {
334
- try {
335
- options.icon = this.#manager.client.util.convertImage(options.icon);
336
- }
337
- catch (err) {
338
- throw new TypeError("Invalid icon provided. Ensure you are providing a valid, fully-qualified base64 url.", { cause: err });
339
- }
340
- }
341
- return this.#manager.authRequest({
342
- method: "PATCH",
343
- path: Routes.CHANNEL(channelID),
344
- json: {
345
- applied_tags: options.appliedTags,
346
- archived: options.archived,
347
- auto_archive_duration: options.autoArchiveDuration,
348
- available_tags: options.availableTags?.map(tag => ({
349
- emoji_id: tag.emoji?.id,
350
- emoji_name: tag.emoji?.name,
351
- moderated: tag.moderated,
352
- name: tag.name,
353
- id: tag.id
354
- })),
355
- bitrate: options.bitrate,
356
- default_auto_archive_duration: options.defaultAutoArchiveDuration,
357
- default_forum_layout: options.defaultForumLayout,
358
- default_reaction_emoji: options.defaultReactionEmoji ? { emoji_id: options.defaultReactionEmoji.id, emoji_name: options.defaultReactionEmoji.name } : options.defaultReactionEmoji,
359
- default_sort_order: options.defaultSortOrder,
360
- default_thread_rate_limit_per_user: options.defaultThreadRateLimitPerUser,
361
- flags: options.flags,
362
- icon: options.icon,
363
- invitable: options.invitable,
364
- locked: options.locked,
365
- name: options.name,
366
- nsfw: options.nsfw,
367
- parent_id: options.parentID,
368
- permission_overwrites: options.permissionOverwrites,
369
- position: options.position,
370
- rate_limit_per_user: options.rateLimitPerUser,
371
- rtc_region: options.rtcRegion,
372
- topic: options.topic,
373
- type: options.type,
374
- user_limit: options.userLimit,
375
- video_quality_mode: options.videoQualityMode
376
- },
377
- reason
378
- }).then(data => this.#manager.client.util.updateChannel(data));
379
- }
380
- /**
381
- * Edit a message.
382
- * @param channelID The ID of the channel the message is in.
383
- * @param messageID The ID of the message to edit.
384
- * @param options The options for editing the message.
385
- * @caching This method **may** cache its result. The result will not be cached if the channel is not cached.
386
- * @caches {@link TextableChannel#messages | TextableChannel#messages}<br>{@link ThreadChannel#messages | ThreadChannel#messages}<br>{@link PrivateChannel#messages | PrivateChannel#messages}
387
- */
388
- async editMessage(channelID, messageID, options) {
389
- const files = options.files;
390
- if (options.files) {
391
- delete options.files;
392
- }
393
- return this.#manager.authRequest({
394
- method: "PATCH",
395
- path: Routes.CHANNEL_MESSAGE(channelID, messageID),
396
- json: {
397
- allowed_mentions: options.allowedMentions ? this.#manager.client.util.formatAllowedMentions(options.allowedMentions) : undefined,
398
- attachments: options.attachments,
399
- components: options.components ? this.#manager.client.util.componentsToRaw(options.components) : undefined,
400
- content: options.content,
401
- embeds: options.embeds ? this.#manager.client.util.embedsToRaw(options.embeds) : undefined,
402
- flags: options.flags
403
- },
404
- files
405
- }).then(data => this.#manager.client.util.updateMessage(data));
406
- }
407
- /**
408
- * Edit a permission overwrite.
409
- * @param channelID The ID of the channel to edit the permission overwrite for.
410
- * @param overwriteID The ID of the permission overwrite to edit.
411
- * @param options The options for editing the permission overwrite.
412
- * @caching This method **does not** cache its result.
413
- */
414
- async editPermission(channelID, overwriteID, options) {
415
- const reason = options.reason;
416
- if (options.reason) {
417
- delete options.reason;
418
- }
419
- await this.#manager.authRequest({
420
- method: "PUT",
421
- path: Routes.CHANNEL_PERMISSION(channelID, overwriteID),
422
- json: {
423
- allow: options.allow,
424
- deny: options.deny,
425
- type: options.type
426
- },
427
- reason
428
- });
429
- }
430
- /**
431
- * Edit a stage instance.
432
- * @param channelID The ID of the channel to edit the stage instance on.
433
- * @param options The options for editing the stage instance.
434
- * @caching This method **does not** cache its result.
435
- */
436
- async editStageInstance(channelID, options) {
437
- const reason = options.reason;
438
- if (options.reason) {
439
- delete options.reason;
440
- }
441
- return this.#manager.authRequest({
442
- method: "PATCH",
443
- path: Routes.STAGE_INSTANCE(channelID),
444
- json: {
445
- channel_id: channelID,
446
- topic: options.topic,
447
- privacy_level: options.privacyLevel
448
- },
449
- reason
450
- }).then(data => new StageInstance_1.default(data, this.#manager.client));
451
- }
452
- /**
453
- * Follow an announcement channel.
454
- * @param channelID The ID of the channel to follow announcements from.
455
- * @param webhookChannelID The ID of the channel crossposted messages should be sent to. The client must have the `MANAGE_WEBHOOKS` permission in this channel.
456
- * @caching This method **does not** cache its result.
457
- */
458
- async followAnnouncement(channelID, webhookChannelID) {
459
- return this.#manager.authRequest({
460
- method: "POST",
461
- path: Routes.CHANNEL_FOLLOWERS(channelID),
462
- json: { webhook_channel_id: webhookChannelID }
463
- }).then(data => ({
464
- channelID: data.channel_id,
465
- webhookID: data.webhook_id
466
- }));
467
- }
468
- /**
469
- * Get a channel.
470
- * @param channelID The ID of the channel to get.
471
- * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
472
- * @caches {@link Guild#channels | Guild#channels}<br>{@link Guild#threads | Guild#threads}<br>{@link Client#privateChannels | Client#privateChannels}<br>{@link Client#groupChannels | Client#groupChannels}
473
- */
474
- async get(channelID) {
475
- return this.#manager.authRequest({
476
- method: "GET",
477
- path: Routes.CHANNEL(channelID)
478
- }).then(data => this.#manager.client.util.updateChannel(data));
479
- }
480
- async getInvite(code, options) {
481
- const query = new URLSearchParams();
482
- if (options?.guildScheduledEventID !== undefined) {
483
- query.set("guild_scheduled_event_id", options.guildScheduledEventID);
484
- }
485
- if (options?.withCounts !== undefined) {
486
- query.set("with_counts", options.withCounts.toString());
487
- }
488
- if (options?.withExpiration !== undefined) {
489
- query.set("with_expiration", options.withExpiration.toString());
490
- }
491
- return this.#manager.authRequest({
492
- method: "GET",
493
- path: Routes.INVITE(code),
494
- query
495
- }).then(data => new Invite_1.default(data, this.#manager.client));
496
- }
497
- /**
498
- * Get the invites of a channel.
499
- * @param channelID The ID of the channel to get the invites of.
500
- * @caching This method **does not** cache its result.
501
- */
502
- async getInvites(channelID) {
503
- return this.#manager.authRequest({
504
- method: "GET",
505
- path: Routes.CHANNEL_INVITES(channelID)
506
- }).then(data => data.map(invite => new Invite_1.default(invite, this.#manager.client)));
507
- }
508
- /**
509
- * Get the private archived threads the current user has joined in a channel.
510
- * @param channelID The ID of the channel to get the archived threads from.
511
- * @param options The options for getting the archived threads.
512
- * @caching This method **does not** cache its result.
513
- */
514
- async getJoinedPrivateArchivedThreads(channelID, options) {
515
- return this.#manager.authRequest({
516
- method: "GET",
517
- path: Routes.CHANNEL_PRIVATE_ARCHIVED_THREADS(channelID),
518
- json: {
519
- before: options?.before,
520
- limit: options?.limit
521
- }
522
- }).then(data => ({
523
- hasMore: data.has_more,
524
- members: data.members.map(m => ({
525
- flags: m.flags,
526
- id: m.id,
527
- joinTimestamp: new Date(m.join_timestamp),
528
- userID: m.user_id
529
- })),
530
- threads: data.threads.map(d => this.#manager.client.util.updateThread(d))
531
- }));
532
- }
533
- /**
534
- * Get a message in a channel.
535
- * @param channelID The ID of the channel the message is in
536
- * @param messageID The ID of the message to get.
537
- * @caching This method **may** cache its result. The result will not be cached if the channel is not cached.
538
- * @caches {@link TextableChannel#messages | TextableChannel#messages}<br>{@link ThreadChannel#messages | ThreadChannel#messages}<br>{@link PrivateChannel#messages | PrivateChannel#messages}
539
- */
540
- async getMessage(channelID, messageID) {
541
- return this.#manager.authRequest({
542
- method: "GET",
543
- path: Routes.CHANNEL_MESSAGE(channelID, messageID)
544
- }).then(data => this.#manager.client.util.updateMessage(data));
545
- }
546
- /**
547
- * Get messages in a channel.
548
- * @param channelID The ID of the channel to get messages from.
549
- * @param options The options for getting messages. `before`, `after`, and `around `All are mutually exclusive.
550
- * @caching This method **may** cache its result. The result will not be cached if the channel is not cached.
551
- * @caches {@link TextableChannel#messages | TextableChannel#messages}<br>{@link ThreadChannel#messages | ThreadChannel#messages}<br>{@link PrivateChannel#messages | PrivateChannel#messages}
552
- */
553
- async getMessages(channelID, options) {
554
- const query = new URLSearchParams();
555
- let chosenOption;
556
- if (options?.around !== undefined) {
557
- query.set("around", options.around);
558
- chosenOption = "around";
559
- // eslint-disable-next-line unicorn/no-negated-condition
560
- }
561
- else if (options?.after !== undefined) {
562
- query.set("after", options.after);
563
- chosenOption = "after";
564
- }
565
- else {
566
- if (options?.before !== undefined) {
567
- query.set("before", options.before);
568
- }
569
- chosenOption = "before";
570
- }
571
- if (chosenOption === "around" || (options?.limit && options.limit <= 100)) {
572
- const filter = options?.filter?.bind(this) ?? (() => true);
573
- if (options?.limit !== undefined) {
574
- query.set("limit", Math.min(options.limit, 100).toString());
575
- }
576
- const messages = await this.#manager.authRequest({
577
- method: "GET",
578
- path: Routes.CHANNEL_MESSAGES(channelID),
579
- query
580
- }).then(data => data.map(d => this.#manager.client.util.updateMessage(d)));
581
- for (const message of Array.from(messages)) {
582
- const f = filter(message);
583
- if (f === false) {
584
- messages.splice(messages.indexOf(message), 1);
585
- }
586
- if (f === "break") {
587
- messages.splice(messages.indexOf(message));
588
- break;
589
- }
590
- }
591
- return messages;
592
- }
593
- const results = [];
594
- const it = this.getMessagesIterator(channelID, options);
595
- for await (const messages of it) {
596
- const limit = messages.length < 100 ? messages.length : it.limit + 100;
597
- this.#manager.client.emit("debug", `Getting ${limit} more message${limit === 1 ? "" : "s"} for ${channelID}: ${it.lastMessage ?? ""}`);
598
- results.push(...messages);
599
- }
600
- return results;
601
- }
602
- /**
603
- * Get an async iterator for getting messages in a channel.
604
- * @param channelID The ID of the channel to get messages from.
605
- * @param options The options for getting messages. `before`, `after`, and `around `All are mutually exclusive.
606
- * @caching This method **may** cache its result. The result will not be cached if the channel is not cached.
607
- * @caches {@link TextableChannel#messages | TextableChannel#messages}<br>{@link ThreadChannel#messages | ThreadChannel#messages}<br>{@link PrivateChannel#messages | PrivateChannel#messages}
608
- */
609
- getMessagesIterator(channelID, options) {
610
- const filter = options?.filter?.bind(this) ?? (() => true);
611
- const chosenOption = options?.after === undefined ? "before" : "after";
612
- // arrow functions cannot be generator functions
613
- // eslint-disable-next-line unicorn/no-this-assignment
614
- const self = this;
615
- const it = {
616
- lastMessage: chosenOption === "after" ? options?.after : options?.before,
617
- limit: options?.limit ?? 100,
618
- async *[Symbol.asyncIterator]() {
619
- loop: while (it.limit > 0) {
620
- const messages = await self.getMessages(channelID, {
621
- limit: it.limit >= 100 ? 100 : it.limit,
622
- [chosenOption]: it.lastMessage
623
- });
624
- if (messages.length < 100 || it.limit <= 100) {
625
- yield messages;
626
- break loop;
627
- }
628
- it.limit -= messages.length;
629
- for (const message of Array.from(messages)) {
630
- const f = filter(message);
631
- if (f === false) {
632
- messages.splice(messages.indexOf(message), 1);
633
- }
634
- if (f === "break") {
635
- messages.splice(messages.indexOf(message));
636
- yield messages;
637
- break loop;
638
- }
639
- }
640
- it.lastMessage = messages.at(-1)?.id;
641
- yield messages;
642
- }
643
- }
644
- };
645
- return it;
646
- }
647
- /**
648
- * Get the pinned messages in a channel.
649
- * @param channelID The ID of the channel to get the pinned messages from.
650
- * @caching This method **may** cache its result. The result will not be cached if the channel is not cached.
651
- * @caches {@link TextableChannel#messages | TextableChannel#messages}<br>{@link ThreadChannel#messages | ThreadChannel#messages}<br>{@link PrivateChannel#messages | PrivateChannel#messages}
652
- */
653
- async getPinnedMessages(channelID) {
654
- return this.#manager.authRequest({
655
- method: "GET",
656
- path: Routes.CHANNEL_PINS(channelID)
657
- }).then(data => data.map(d => this.#manager.client.util.updateMessage(d)));
658
- }
659
- /**
660
- * Get the private archived threads in a channel.
661
- * @param channelID The ID of the channel to get the archived threads from.
662
- * @param options The options for getting the archived threads.
663
- * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
664
- * @caches {@link Guild#threads | Guild#threads}
665
- */
666
- async getPrivateArchivedThreads(channelID, options) {
667
- const qs = new URLSearchParams();
668
- if (options?.before !== undefined) {
669
- qs.set("before", options.before);
670
- }
671
- if (options?.limit !== undefined) {
672
- qs.set("limit", options.limit.toString());
673
- }
674
- return this.#manager.authRequest({
675
- method: "GET",
676
- path: Routes.CHANNEL_PRIVATE_ARCHIVED_THREADS(channelID),
677
- query: qs
678
- }).then(data => ({
679
- hasMore: data.has_more,
680
- members: data.members.map(m => ({
681
- flags: m.flags,
682
- id: m.id,
683
- joinTimestamp: new Date(m.join_timestamp),
684
- userID: m.user_id
685
- })),
686
- threads: data.threads.map(d => this.#manager.client.util.updateThread(d))
687
- }));
688
- }
689
- /**
690
- * Get the private joined archived threads in a channel.
691
- * @param channelID The ID of the channel to get the archived threads from.
692
- * @param options The options for getting the archived threads.
693
- * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
694
- * @caches {@link Guild#threads | Guild#threads}
695
- */
696
- async getPrivateJoinedArchivedThreads(channelID, options) {
697
- const qs = new URLSearchParams();
698
- if (options?.before !== undefined) {
699
- qs.set("before", options.before);
700
- }
701
- if (options?.limit !== undefined) {
702
- qs.set("limit", options.limit.toString());
703
- }
704
- return this.#manager.authRequest({
705
- method: "GET",
706
- path: Routes.CHANNEL_JOINED_PRIVATE_ARCHIVED_THREADS(channelID),
707
- query: qs
708
- }).then(data => ({
709
- hasMore: data.has_more,
710
- members: data.members.map(m => ({
711
- flags: m.flags,
712
- id: m.id,
713
- joinTimestamp: new Date(m.join_timestamp),
714
- userID: m.user_id
715
- })),
716
- threads: data.threads.map(d => this.#manager.client.util.updateThread(d))
717
- }));
718
- }
719
- /**
720
- * Get the public archived threads in a channel.
721
- * @param channelID The ID of the channel to get the archived threads from.
722
- * @param options The options for getting the archived threads.
723
- * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
724
- * @caches {@link Guild#threads | Guild#threads}
725
- */
726
- async getPublicArchivedThreads(channelID, options) {
727
- const qs = new URLSearchParams();
728
- if (options?.before !== undefined) {
729
- qs.set("before", options.before);
730
- }
731
- if (options?.limit !== undefined) {
732
- qs.set("limit", options.limit.toString());
733
- }
734
- return this.#manager.authRequest({
735
- method: "GET",
736
- path: Routes.CHANNEL_PUBLIC_ARCHIVED_THREADS(channelID),
737
- query: qs
738
- }).then(data => ({
739
- hasMore: data.has_more,
740
- members: data.members.map(m => ({
741
- flags: m.flags,
742
- id: m.id,
743
- joinTimestamp: new Date(m.join_timestamp),
744
- userID: m.user_id
745
- })),
746
- threads: data.threads.map(d => this.#manager.client.util.updateThread(d))
747
- }));
748
- }
749
- /**
750
- * Get the users who reacted with a specific emoji on a message.
751
- * @param channelID The ID of the channel the message is in.
752
- * @param messageID The ID of the message to get reactions from.
753
- * @param emoji The reaction to remove from the message. `name:id` for custom emojis, and the unicode codepoint for default emojis.
754
- * @param options The options for getting the reactions.
755
- * @caching This method **does not** cache its result.
756
- */
757
- async getReactions(channelID, messageID, emoji, options) {
758
- if (emoji === decodeURIComponent(emoji)) {
759
- emoji = encodeURIComponent(emoji);
760
- }
761
- const _getReactions = async (_options) => {
762
- const query = new URLSearchParams();
763
- if (_options?.after !== undefined) {
764
- query.set("after", _options.after);
765
- }
766
- if (_options?.limit !== undefined) {
767
- query.set("limit", _options.limit.toString());
768
- }
769
- if (options?.type !== undefined) {
770
- query.set("type", String(options.type));
771
- }
772
- return this.#manager.authRequest({
773
- method: "GET",
774
- path: Routes.CHANNEL_REACTION(channelID, messageID, emoji),
775
- query
776
- }).then(data => data.map(d => this.#manager.client.users.update(d)));
777
- };
778
- const limit = options?.limit ?? 100;
779
- let after = options?.after;
780
- let reactions = [];
781
- while (reactions.length < limit) {
782
- const limitLeft = limit - reactions.length;
783
- const limitToFetch = limitLeft <= 100 ? limitLeft : 100;
784
- this.#manager.client.emit("debug", `Getting ${limitLeft} more ${emoji} reactions for message ${messageID} on ${channelID}: ${after ?? ""}`);
785
- const reactionsChunk = await _getReactions({
786
- after,
787
- limit: limitToFetch
788
- });
789
- if (reactionsChunk.length === 0) {
790
- break;
791
- }
792
- reactions = reactions.concat(reactionsChunk);
793
- after = reactionsChunk.at(-1).id;
794
- if (reactionsChunk.length < 100) {
795
- break;
796
- }
797
- }
798
- return reactions;
799
- }
800
- /**
801
- * Get the stage instance associated with a channel.
802
- * @param channelID The ID of the channel to get the stage instance on.
803
- * @caching This method **does not** cache its result.
804
- */
805
- async getStageInstance(channelID) {
806
- return this.#manager.authRequest({
807
- method: "GET",
808
- path: Routes.STAGE_INSTANCE(channelID)
809
- }).then(data => new StageInstance_1.default(data, this.#manager.client));
810
- }
811
- /**
812
- * Get a thread member.
813
- * @param channelID The ID of the thread.
814
- * @param userID The ID of the user to get the thread member of.
815
- * @caching This method **does not** cache its result.
816
- */
817
- async getThreadMember(channelID, userID) {
818
- return this.#manager.authRequest({
819
- method: "GET",
820
- path: Routes.CHANNEL_THREAD_MEMBER(channelID, userID)
821
- }).then(data => ({
822
- flags: data.flags,
823
- id: data.id,
824
- joinTimestamp: new Date(data.join_timestamp),
825
- userID: data.user_id
826
- }));
827
- }
828
- /**
829
- * Get the members of a thread.
830
- * @param channelID The ID of the thread.
831
- * @param options The options for getting the thread members.
832
- * @caching This method **does not** cache its result.
833
- */
834
- async getThreadMembers(channelID, options) {
835
- const query = new URLSearchParams();
836
- if (options?.after !== undefined) {
837
- query.set("after", options.after);
838
- }
839
- if (options?.limit !== undefined) {
840
- query.set("limit", options.limit.toString());
841
- }
842
- if (options?.withMember !== undefined) {
843
- query.set("with_member", options.withMember.toString());
844
- }
845
- return this.#manager.authRequest({
846
- method: "GET",
847
- path: Routes.CHANNEL_THREAD_MEMBERS(channelID),
848
- query
849
- }).then(data => data.map(d => {
850
- // eslint-disable-next-line @typescript-eslint/dot-notation
851
- const guild = this.#manager.client.getChannel(channelID)?.["_cachedGuild"];
852
- const member = guild && options?.withMember ? guild.members.update(d.member, guild.id) : undefined;
853
- return {
854
- flags: d.flags,
855
- id: d.id,
856
- joinTimestamp: new Date(d.join_timestamp),
857
- member,
858
- userID: d.user_id
859
- };
860
- }));
861
- }
862
- /** @deprecated Get the list of usable voice regions. Moved to `misc`. */
863
- async getVoiceRegions() {
864
- return this.#manager.authRequest({
865
- method: "GET",
866
- path: Routes.VOICE_REGIONS
867
- });
868
- }
869
- /**
870
- * Join a thread.
871
- * @param channelID The ID of the thread to join.
872
- * @caching This method **does not** cache its result.
873
- */
874
- async joinThread(channelID) {
875
- await this.#manager.authRequest({
876
- method: "PUT",
877
- path: Routes.CHANNEL_THREAD_MEMBER(channelID, "@me")
878
- });
879
- }
880
- /**
881
- * Leave a thread.
882
- * @param channelID The ID of the thread to leave.
883
- * @caching This method **does not** cache its result.
884
- */
885
- async leaveThread(channelID) {
886
- await this.#manager.authRequest({
887
- method: "DELETE",
888
- path: Routes.CHANNEL_THREAD_MEMBER(channelID, "@me")
889
- });
890
- }
891
- /**
892
- * Pin a message in a channel.
893
- * @param channelID The ID of the channel to pin the message in.
894
- * @param messageID The ID of the message to pin.
895
- * @param reason The reason for pinning the message.
896
- * @caching This method **does not** cache its result.
897
- */
898
- async pinMessage(channelID, messageID, reason) {
899
- await this.#manager.authRequest({
900
- method: "PUT",
901
- path: Routes.CHANNEL_PINNED_MESSAGE(channelID, messageID),
902
- reason
903
- });
904
- }
905
- /**
906
- * Purge an amount of messages from a channel.
907
- * @param channelID The ID of the channel to purge.
908
- * @param options The options to purge. `before`, `after`, and `around `All are mutually exclusive.
909
- * @caching This method **does not** cache its result.
910
- */
911
- async purgeMessages(channelID, options) {
912
- const filter = (message) => {
913
- if (message.timestamp.getTime() < Date.now() - 1209600000) {
914
- return "break";
915
- }
916
- return options?.filter?.(message) ?? true;
917
- };
918
- let chosenOption;
919
- if (options.after) {
920
- chosenOption = "after";
921
- }
922
- else if (options.around) {
923
- chosenOption = "around";
924
- }
925
- else {
926
- chosenOption = "before";
927
- }
928
- if (chosenOption === "around" || options.limit <= 100) {
929
- const messages = await this.getMessages(channelID, {
930
- limit: options.limit,
931
- [chosenOption]: options[chosenOption]
932
- });
933
- for (const message of messages) {
934
- const f = filter(message);
935
- if (f === false) {
936
- messages.splice(messages.indexOf(message), 1);
937
- }
938
- if (f === "break") {
939
- messages.splice(messages.indexOf(message));
940
- break;
941
- }
942
- }
943
- return this.deleteMessages(channelID, messages.map(message => message.id), options.reason);
944
- }
945
- const it = this.getMessagesIterator(channelID, {
946
- after: options.after,
947
- before: options.before,
948
- limit: options.limit,
949
- filter
950
- });
951
- let deleted = 0;
952
- for await (const messages of it) {
953
- deleted += await this.deleteMessages(channelID, messages.map(message => message.id), options.reason);
954
- }
955
- return deleted;
956
- }
957
- /**
958
- * Remove a user from the group channel.
959
- * @param groupID The ID of the group to remove the user from.
960
- * @param userID The ID of the user to remove.
961
- * @caching This method **does not** cache its result.
962
- */
963
- async removeGroupRecipient(groupID, userID) {
964
- await this.#manager.authRequest({
965
- method: "DELETE",
966
- path: Routes.GROUP_RECIPIENT(groupID, userID)
967
- });
968
- }
969
- /**
970
- * Remove a member from a thread.
971
- * @param channelID The ID of the thread to remove them from.
972
- * @param userID The ID of the user to remove from the thread.
973
- * @caching This method **does not** cache its result.
974
- */
975
- async removeThreadMember(channelID, userID) {
976
- await this.#manager.authRequest({
977
- method: "DELETE",
978
- path: Routes.CHANNEL_THREAD_MEMBER(channelID, userID)
979
- });
980
- }
981
- /**
982
- * Show a typing indicator in a channel. How long users see this varies from client to client.
983
- * @param channelID The ID of the channel to show the typing indicator in.
984
- * @caching This method **does not** cache its result.
985
- */
986
- async sendTyping(channelID) {
987
- await this.#manager.authRequest({
988
- method: "POST",
989
- path: Routes.CHANNEL_TYPING(channelID)
990
- });
991
- }
992
- /**
993
- * Set a voice status in a channel.
994
- * @param channelID The ID of the channel to set the voice status in.
995
- * @param status The voice status to set.
996
- */
997
- async setVoiceStatus(channelID, status) {
998
- await this.#manager.authRequest({
999
- method: "PUT",
1000
- path: Routes.VOICE_STATUS(channelID),
1001
- json: { status }
1002
- });
1003
- }
1004
- /**
1005
- * Create a thread from an existing message.
1006
- * @param channelID The ID of the channel to create the thread in.
1007
- * @param messageID The ID of the message to create the thread from.
1008
- * @param options The options for starting the thread.
1009
- * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1010
- * @caches {@link Guild#threads | Guild#threads}
1011
- */
1012
- async startThreadFromMessage(channelID, messageID, options) {
1013
- const reason = options.reason;
1014
- if (options.reason) {
1015
- delete options.reason;
1016
- }
1017
- return this.#manager.authRequest({
1018
- method: "POST",
1019
- path: Routes.CHANNEL_MESSAGE_THREADS(channelID, messageID),
1020
- json: {
1021
- auto_archive_duration: options.autoArchiveDuration,
1022
- name: options.name,
1023
- rate_limit_per_user: options.rateLimitPerUser
1024
- },
1025
- reason
1026
- }).then(data => this.#manager.client.util.updateThread(data));
1027
- }
1028
- /**
1029
- * Create a thread in a thread only channel (forum & media).
1030
- * @param channelID The ID of the channel to start the thread in.
1031
- * @param options The options for starting the thread.
1032
- * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1033
- * @caches {@link Guild#threads | Guild#threads}
1034
- */
1035
- async startThreadInThreadOnlyChannel(channelID, options) {
1036
- const reason = options.reason;
1037
- if (options.reason) {
1038
- delete options.reason;
1039
- }
1040
- const files = options.message.files;
1041
- if (options.message.files) {
1042
- delete options.message.files;
1043
- }
1044
- return this.#manager.authRequest({
1045
- method: "POST",
1046
- path: Routes.CHANNEL_THREADS(channelID),
1047
- json: {
1048
- auto_archive_duration: options.autoArchiveDuration,
1049
- message: {
1050
- allowed_mentions: this.#manager.client.util.formatAllowedMentions(options.message.allowedMentions),
1051
- attachments: options.message.attachments,
1052
- components: options.message.components ? this.#manager.client.util.componentsToRaw(options.message.components) : undefined,
1053
- content: options.message.content,
1054
- embeds: options.message.embeds ? this.#manager.client.util.embedsToRaw(options.message.embeds) : undefined,
1055
- flags: options.message.flags,
1056
- sticker_ids: options.message.stickerIDs
1057
- },
1058
- name: options.name,
1059
- rate_limit_per_user: options.rateLimitPerUser,
1060
- applied_tags: options.appliedTags
1061
- },
1062
- reason,
1063
- files
1064
- }).then(data => this.#manager.client.util.updateThread(data));
1065
- }
1066
- /**
1067
- * Create a thread without an existing message.
1068
- * @param channelID The ID of the channel to start the thread in.
1069
- * @param options The options for starting the thread.
1070
- * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1071
- * @caches {@link Guild#threads | Guild#threads}
1072
- */
1073
- async startThreadWithoutMessage(channelID, options) {
1074
- const reason = options.reason;
1075
- if (options.reason) {
1076
- delete options.reason;
1077
- }
1078
- return this.#manager.authRequest({
1079
- method: "POST",
1080
- path: Routes.CHANNEL_THREADS(channelID),
1081
- json: {
1082
- auto_archive_duration: options.autoArchiveDuration,
1083
- invitable: options.invitable,
1084
- name: options.name,
1085
- rate_limit_per_user: options.rateLimitPerUser,
1086
- type: options.type
1087
- },
1088
- reason
1089
- }).then(data => this.#manager.client.util.updateThread(data));
1090
- }
1091
- /**
1092
- * Unpin a message in a channel.
1093
- * @param channelID The ID of the channel to unpin the message in.
1094
- * @param messageID The ID of the message to unpin.
1095
- * @param reason The reason for unpinning the message.
1096
- * @caching This method **does not** cache its result.
1097
- */
1098
- async unpinMessage(channelID, messageID, reason) {
1099
- await this.#manager.authRequest({
1100
- method: "DELETE",
1101
- path: Routes.CHANNEL_PINNED_MESSAGE(channelID, messageID),
1102
- reason
1103
- });
1104
- }
1105
- }
1106
- exports.default = Channels;
1107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhbm5lbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcm91dGVzL0NoYW5uZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQStDQSwrREFBeUM7QUFHekMsMEVBQTBDO0FBWTFDLHdGQUF3RDtBQUV4RCwySUFBMkk7QUFDM0ksTUFBcUIsUUFBUTtJQUN6QixRQUFRLENBQWM7SUFDdEIsWUFBWSxPQUFvQjtRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBZSxFQUFFLE9BQWlDO1FBQ3RFLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQU87WUFDbEMsTUFBTSxFQUFFLEtBQUs7WUFDYixJQUFJLEVBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUN2RCxJQUFJLEVBQUk7Z0JBQ0osWUFBWSxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dCQUNqQyxJQUFJLEVBQVUsT0FBTyxDQUFDLElBQUk7YUFDN0I7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQWlCLEVBQUUsTUFBYztRQUNuRCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFPO1lBQ2xDLE1BQU0sRUFBRSxLQUFLO1lBQ2IsSUFBSSxFQUFJLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO1NBQzFELENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBaUI7UUFDNUIsSUFBSSxLQUFpQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElB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