oceanic.js 1.10.3-dev.c6c9f52 → 1.10.3-dev.ca8b6e8

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 (205) hide show
  1. package/dist/lib/Client.d.ts +99 -0
  2. package/dist/lib/Client.js +263 -0
  3. package/dist/lib/Constants.d.ts +1215 -0
  4. package/dist/lib/Constants.js +1513 -0
  5. package/dist/lib/gateway/Shard.d.ts +83 -0
  6. package/dist/lib/gateway/Shard.js +1621 -0
  7. package/dist/lib/gateway/ShardManager.d.ts +29 -0
  8. package/dist/lib/gateway/ShardManager.js +300 -0
  9. package/dist/lib/index.d.ts +84 -0
  10. package/dist/lib/index.js +168 -0
  11. package/dist/lib/rest/Bucket.d.ts +33 -0
  12. package/dist/lib/rest/Bucket.js +78 -0
  13. package/dist/lib/rest/DiscordHTTPError.d.ts +16 -0
  14. package/dist/lib/rest/DiscordHTTPError.js +65 -0
  15. package/dist/lib/rest/DiscordRESTError.d.ts +19 -0
  16. package/dist/lib/rest/DiscordRESTError.js +89 -0
  17. package/dist/lib/rest/OAuthHelper.d.ts +62 -0
  18. package/dist/lib/rest/OAuthHelper.js +183 -0
  19. package/dist/lib/rest/RESTManager.d.ts +42 -0
  20. package/dist/lib/rest/RESTManager.js +82 -0
  21. package/dist/lib/rest/RequestHandler.d.ts +28 -0
  22. package/dist/lib/rest/RequestHandler.js +313 -0
  23. package/dist/lib/rest/SequentialBucket.d.ts +25 -0
  24. package/dist/lib/rest/SequentialBucket.js +76 -0
  25. package/dist/lib/routes/Applications.d.ts +171 -0
  26. package/dist/lib/routes/Applications.js +447 -0
  27. package/dist/lib/routes/Channels.d.ts +408 -0
  28. package/dist/lib/routes/Channels.js +1160 -0
  29. package/dist/lib/routes/Guilds.d.ts +606 -0
  30. package/dist/lib/routes/Guilds.js +1669 -0
  31. package/dist/lib/routes/Interactions.d.ts +74 -0
  32. package/dist/lib/routes/Interactions.js +141 -0
  33. package/dist/lib/routes/Miscellaneous.d.ts +31 -0
  34. package/dist/lib/routes/Miscellaneous.js +69 -0
  35. package/dist/lib/routes/OAuth.d.ts +108 -0
  36. package/dist/lib/routes/OAuth.js +312 -0
  37. package/dist/lib/routes/Users.d.ts +32 -0
  38. package/dist/lib/routes/Users.js +59 -0
  39. package/dist/lib/routes/Webhooks.d.ts +128 -0
  40. package/dist/lib/routes/Webhooks.js +265 -0
  41. package/dist/lib/structures/AnnouncementChannel.d.ts +36 -0
  42. package/dist/lib/structures/AnnouncementChannel.js +47 -0
  43. package/dist/lib/structures/AnnouncementThreadChannel.d.ts +18 -0
  44. package/dist/lib/structures/AnnouncementThreadChannel.js +27 -0
  45. package/dist/lib/structures/Application.d.ts +102 -0
  46. package/dist/lib/structures/Application.js +189 -0
  47. package/dist/lib/structures/ApplicationCommand.d.ts +74 -0
  48. package/dist/lib/structures/ApplicationCommand.js +141 -0
  49. package/dist/lib/structures/Attachment.d.ts +34 -0
  50. package/dist/lib/structures/Attachment.js +64 -0
  51. package/dist/lib/structures/AuditLogEntry.d.ts +25 -0
  52. package/dist/lib/structures/AuditLogEntry.js +53 -0
  53. package/dist/lib/structures/AutoModerationRule.d.ts +49 -0
  54. package/dist/lib/structures/AutoModerationRule.js +139 -0
  55. package/dist/lib/structures/AutocompleteInteraction.d.ts +62 -0
  56. package/dist/lib/structures/AutocompleteInteraction.js +115 -0
  57. package/dist/lib/structures/Base.d.ts +20 -0
  58. package/dist/lib/structures/Base.js +58 -0
  59. package/dist/lib/structures/BaseEntitlement.d.ts +19 -0
  60. package/dist/lib/structures/BaseEntitlement.js +44 -0
  61. package/dist/lib/structures/CategoryChannel.d.ts +41 -0
  62. package/dist/lib/structures/CategoryChannel.js +105 -0
  63. package/dist/lib/structures/Channel.d.ts +20 -0
  64. package/dist/lib/structures/Channel.js +91 -0
  65. package/dist/lib/structures/ClientApplication.d.ts +153 -0
  66. package/dist/lib/structures/ClientApplication.js +220 -0
  67. package/dist/lib/structures/CommandInteraction.d.ts +127 -0
  68. package/dist/lib/structures/CommandInteraction.js +297 -0
  69. package/dist/lib/structures/ComponentInteraction.d.ts +137 -0
  70. package/dist/lib/structures/ComponentInteraction.js +311 -0
  71. package/dist/lib/structures/Entitlement.d.ts +12 -0
  72. package/dist/lib/structures/Entitlement.js +26 -0
  73. package/dist/lib/structures/ExtendedUser.d.ts +26 -0
  74. package/dist/lib/structures/ExtendedUser.js +57 -0
  75. package/dist/lib/structures/ForumChannel.d.ts +11 -0
  76. package/dist/lib/structures/ForumChannel.js +19 -0
  77. package/dist/lib/structures/GroupChannel.d.ts +62 -0
  78. package/dist/lib/structures/GroupChannel.js +133 -0
  79. package/dist/lib/structures/Guild.d.ts +654 -0
  80. package/dist/lib/structures/Guild.js +1319 -0
  81. package/dist/lib/structures/GuildChannel.d.ts +34 -0
  82. package/dist/lib/structures/GuildChannel.js +75 -0
  83. package/dist/lib/structures/GuildPreview.d.ts +50 -0
  84. package/dist/lib/structures/GuildPreview.js +119 -0
  85. package/dist/lib/structures/GuildScheduledEvent.d.ts +60 -0
  86. package/dist/lib/structures/GuildScheduledEvent.js +154 -0
  87. package/dist/lib/structures/GuildTemplate.d.ts +55 -0
  88. package/dist/lib/structures/GuildTemplate.js +126 -0
  89. package/dist/lib/structures/Integration.d.ts +54 -0
  90. package/dist/lib/structures/Integration.js +156 -0
  91. package/dist/lib/structures/Interaction.d.ts +40 -0
  92. package/dist/lib/structures/Interaction.js +90 -0
  93. package/dist/lib/structures/InteractionResolvedChannel.d.ts +28 -0
  94. package/dist/lib/structures/InteractionResolvedChannel.js +45 -0
  95. package/dist/lib/structures/Invite.d.ts +64 -0
  96. package/dist/lib/structures/Invite.js +193 -0
  97. package/dist/lib/structures/InviteGuild.d.ts +52 -0
  98. package/dist/lib/structures/InviteGuild.js +88 -0
  99. package/dist/lib/structures/MediaChannel.d.ts +11 -0
  100. package/dist/lib/structures/MediaChannel.js +19 -0
  101. package/dist/lib/structures/Member.d.ts +122 -0
  102. package/dist/lib/structures/Member.js +255 -0
  103. package/dist/lib/structures/Message.d.ts +194 -0
  104. package/dist/lib/structures/Message.js +477 -0
  105. package/dist/lib/structures/ModalSubmitInteraction.d.ts +128 -0
  106. package/dist/lib/structures/ModalSubmitInteraction.js +240 -0
  107. package/dist/lib/structures/OAuthApplication.d.ts +79 -0
  108. package/dist/lib/structures/OAuthApplication.js +210 -0
  109. package/dist/lib/structures/OAuthGuild.d.ts +35 -0
  110. package/dist/lib/structures/OAuthGuild.js +61 -0
  111. package/dist/lib/structures/PartialApplication.d.ts +30 -0
  112. package/dist/lib/structures/PartialApplication.js +67 -0
  113. package/dist/lib/structures/Permission.d.ts +21 -0
  114. package/dist/lib/structures/Permission.js +68 -0
  115. package/dist/lib/structures/PermissionOverwrite.d.ts +26 -0
  116. package/dist/lib/structures/PermissionOverwrite.js +49 -0
  117. package/dist/lib/structures/PingInteraction.d.ts +16 -0
  118. package/dist/lib/structures/PingInteraction.js +26 -0
  119. package/dist/lib/structures/Poll.d.ts +28 -0
  120. package/dist/lib/structures/Poll.js +78 -0
  121. package/dist/lib/structures/PrivateChannel.d.ts +90 -0
  122. package/dist/lib/structures/PrivateChannel.js +131 -0
  123. package/dist/lib/structures/PrivateThreadChannel.d.ts +18 -0
  124. package/dist/lib/structures/PrivateThreadChannel.js +27 -0
  125. package/dist/lib/structures/PublicThreadChannel.d.ts +21 -0
  126. package/dist/lib/structures/PublicThreadChannel.js +37 -0
  127. package/dist/lib/structures/Role.d.ts +52 -0
  128. package/dist/lib/structures/Role.js +137 -0
  129. package/dist/lib/structures/SKU.d.ts +32 -0
  130. package/dist/lib/structures/SKU.js +53 -0
  131. package/dist/lib/structures/StageChannel.d.ts +33 -0
  132. package/dist/lib/structures/StageChannel.js +44 -0
  133. package/dist/lib/structures/StageInstance.d.ts +36 -0
  134. package/dist/lib/structures/StageInstance.js +94 -0
  135. package/dist/lib/structures/Team.d.ts +22 -0
  136. package/dist/lib/structures/Team.js +67 -0
  137. package/dist/lib/structures/TestEntitlement.d.ts +10 -0
  138. package/dist/lib/structures/TestEntitlement.js +21 -0
  139. package/dist/lib/structures/TextChannel.d.ts +34 -0
  140. package/dist/lib/structures/TextChannel.js +46 -0
  141. package/dist/lib/structures/TextableChannel.d.ts +158 -0
  142. package/dist/lib/structures/TextableChannel.js +276 -0
  143. package/dist/lib/structures/TextableVoiceChannel.d.ts +39 -0
  144. package/dist/lib/structures/TextableVoiceChannel.js +81 -0
  145. package/dist/lib/structures/ThreadChannel.d.ts +159 -0
  146. package/dist/lib/structures/ThreadChannel.js +295 -0
  147. package/dist/lib/structures/ThreadOnlyChannel.d.ts +99 -0
  148. package/dist/lib/structures/ThreadOnlyChannel.js +233 -0
  149. package/dist/lib/structures/ThreadableChannel.d.ts +36 -0
  150. package/dist/lib/structures/ThreadableChannel.js +58 -0
  151. package/dist/lib/structures/UnavailableGuild.d.ts +11 -0
  152. package/dist/lib/structures/UnavailableGuild.js +21 -0
  153. package/dist/lib/structures/User.d.ts +82 -0
  154. package/dist/lib/structures/User.js +168 -0
  155. package/dist/lib/structures/VoiceChannel.d.ts +20 -0
  156. package/dist/lib/structures/VoiceChannel.js +35 -0
  157. package/dist/lib/structures/VoiceState.d.ts +51 -0
  158. package/dist/lib/structures/VoiceState.js +140 -0
  159. package/dist/lib/structures/Webhook.d.ts +129 -0
  160. package/dist/lib/structures/Webhook.js +206 -0
  161. package/dist/lib/types/applications.d.ts +466 -0
  162. package/dist/lib/types/audit-log.d.ts +122 -0
  163. package/dist/lib/types/auto-moderation.d.ts +99 -0
  164. package/dist/lib/types/channels.d.ts +1244 -0
  165. package/dist/lib/types/client.d.ts +228 -0
  166. package/dist/lib/types/events.d.ts +265 -0
  167. package/dist/lib/types/gateway-raw.d.ts +584 -0
  168. package/dist/lib/types/gateway.d.ts +351 -0
  169. package/dist/lib/types/guild-template.d.ts +33 -0
  170. package/dist/lib/types/guilds.d.ts +855 -0
  171. package/dist/lib/types/index.d.ts +18 -0
  172. package/dist/lib/types/interactions.d.ts +377 -0
  173. package/dist/lib/types/json.d.ts +742 -0
  174. package/dist/lib/types/misc.d.ts +28 -0
  175. package/dist/lib/types/oauth.d.ts +201 -0
  176. package/dist/lib/types/request-handler.d.ts +52 -0
  177. package/dist/lib/types/scheduled-events.d.ts +88 -0
  178. package/dist/lib/types/shared.d.ts +9 -0
  179. package/dist/lib/types/users.d.ts +45 -0
  180. package/dist/lib/types/voice.d.ts +45 -0
  181. package/dist/lib/types/webhooks.d.ts +74 -0
  182. package/dist/lib/util/Collection.d.ts +47 -0
  183. package/dist/lib/util/Collection.js +78 -0
  184. package/dist/lib/util/Errors.d.ts +29 -0
  185. package/dist/lib/util/Errors.js +56 -0
  186. package/dist/lib/util/Routes.d.ts +127 -0
  187. package/dist/lib/util/Routes.js +248 -0
  188. package/dist/lib/util/SimpleCollection.d.ts +12 -0
  189. package/dist/lib/util/SimpleCollection.js +81 -0
  190. package/dist/lib/util/TypedCollection.d.ts +24 -0
  191. package/dist/lib/util/TypedCollection.js +76 -0
  192. package/dist/lib/util/TypedEmitter.d.ts +19 -0
  193. package/dist/lib/util/TypedEmitter.js +19 -0
  194. package/dist/lib/util/Util.d.ts +58 -0
  195. package/dist/lib/util/Util.js +535 -0
  196. package/dist/lib/util/interactions/InteractionOptionsWrapper.d.ts +170 -0
  197. package/dist/lib/util/interactions/InteractionOptionsWrapper.js +213 -0
  198. package/dist/lib/util/interactions/MessageInteractionResponse.d.ts +24 -0
  199. package/dist/lib/util/interactions/MessageInteractionResponse.js +28 -0
  200. package/dist/lib/util/interactions/ModalSubmitInteractionComponentsWrapper.d.ts +24 -0
  201. package/dist/lib/util/interactions/ModalSubmitInteractionComponentsWrapper.js +34 -0
  202. package/dist/lib/util/interactions/SelectMenuValuesWrapper.d.ts +60 -0
  203. package/dist/lib/util/interactions/SelectMenuValuesWrapper.js +124 -0
  204. package/dist/package.json +1 -1
  205. package/package.json +1 -1
@@ -0,0 +1,1669 @@
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 GuildScheduledEvent_1 = tslib_1.__importDefault(require("../structures/GuildScheduledEvent"));
6
+ const Webhook_1 = tslib_1.__importDefault(require("../structures/Webhook"));
7
+ const GuildTemplate_1 = tslib_1.__importDefault(require("../structures/GuildTemplate"));
8
+ const GuildPreview_1 = tslib_1.__importDefault(require("../structures/GuildPreview"));
9
+ const Role_1 = tslib_1.__importDefault(require("../structures/Role"));
10
+ const Invite_1 = tslib_1.__importDefault(require("../structures/Invite"));
11
+ const Integration_1 = tslib_1.__importDefault(require("../structures/Integration"));
12
+ const AutoModerationRule_1 = tslib_1.__importDefault(require("../structures/AutoModerationRule"));
13
+ const AuditLogEntry_1 = tslib_1.__importDefault(require("../structures/AuditLogEntry"));
14
+ const Guild_1 = tslib_1.__importDefault(require("../structures/Guild"));
15
+ const ApplicationCommand_1 = tslib_1.__importDefault(require("../structures/ApplicationCommand"));
16
+ /** Various methods for interacting with guilds. Located at {@link Client#rest | Client#rest}{@link RESTManager#guilds | .guilds}. */
17
+ class Guilds {
18
+ _manager;
19
+ constructor(manager) {
20
+ this._manager = manager;
21
+ }
22
+ /**
23
+ * Add a member to a guild. Requires an access token with the `guilds.join` scope.
24
+ *
25
+ * Returns the newly added member upon success, or void if the member is already in the guild.
26
+ * @param guildID The ID of the guild.
27
+ * @param userID The ID of the user to add.
28
+ * @param options The options for adding the member.
29
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
30
+ * @caches {@link Guild#members | Guild#members}
31
+ */
32
+ async addMember(guildID, userID, options) {
33
+ return this._manager.authRequest({
34
+ method: "PUT",
35
+ path: Routes.GUILD_MEMBER(guildID, userID),
36
+ json: {
37
+ access_token: options.accessToken,
38
+ deaf: options.deaf,
39
+ mute: options.mute,
40
+ nick: options.nick,
41
+ roles: options.roles
42
+ }
43
+ }).then(data => data === null ? undefined : this._manager.client.util.updateMember(guildID, userID, data));
44
+ }
45
+ /**
46
+ * Add a role to a member.
47
+ * @param guildID The ID of the guild.
48
+ * @param memberID The ID of the member.
49
+ * @param roleID The ID of the role to add.
50
+ * @param reason The reason for adding the role.
51
+ * @caching This method **does not** cache its result.
52
+ */
53
+ async addMemberRole(guildID, memberID, roleID, reason) {
54
+ await this._manager.authRequest({
55
+ method: "PUT",
56
+ path: Routes.GUILD_MEMBER_ROLE(guildID, memberID, roleID),
57
+ reason
58
+ });
59
+ }
60
+ /**
61
+ * Begin a prune.
62
+ * @param guildID The ID of the guild.
63
+ * @param options The options for the prune.
64
+ * @caching This method **does not** cache its result.
65
+ */
66
+ async beginPrune(guildID, options) {
67
+ const reason = options?.reason;
68
+ if (options?.reason) {
69
+ delete options.reason;
70
+ }
71
+ return this._manager.authRequest({
72
+ method: "POST",
73
+ path: Routes.GUILD_PRUNE(guildID),
74
+ json: {
75
+ days: options?.days,
76
+ compute_prune_count: options?.computePruneCount,
77
+ include_roles: options?.includeRoles
78
+ },
79
+ reason
80
+ }).then(data => data.pruned);
81
+ }
82
+ /**
83
+ * Ban up to 200 members from a guild. This requires both the `BAN_MEMBERS` and `MANAGE_GUILD` permissions.
84
+ * If no members were banned, a {@link Constants~JSONErrorCodes.FAILED_TO_BAN_USERS | FAILED_TO_BAN_USERS } will be returned.
85
+ * The bot user is ignored.
86
+ * @param guildID The ID of the guild.
87
+ * @param options The options for banning.
88
+ */
89
+ async bulkBan(guildID, options) {
90
+ const reason = options?.reason;
91
+ if (options?.reason) {
92
+ delete options.reason;
93
+ }
94
+ return this._manager.authRequest({
95
+ method: "POST",
96
+ path: Routes.GUILD_BULK_BAN(guildID),
97
+ json: {
98
+ delete_message_seconds: options.deleteMessageSeconds,
99
+ user_ids: options.userIDs
100
+ },
101
+ reason
102
+ }).then(data => ({
103
+ bannedUsers: data.banned_users,
104
+ failedUsers: data.failed_users
105
+ }));
106
+ }
107
+ /**
108
+ * Create a guild. This can only be used by bots in under 10 guilds.
109
+ * @param options The options for creating the guild.
110
+ * @caching This method **does not** cache its result.
111
+ */
112
+ async create(options) {
113
+ if (options.icon) {
114
+ options.icon = this._manager.client.util._convertImage(options.icon, "icon");
115
+ }
116
+ return this._manager.authRequest({
117
+ method: "POST",
118
+ path: Routes.GUILDS,
119
+ json: {
120
+ afk_channel_id: options.afkChannelID,
121
+ afk_timeout: options.afkTimeout,
122
+ channels: options.channels,
123
+ default_message_notifications: options.defaultMessageNotifications,
124
+ explicit_content_filter: options.explicitContentFilter,
125
+ icon: options.icon,
126
+ name: options.name,
127
+ region: options.region,
128
+ roles: options.roles,
129
+ system_channel_flags: options.systemChannelFlags,
130
+ system_channel_id: options.systemChannelID,
131
+ verification_level: options.verificationLevel
132
+ }
133
+ }).then(data => new Guild_1.default(data, this._manager.client, true));
134
+ }
135
+ /**
136
+ * Create an auto moderation rule for a guild.
137
+ * @param guildID The ID of the guild.
138
+ * @param options The options for creating the rule.
139
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
140
+ * @caches {@link Guild#autoModerationRules | Guild#autoModerationRules}
141
+ */
142
+ async createAutoModerationRule(guildID, options) {
143
+ const reason = options.reason;
144
+ if (options.reason) {
145
+ delete options.reason;
146
+ }
147
+ return this._manager.authRequest({
148
+ method: "POST",
149
+ path: Routes.GUILD_AUTOMOD_RULES(guildID),
150
+ json: {
151
+ actions: options.actions.map(a => ({
152
+ metadata: {
153
+ channel_id: a.metadata.channelID,
154
+ custom_message: a.metadata.customMessage,
155
+ duration_seconds: a.metadata.durationSeconds
156
+ },
157
+ type: a.type
158
+ })),
159
+ enabled: options.enabled,
160
+ event_type: options.eventType,
161
+ exempt_channels: options.exemptChannels,
162
+ exempt_roles: options.exemptRoles,
163
+ name: options.name,
164
+ trigger_metadata: options.triggerMetadata ? {
165
+ allow_list: options.triggerMetadata.allowList,
166
+ keyword_filter: options.triggerMetadata.keywordFilter,
167
+ mention_raid_protection_enabled: options.triggerMetadata.mentionRaidProtectionEnabled,
168
+ mention_total_limit: options.triggerMetadata.mentionTotalLimit,
169
+ presets: options.triggerMetadata.presets,
170
+ regex_patterns: options.triggerMetadata.regexPatterns
171
+ } : undefined,
172
+ trigger_type: options.triggerType
173
+ },
174
+ reason
175
+ }).then(data => this._manager.client.guilds.get(guildID)?.autoModerationRules.update(data) ?? new AutoModerationRule_1.default(data, this._manager.client));
176
+ }
177
+ /**
178
+ * Create a ban for a user.
179
+ * @param guildID The ID of the guild.
180
+ * @param userID The ID of the user to ban.
181
+ * @param options The options for creating the ban.
182
+ * @caching This method **does not** cache its result.
183
+ */
184
+ async createBan(guildID, userID, options) {
185
+ const reason = options?.reason;
186
+ if (options?.reason) {
187
+ delete options.reason;
188
+ }
189
+ if (options?.deleteMessageDays !== undefined && !Object.hasOwn(options, "deleteMessageSeconds")) {
190
+ options.deleteMessageSeconds = options.deleteMessageDays * 86400;
191
+ }
192
+ await this._manager.authRequest({
193
+ method: "PUT",
194
+ path: Routes.GUILD_BAN(guildID, userID),
195
+ json: { delete_message_seconds: options?.deleteMessageSeconds },
196
+ reason
197
+ });
198
+ }
199
+ /**
200
+ * Create a channel in a guild.
201
+ * @param guildID The ID of the guild.
202
+ * @param options The options for creating the channel.
203
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
204
+ * @caches {@link Guild#channels | Guild#channels}
205
+ */
206
+ async createChannel(guildID, type, options) {
207
+ const reason = options.reason;
208
+ if (options.reason) {
209
+ delete options.reason;
210
+ }
211
+ return this._manager.authRequest({
212
+ method: "POST",
213
+ path: Routes.GUILD_CHANNELS(guildID),
214
+ json: {
215
+ available_tags: options.availableTags ? options.availableTags.map(tag => ({
216
+ emoji_id: tag.emoji?.id,
217
+ emoji_name: tag.emoji?.name,
218
+ moderated: tag.moderated,
219
+ name: tag.name
220
+ })) : options.availableTags,
221
+ bitrate: options.bitrate,
222
+ default_auto_archive_duration: options.defaultAutoArchiveDuration,
223
+ default_forum_layout: options.defaultForumLayout,
224
+ default_reaction_emoji: options.defaultReactionEmoji ? { emoji_id: options.defaultReactionEmoji.id, emoji_name: options.defaultReactionEmoji.name } : options.defaultReactionEmoji,
225
+ default_sort_order: options.defaultSortOrder,
226
+ name: options.name,
227
+ nsfw: options.nsfw,
228
+ parent_id: options.parentID,
229
+ permission_overwrites: options.permissionOverwrites,
230
+ position: options.position,
231
+ rate_limit_per_user: options.rateLimitPerUser,
232
+ rtc_region: options.rtcRegion,
233
+ topic: options.topic,
234
+ type,
235
+ user_limit: options.userLimit,
236
+ video_quality_mode: options.videoQualityMode
237
+ },
238
+ reason
239
+ }).then(data => this._manager.client.util.updateChannel(data));
240
+ }
241
+ /**
242
+ * Create an emoji in a guild.
243
+ * @param guildID The ID of the guild.
244
+ * @param options The options for creating the emoji.
245
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
246
+ * @caches {@link Guild#emojis | Guild#emojis}<br>{@link Client#users | Client#users} (creator, if applicable)
247
+ */
248
+ async createEmoji(guildID, options) {
249
+ const reason = options.reason;
250
+ if (options.reason) {
251
+ delete options.reason;
252
+ }
253
+ if (options.image) {
254
+ options.image = this._manager.client.util._convertImage(options.image, "image");
255
+ }
256
+ return this._manager.authRequest({
257
+ method: "POST",
258
+ path: Routes.GUILD_EMOJIS(guildID),
259
+ json: {
260
+ image: options.image,
261
+ name: options.name,
262
+ roles: options.roles
263
+ },
264
+ reason
265
+ }).then(data => this._manager.client.guilds.get(guildID)?.emojis.update(data) ?? this._manager.client.util.convertEmoji(data));
266
+ }
267
+ /**
268
+ * Create a guild from a template. This can only be used by bots in less than 10 guilds.
269
+ *
270
+ * Note: This does NOT add the guild to the client's cache.
271
+ * @param code The code of the template to use.
272
+ * @param options The options for creating the guild.
273
+ * @caching This method **does not** cache its result.
274
+ */
275
+ async createFromTemplate(code, options) {
276
+ if (options.icon) {
277
+ options.icon = this._manager.client.util._convertImage(options.icon, "icon");
278
+ }
279
+ return this._manager.authRequest({
280
+ method: "POST",
281
+ path: Routes.GUILD_TEMPLATE_CODE(code),
282
+ json: {
283
+ icon: options.icon,
284
+ name: options.name
285
+ }
286
+ }).then(data => new Guild_1.default(data, this._manager.client, true));
287
+ }
288
+ /**
289
+ * Create a role.
290
+ * @param guildID The ID of the guild.
291
+ * @param options The options for creating the role.
292
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
293
+ * @caches {@link Guild#roles | Guild#roles}
294
+ */
295
+ async createRole(guildID, options) {
296
+ const reason = options?.reason;
297
+ if (options?.reason) {
298
+ delete options.reason;
299
+ }
300
+ if (options?.icon) {
301
+ options.icon = this._manager.client.util._convertImage(options.icon, "icon");
302
+ }
303
+ return this._manager.authRequest({
304
+ method: "POST",
305
+ path: Routes.GUILD_ROLES(guildID),
306
+ json: {
307
+ color: options?.color,
308
+ hoist: options?.hoist,
309
+ icon: options?.icon,
310
+ mentionable: options?.mentionable,
311
+ name: options?.name,
312
+ permissions: options?.permissions,
313
+ unicode_emoji: options?.unicodeEmoji
314
+ },
315
+ reason
316
+ }).then(data => this._manager.client.guilds.get(guildID)?.roles.update(data, guildID) ?? new Role_1.default(data, this._manager.client, guildID));
317
+ }
318
+ /**
319
+ * Create a scheduled event in a guild.
320
+ * @param guildID The ID of the guild.
321
+ * @param options The options for creating the scheduled event.
322
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
323
+ * @caches {@link Guild#scheduledEvents | Guild#scheduledEvents}
324
+ */
325
+ async createScheduledEvent(guildID, options) {
326
+ const reason = options.reason;
327
+ if (options.reason) {
328
+ delete options.reason;
329
+ }
330
+ if (options.image) {
331
+ options.image = this._manager.client.util._convertImage(options.image, "image");
332
+ }
333
+ return this._manager.authRequest({
334
+ method: "POST",
335
+ path: Routes.GUILD_SCHEDULED_EVENTS(guildID),
336
+ json: {
337
+ channel_id: options.channelID,
338
+ description: options.description,
339
+ entity_metadata: options.entityMetadata ? { location: options.entityMetadata.location } : undefined,
340
+ entity_type: options.entityType,
341
+ image: options.image,
342
+ name: options.name,
343
+ privacy_level: options.privacyLevel,
344
+ scheduled_end_time: options.scheduledEndTime,
345
+ scheduled_start_time: options.scheduledStartTime
346
+ },
347
+ reason
348
+ }).then(data => this._manager.client.guilds.get(guildID)?.scheduledEvents.update(data) ?? new GuildScheduledEvent_1.default(data, this._manager.client));
349
+ }
350
+ /**
351
+ * Create a sticker.
352
+ * @param guildID The ID of the guild.
353
+ * @param options The options for creating the sticker.
354
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
355
+ * @caches {@link Guild#stickers | Guild#stickers}<br>{@link Client#users | Client#users} (creator, if applicable)
356
+ */
357
+ async createSticker(guildID, options) {
358
+ const magic = this._manager.client.util.getMagic(options.file.contents);
359
+ let mime;
360
+ switch (magic) {
361
+ // png & apng have the same magic
362
+ case "89504E47": {
363
+ mime = "image/png";
364
+ break;
365
+ }
366
+ // lottie
367
+ case "7B227622": {
368
+ mime = "application/json";
369
+ break;
370
+ }
371
+ }
372
+ const form = new FormData();
373
+ form.append("description", options.description);
374
+ form.append("name", options.name);
375
+ form.append("tags", options.tags);
376
+ form.append("file", new Blob([options.file.contents], { type: mime }), options.file.name);
377
+ return this._manager.authRequest({
378
+ method: "POST",
379
+ path: Routes.GUILD_STICKERS(guildID),
380
+ form,
381
+ reason: options.reason
382
+ }).then(data => this._manager.client.guilds.get(guildID)?.stickers.update(data) ?? this._manager.client.util.convertSticker(data));
383
+ }
384
+ /**
385
+ * Create a guild template.
386
+ * @param guildID The ID of the guild to create a template from.
387
+ * @param options The options for creating the template.
388
+ */
389
+ async createTemplate(guildID, options) {
390
+ return this._manager.authRequest({
391
+ method: "POST",
392
+ path: Routes.GUILD_TEMPLATES(guildID),
393
+ json: {
394
+ description: options.description,
395
+ name: options.name
396
+ }
397
+ }).then(data => new GuildTemplate_1.default(data, this._manager.client));
398
+ }
399
+ /**
400
+ * Delete a guild.
401
+ * @param guildID The ID of the guild.
402
+ * @caching This method **does not** cache its result.
403
+ */
404
+ async delete(guildID) {
405
+ await this._manager.authRequest({
406
+ method: "DELETE",
407
+ path: Routes.GUILD(guildID)
408
+ });
409
+ }
410
+ /**
411
+ * Delete an auto moderation rule.
412
+ * @param guildID The ID of the guild.
413
+ * @param ruleID The ID of the rule to delete.
414
+ * @param reason The reason for deleting the rule.
415
+ * @caching This method **does not** cache its result.
416
+ */
417
+ async deleteAutoModerationRule(guildID, ruleID, reason) {
418
+ await this._manager.authRequest({
419
+ method: "DELETE",
420
+ path: Routes.GUILD_AUTOMOD_RULE(guildID, ruleID),
421
+ reason
422
+ });
423
+ }
424
+ /**
425
+ * Delete an emoji.
426
+ * @param guildID The ID of the guild.
427
+ * @param emojiID The ID of the emoji.
428
+ * @param reason The reason for deleting the emoji.
429
+ * @caching This method **does not** cache its result.
430
+ */
431
+ async deleteEmoji(guildID, emojiID, reason) {
432
+ await this._manager.authRequest({
433
+ method: "DELETE",
434
+ path: Routes.GUILD_EMOJI(guildID, emojiID),
435
+ reason
436
+ });
437
+ }
438
+ /**
439
+ * Delete an integration.
440
+ * @param guildID The ID of the guild.
441
+ * @param integrationID The ID of the integration.
442
+ * @param reason The reason for deleting the integration.
443
+ * @caching This method **does not** cache its result.
444
+ */
445
+ async deleteIntegration(guildID, integrationID, reason) {
446
+ await this._manager.authRequest({
447
+ method: "DELETE",
448
+ path: Routes.GUILD_INTEGRATION(guildID, integrationID),
449
+ reason
450
+ });
451
+ }
452
+ /**
453
+ * Delete a role.
454
+ * @param guildID The ID of the guild.
455
+ * @param roleID The ID of the role to delete.
456
+ * @param reason The reason for deleting the role.
457
+ * @caching This method **does not** cache its result.
458
+ */
459
+ async deleteRole(guildID, roleID, reason) {
460
+ await this._manager.authRequest({
461
+ method: "DELETE",
462
+ path: Routes.GUILD_ROLE(guildID, roleID),
463
+ reason
464
+ });
465
+ }
466
+ /**
467
+ * Delete a scheduled event.
468
+ * @param guildID The ID of the guild.
469
+ * @param eventID The ID of the scheduled event.
470
+ * @param reason The reason for deleting the scheduled event. Discord's docs do not explicitly state a reason can be provided, so it may not be used.
471
+ * @caching This method **does not** cache its result.
472
+ */
473
+ async deleteScheduledEvent(guildID, eventID, reason) {
474
+ await this._manager.authRequest({
475
+ method: "DELETE",
476
+ path: Routes.GUILD_SCHEDULED_EVENT(guildID, eventID),
477
+ reason
478
+ });
479
+ }
480
+ /**
481
+ * Delete a sticker.
482
+ * @param guildID The ID of the guild.
483
+ * @param stickerID The ID of the sticker to delete.
484
+ * @param reason The reason for deleting the sticker.
485
+ * @caching This method **does not** cache its result.
486
+ */
487
+ async deleteSticker(guildID, stickerID, reason) {
488
+ await this._manager.authRequest({
489
+ method: "DELETE",
490
+ path: Routes.GUILD_STICKER(guildID, stickerID),
491
+ reason
492
+ });
493
+ }
494
+ /**
495
+ * Delete a template.
496
+ * @param guildID The ID of the guild.
497
+ * @param code The code of the template.
498
+ * @caching This method **does not** cache its result.
499
+ */
500
+ async deleteTemplate(guildID, code) {
501
+ await this._manager.authRequest({
502
+ method: "DELETE",
503
+ path: Routes.GUILD_TEMPLATE(guildID, code)
504
+ });
505
+ }
506
+ /**
507
+ * Edit a guild.
508
+ * @param guildID The ID of the guild.
509
+ * @param options The options for editing the guild.
510
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not already cached.
511
+ * @caches {@link Client#guilds | Client#guilds}
512
+ */
513
+ async edit(guildID, options) {
514
+ const reason = options.reason;
515
+ if (options.reason) {
516
+ delete options.reason;
517
+ }
518
+ if (options.banner) {
519
+ options.banner = this._manager.client.util._convertImage(options.banner, "banner");
520
+ }
521
+ if (options.discoverySplash) {
522
+ options.discoverySplash = this._manager.client.util._convertImage(options.discoverySplash, "discovery splash");
523
+ }
524
+ if (options.icon) {
525
+ options.icon = this._manager.client.util._convertImage(options.icon, "icon");
526
+ }
527
+ if (options.splash) {
528
+ options.splash = this._manager.client.util._convertImage(options.splash, "splash");
529
+ }
530
+ return this._manager.authRequest({
531
+ method: "PATCH",
532
+ path: Routes.GUILD(guildID),
533
+ json: {
534
+ afk_channel_id: options.afkChannelID,
535
+ afk_timeout: options.afkTimeout,
536
+ banner: options.banner,
537
+ default_message_notifications: options.defaultMessageNotifications,
538
+ description: options.description,
539
+ discovery_splash: options.discoverySplash,
540
+ explicit_content_filter: options.explicitContentFilter,
541
+ features: options.features,
542
+ icon: options.icon,
543
+ name: options.name,
544
+ owner_id: options.ownerID,
545
+ preferred_locale: options.preferredLocale,
546
+ premium_progress_bar_enabled: options.premiumProgressBarEnabled,
547
+ public_updates_channel_id: options.publicUpdatesChannelID,
548
+ region: options.region,
549
+ rules_channel_id: options.rulesChannelID,
550
+ safety_alerts_channel_id: options.safetyAlertsChannelID,
551
+ splash: options.splash,
552
+ system_channel_flags: options.systemChannelFlags,
553
+ system_channel_id: options.systemChannelID,
554
+ verification_level: options.verificationLevel
555
+ },
556
+ reason
557
+ }).then(data => this._manager.client.guilds.has(guildID) ? this._manager.client.guilds.update(data, true) : new Guild_1.default(data, this._manager.client, true));
558
+ }
559
+ /**
560
+ * Edit an existing auto moderation rule.
561
+ * @param guildID The ID of the guild.
562
+ * @param ruleID The ID of the rule to edit.
563
+ * @param options The options for editing the rule.
564
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
565
+ * @caches {@link Guild#autoModerationRules | Guild#autoModerationRules}
566
+ */
567
+ async editAutoModerationRule(guildID, ruleID, options) {
568
+ const reason = options.reason;
569
+ if (options.reason) {
570
+ delete options.reason;
571
+ }
572
+ return this._manager.authRequest({
573
+ method: "PATCH",
574
+ path: Routes.GUILD_AUTOMOD_RULE(guildID, ruleID),
575
+ json: {
576
+ actions: options.actions?.map(a => ({
577
+ metadata: {
578
+ channel_id: a.metadata.channelID,
579
+ custom_message: a.metadata.customMessage,
580
+ duration_seconds: a.metadata.durationSeconds
581
+ },
582
+ type: a.type
583
+ })),
584
+ enabled: options.enabled,
585
+ event_type: options.eventType,
586
+ exempt_channels: options.exemptChannels,
587
+ exempt_roles: options.exemptRoles,
588
+ name: options.name,
589
+ trigger_metadata: options.triggerMetadata ? {
590
+ allow_list: options.triggerMetadata.allowList,
591
+ keyword_filter: options.triggerMetadata.keywordFilter,
592
+ mention_raid_protection_enabled: options.triggerMetadata.mentionRaidProtectionEnabled,
593
+ mention_total_limit: options.triggerMetadata.mentionTotalLimit,
594
+ presets: options.triggerMetadata.presets,
595
+ regex_patterns: options.triggerMetadata.regexPatterns
596
+ } : undefined
597
+ },
598
+ reason
599
+ }).then(data => this._manager.client.guilds.get(guildID)?.autoModerationRules.update(data) ?? new AutoModerationRule_1.default(data, this._manager.client));
600
+ }
601
+ /**
602
+ * Edit the positions of channels in a guild.
603
+ * @param guildID The ID of the guild.
604
+ * @param options The channels to move. Unedited channels do not need to be specified.
605
+ * @caching This method **does not** cache its result.
606
+ */
607
+ async editChannelPositions(guildID, options) {
608
+ await this._manager.authRequest({
609
+ method: "PATCH",
610
+ path: Routes.GUILD_CHANNELS(guildID),
611
+ json: options.map(o => ({
612
+ id: o.id,
613
+ lock_permissions: o.lockPermissions ?? null,
614
+ parent_id: o.parentID ?? null,
615
+ position: o.position ?? null
616
+ }))
617
+ });
618
+ }
619
+ /**
620
+ * Modify the current member in a guild.
621
+ * @param guildID The ID of the guild.
622
+ * @param options The options for editing the member.
623
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
624
+ * @caches {@link Guild#members | Guild#members}<br>{@link Guild#clientMember | Guild#clientMember}
625
+ */
626
+ async editCurrentMember(guildID, options) {
627
+ const reason = options.reason;
628
+ if (options.reason) {
629
+ delete options.reason;
630
+ }
631
+ return this._manager.authRequest({
632
+ method: "PATCH",
633
+ path: Routes.GUILD_MEMBER(guildID, "@me"),
634
+ json: { nick: options.nick },
635
+ reason
636
+ }).then(data => this._manager.client.util.updateMember(guildID, data.user.id, data));
637
+ }
638
+ /**
639
+ * Edit the current member's voice state in a guild. `channelID` is required, and the current member must already be in that channel. See [Discord's docs](https://discord.com/developers/docs/resources/guild#modify-current-user-voice-state-caveats) for more information.
640
+ * @param guildID The ID of the guild.
641
+ * @param options The options for editing the voice state.
642
+ * @caching This method **does not** cache its result.
643
+ */
644
+ async editCurrentUserVoiceState(guildID, options) {
645
+ await this._manager.authRequest({
646
+ method: "PATCH",
647
+ path: Routes.GUILD_VOICE_STATE(guildID, "@me"),
648
+ json: {
649
+ channel_id: options.channelID,
650
+ suppress: options.suppress,
651
+ request_to_speak_timestamp: options.requestToSpeakTimestamp
652
+ }
653
+ });
654
+ }
655
+ /**
656
+ * Edit an existing emoji.
657
+ * @param guildID The ID of the guild the emoji is in.
658
+ * @param options The options for editing the emoji.
659
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
660
+ * @caches {@link Guild#emojis | Guild#emojis}
661
+ */
662
+ async editEmoji(guildID, emojiID, options) {
663
+ const reason = options.reason;
664
+ if (options.reason) {
665
+ delete options.reason;
666
+ }
667
+ return this._manager.authRequest({
668
+ method: "PATCH",
669
+ path: Routes.GUILD_EMOJI(guildID, emojiID),
670
+ json: {
671
+ name: options.name,
672
+ roles: options.roles
673
+ },
674
+ reason
675
+ }).then(data => this._manager.client.guilds.get(guildID)?.emojis.update(data) ?? this._manager.client.util.convertEmoji(data));
676
+ }
677
+ /**
678
+ * Edit the incident actions for a guild.
679
+ * @param guildID The ID of the guild.
680
+ * @param options The options for editing the incident actions.
681
+ * @caching This method **does not** cache its result.
682
+ */
683
+ async editIncidentActions(guildID, options) {
684
+ const reason = options.reason;
685
+ if (options.reason) {
686
+ delete options.reason;
687
+ }
688
+ return this._manager.authRequest({
689
+ method: "PUT",
690
+ path: Routes.GUILD_INCIDENT_ACTIONS(guildID),
691
+ json: {
692
+ dmsDisabledUntil: options.dmsDisabledUntil,
693
+ invitesDisabledUntil: options.invitesDisabledUntil
694
+ },
695
+ reason
696
+ }).then(data => ({
697
+ dmsDisabledUntil: data.dms_disabled_until,
698
+ invitesDisabledUntil: data.invites_disabled_until
699
+ }));
700
+ }
701
+ /**
702
+ * Edit the [mfa level](https://discord.com/developers/docs/resources/guild#guild-object-mfa-level) of a guild. This can only be used by the guild owner.
703
+ * @param guildID The ID of the guild.
704
+ * @param options The options for editing the MFA level.
705
+ * @caching This method **does not** cache its result.
706
+ */
707
+ async editMFALevel(guildID, options) {
708
+ const reason = options.reason;
709
+ if (options.reason) {
710
+ delete options.reason;
711
+ }
712
+ return this._manager.authRequest({
713
+ method: "POST",
714
+ path: Routes.GUILD_MFA(guildID),
715
+ json: { level: options.level },
716
+ reason
717
+ });
718
+ }
719
+ /**
720
+ * Edit a guild member. Use editCurrentMember if you wish to update the nick of this client using the `CHANGE_NICKNAME` permission.
721
+ * @param guildID The ID of the guild.
722
+ * @param memberID The ID of the member.
723
+ * @param options The options for editing the member.
724
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
725
+ * @caches {@link Guild#members | Guild#members}
726
+ */
727
+ async editMember(guildID, memberID, options) {
728
+ const reason = options.reason;
729
+ if (options.reason) {
730
+ delete options.reason;
731
+ }
732
+ return this._manager.authRequest({
733
+ method: "PATCH",
734
+ path: Routes.GUILD_MEMBER(guildID, memberID),
735
+ json: {
736
+ channel_id: options.channelID,
737
+ communication_disabled_until: options.communicationDisabledUntil,
738
+ deaf: options.deaf,
739
+ flags: options.flags,
740
+ mute: options.mute,
741
+ nick: options.nick,
742
+ roles: options.roles
743
+ },
744
+ reason
745
+ }).then(data => this._manager.client.util.updateMember(guildID, memberID, data));
746
+ }
747
+ /**
748
+ * Edit a guild's onboarding configuration.
749
+ * @param guildID The ID of the guild.
750
+ * @param options The options for editing the onboarding configuration.
751
+ * @caching This method **does not** cache its result.
752
+ */
753
+ async editOnboarding(guildID, options) {
754
+ const reason = options.reason;
755
+ if (options.reason) {
756
+ delete options.reason;
757
+ }
758
+ return this._manager.authRequest({
759
+ method: "PATCH",
760
+ path: Routes.GUILD_ONBOARDING(guildID),
761
+ json: {
762
+ enabled: options.enabled,
763
+ default_channel_ids: options.defaultChannelIDs,
764
+ prompts: options.prompts?.map(p => ({
765
+ id: p.id,
766
+ in_oboarding: p.inOnboarding,
767
+ options: p.options.map(o => ({
768
+ channel_ids: o.channelIDs,
769
+ description: o.description,
770
+ emoji: o.emoji,
771
+ id: o.id,
772
+ role_ids: o.roleIDs,
773
+ title: o.title
774
+ })),
775
+ required: p.required,
776
+ single_select: p.singleSelect,
777
+ title: p.title
778
+ })),
779
+ mode: options.mode
780
+ },
781
+ reason
782
+ }).then(data => ({
783
+ defaultChannelIDs: data.default_channel_ids,
784
+ enabled: data.enabled,
785
+ guildID: data.guild_id,
786
+ mode: data.mode,
787
+ prompts: data.prompts.map(p => ({
788
+ id: p.id,
789
+ inOnboarding: p.in_onboarding,
790
+ options: p.options.map(o => ({
791
+ channelIDs: o.channel_ids,
792
+ description: o.description,
793
+ emoji: o.emoji,
794
+ id: o.id,
795
+ roleIDs: o.role_ids,
796
+ title: o.title
797
+ })),
798
+ required: p.required,
799
+ singleSelect: p.single_select,
800
+ title: p.title
801
+ }))
802
+ }));
803
+ }
804
+ /**
805
+ * Edit an existing role.
806
+ * @param guildID The ID of the guild.
807
+ * @param options The options for editing the role.
808
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
809
+ * @caches {@link Guild#roles | Guild#roles}
810
+ */
811
+ async editRole(guildID, roleID, options) {
812
+ const reason = options.reason;
813
+ if (options.reason) {
814
+ delete options.reason;
815
+ }
816
+ if (options.icon) {
817
+ options.icon = this._manager.client.util._convertImage(options.icon, "icon");
818
+ }
819
+ return this._manager.authRequest({
820
+ method: "PATCH",
821
+ path: Routes.GUILD_ROLE(guildID, roleID),
822
+ json: {
823
+ color: options.color,
824
+ hoist: options.hoist,
825
+ icon: options.icon,
826
+ mentionable: options.mentionable,
827
+ name: options.name,
828
+ permissions: options.permissions,
829
+ unicode_emoji: options.unicodeEmoji
830
+ },
831
+ reason
832
+ }).then(data => this._manager.client.guilds.get(guildID)?.roles.update(data, guildID) ?? new Role_1.default(data, this._manager.client, guildID));
833
+ }
834
+ /**
835
+ * Edit the position of roles in a guild.
836
+ * @param guildID The ID of the guild.
837
+ * @param options The roles to move.
838
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
839
+ * @caches {@link Guild#roles | Guild#roles}
840
+ */
841
+ async editRolePositions(guildID, options, reason) {
842
+ const guild = this._manager.client.guilds.get(guildID);
843
+ return this._manager.authRequest({
844
+ method: "PATCH",
845
+ path: Routes.GUILD_ROLES(guildID),
846
+ json: options.map(o => ({
847
+ id: o.id,
848
+ position: o.position
849
+ })),
850
+ reason
851
+ }).then(data => data.map(role => guild?.roles.update(role, guildID) ?? new Role_1.default(role, this._manager.client, guildID)));
852
+ }
853
+ /**
854
+ * Edit an existing scheduled event in a guild.
855
+ * @param guildID The ID of the guild.
856
+ * @param options The options for editing the scheduled event.
857
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
858
+ * @caches {@link Guild#scheduledEvents | Guild#scheduledEvents}
859
+ */
860
+ async editScheduledEvent(guildID, options) {
861
+ const reason = options.reason;
862
+ if (options.reason) {
863
+ delete options.reason;
864
+ }
865
+ if (options.image) {
866
+ options.image = this._manager.client.util._convertImage(options.image, "image");
867
+ }
868
+ return this._manager.authRequest({
869
+ method: "POST",
870
+ path: Routes.GUILD_SCHEDULED_EVENTS(guildID),
871
+ json: {
872
+ channel_id: options.channelID,
873
+ description: options.description,
874
+ entity_metadata: options.entityMetadata ? { location: options.entityMetadata.location } : undefined,
875
+ entity_type: options.entityType,
876
+ image: options.image,
877
+ name: options.name,
878
+ privacy_level: options.privacyLevel,
879
+ status: options.status,
880
+ scheduled_end_time: options.scheduledEndTime,
881
+ scheduled_start_time: options.scheduledStartTime
882
+ },
883
+ reason
884
+ }).then(data => this._manager.client.guilds.get(guildID)?.scheduledEvents.update(data) ?? new GuildScheduledEvent_1.default(data, this._manager.client));
885
+ }
886
+ /**
887
+ * Edit a sticker.
888
+ * @param guildID The ID of the guild.
889
+ * @param options The options for editing the sticker.
890
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
891
+ * @caches {@link Guild#stickers | Guild#stickers}
892
+ */
893
+ async editSticker(guildID, stickerID, options) {
894
+ return this._manager.authRequest({
895
+ method: "PATCH",
896
+ path: Routes.GUILD_STICKER(guildID, stickerID),
897
+ json: {
898
+ description: options.description,
899
+ name: options.name,
900
+ tags: options.tags
901
+ },
902
+ reason: options.reason
903
+ }).then(data => this._manager.client.guilds.get(guildID)?.stickers.update(data) ?? this._manager.client.util.convertSticker(data));
904
+ }
905
+ /**
906
+ * Edit a guild template.
907
+ * @param guildID The ID of the guild.
908
+ * @param code The code of the template.
909
+ * @param options The options for editing the template.
910
+ * @caching This method **does not** cache its result.
911
+ */
912
+ async editTemplate(guildID, code, options) {
913
+ return this._manager.authRequest({
914
+ method: "POST",
915
+ path: Routes.GUILD_TEMPLATE(guildID, code),
916
+ json: {
917
+ code,
918
+ description: options.description,
919
+ name: options.name
920
+ }
921
+ }).then(data => new GuildTemplate_1.default(data, this._manager.client));
922
+ }
923
+ /**
924
+ * Edit a guild member's voice state. `channelID` is required, and the user must already be in that channel. See [Discord's docs](https://discord.com/developers/docs/resources/guild#modify-user-voice-state) for more information.
925
+ * @param guildID The ID of the guild.
926
+ * @param memberID The ID of the member.
927
+ * @param options The options for editing the voice state.
928
+ * @caching This method **does not** cache its result.
929
+ */
930
+ async editUserVoiceState(guildID, memberID, options) {
931
+ await this._manager.authRequest({
932
+ method: "PATCH",
933
+ path: Routes.GUILD_VOICE_STATE(guildID, memberID),
934
+ json: {
935
+ channel_id: options.channelID,
936
+ suppress: options.suppress
937
+ }
938
+ });
939
+ }
940
+ /**
941
+ * Edit the welcome screen in a guild.
942
+ * @param guildID The ID of the guild.
943
+ * @param options The options for editing the welcome screen.
944
+ * @caching This method **does not** cache its result.
945
+ */
946
+ async editWelcomeScreen(guildID, options) {
947
+ const reason = options.reason;
948
+ if (options.reason) {
949
+ delete options.reason;
950
+ }
951
+ return this._manager.authRequest({
952
+ method: "PATCH",
953
+ path: Routes.GUILD_WELCOME_SCREEN(guildID),
954
+ json: {
955
+ description: options.description,
956
+ enabled: options.enabled,
957
+ welcome_channels: options.welcomeChannels.map(ch => ({
958
+ channel_id: ch.channelID,
959
+ description: ch.description,
960
+ emoji_id: ch.emojiID,
961
+ emoji_name: ch.emojiName
962
+ }))
963
+ },
964
+ reason
965
+ }).then(data => ({
966
+ description: data.description,
967
+ welcomeChannels: data.welcome_channels.map(channel => ({
968
+ channelID: channel.channel_id,
969
+ description: channel.description,
970
+ emojiID: channel.emoji_id,
971
+ emojiName: channel.emoji_name
972
+ }))
973
+ }));
974
+ }
975
+ /**
976
+ * Edit the widget of a guild.
977
+ * @param guildID The ID of the guild.
978
+ * @param options The options for editing the widget.
979
+ * @caching This method **does not** cache its result.
980
+ */
981
+ async editWidget(guildID, options) {
982
+ return this._manager.authRequest({
983
+ method: "POST",
984
+ path: Routes.GUILD_WIDGET(guildID),
985
+ json: {
986
+ channel_id: options.channelID,
987
+ enabled: options.enabled
988
+ }
989
+ }).then(data => ({
990
+ channels: data.channels,
991
+ id: data.id,
992
+ instantInvite: data.instant_invite,
993
+ members: data.members.map(m => ({
994
+ activity: m.activity,
995
+ avatar: m.avatar,
996
+ avatarURL: m.avatar_url,
997
+ discriminator: m.discriminator,
998
+ id: m.id,
999
+ status: m.status,
1000
+ tag: m.username,
1001
+ username: m.username
1002
+ })),
1003
+ name: data.name,
1004
+ presenceCount: data.presence_count
1005
+ }));
1006
+ }
1007
+ /**
1008
+ * Get a guild.
1009
+ * @param guildID The ID of the guild.
1010
+ * @param withCounts If the approximate number of members and online members should be included.
1011
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not already cached.
1012
+ * @caches {@link Client#guilds | Client#guilds}
1013
+ */
1014
+ async get(guildID, withCounts) {
1015
+ const query = new URLSearchParams();
1016
+ if (withCounts !== undefined) {
1017
+ query.set("with_counts", withCounts.toString());
1018
+ }
1019
+ return this._manager.authRequest({
1020
+ method: "GET",
1021
+ path: Routes.GUILD(guildID),
1022
+ query
1023
+ }).then(data => this._manager.client.guilds.has(guildID) ? this._manager.client.guilds.update(data, true) : new Guild_1.default(data, this._manager.client, true));
1024
+ }
1025
+ /**
1026
+ * Get the active threads in a guild.
1027
+ * @param guildID The ID of the guild.
1028
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1029
+ * @caches {@link Guild#threads | Guild#threads}
1030
+ */
1031
+ async getActiveThreads(guildID) {
1032
+ return this._manager.authRequest({
1033
+ method: "GET",
1034
+ path: Routes.GUILD_ACTIVE_THREADS(guildID)
1035
+ }).then(data => ({
1036
+ members: data.members.map(member => ({
1037
+ flags: member.flags,
1038
+ id: member.id,
1039
+ joinTimestamp: new Date(member.join_timestamp),
1040
+ userID: member.user_id
1041
+ })),
1042
+ threads: data.threads.map(rawThread => this._manager.client.util.updateThread(rawThread))
1043
+ }));
1044
+ }
1045
+ /**
1046
+ * Get a guild's audit log.
1047
+ * @param guildID The ID of the guild.
1048
+ * @param options The options for getting the audit logs.
1049
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1050
+ * @caches {@link Guild#autoModerationRules | Guild#autoModerationRules}<br>{@link Guild#scheduledEvents | Guild#scheduledEvents}<br>{@link Guild#integrations | Guild#integrations}<br>{@link Guild#threads | Guild#threads}<br>{@link Client#users | Client#users}
1051
+ */
1052
+ async getAuditLog(guildID, options) {
1053
+ const guild = this._manager.client.guilds.get(guildID);
1054
+ const query = new URLSearchParams();
1055
+ if (options?.actionType !== undefined) {
1056
+ query.set("action_type", options.actionType.toString());
1057
+ }
1058
+ if (options?.before !== undefined) {
1059
+ query.set("before", options.before);
1060
+ }
1061
+ if (options?.limit !== undefined) {
1062
+ query.set("limit", options.limit.toString());
1063
+ }
1064
+ if (options?.userID !== undefined) {
1065
+ query.set("user_id", options.userID);
1066
+ }
1067
+ return this._manager.authRequest({
1068
+ method: "GET",
1069
+ path: Routes.GUILD_AUDIT_LOG(guildID),
1070
+ query
1071
+ }).then(data => ({
1072
+ applicationCommands: data.application_commands.map(command => new ApplicationCommand_1.default(command, this._manager.client)),
1073
+ autoModerationRules: data.auto_moderation_rules.map(rule => guild?.autoModerationRules.update(rule) ?? new AutoModerationRule_1.default(rule, this._manager.client)),
1074
+ entries: data.audit_log_entries.map(entry => new AuditLogEntry_1.default(entry, this._manager.client)),
1075
+ guildScheduledEvents: data.guild_scheduled_events.map(event => guild?.scheduledEvents.update(event) ?? new GuildScheduledEvent_1.default(event, this._manager.client)),
1076
+ integrations: data.integrations.map(integration => guild?.integrations.update(integration, guildID) ?? new Integration_1.default(integration, this._manager.client, guildID)),
1077
+ threads: data.threads.map(rawThread => this._manager.client.util.updateThread(rawThread)),
1078
+ users: data.users.map(user => this._manager.client.users.update(user)),
1079
+ webhooks: data.webhooks.map(webhook => new Webhook_1.default(webhook, this._manager.client))
1080
+ }));
1081
+ }
1082
+ /**
1083
+ * Get an auto moderation rule for a guild.
1084
+ * @param guildID The ID of the guild.
1085
+ * @param ruleID The ID of the rule to get.
1086
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1087
+ * @caches {@link Guild#autoModerationRules | Guild#autoModerationRules}
1088
+ */
1089
+ async getAutoModerationRule(guildID, ruleID) {
1090
+ return this._manager.authRequest({
1091
+ method: "GET",
1092
+ path: Routes.GUILD_AUTOMOD_RULE(guildID, ruleID)
1093
+ }).then(data => this._manager.client.guilds.get(guildID)?.autoModerationRules.update(data) ?? new AutoModerationRule_1.default(data, this._manager.client));
1094
+ }
1095
+ /**
1096
+ * Get the auto moderation rules for a guild.
1097
+ * @param guildID The ID of the guild.
1098
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1099
+ * @caches {@link Guild#autoModerationRules | Guild#autoModerationRules}
1100
+ */
1101
+ async getAutoModerationRules(guildID) {
1102
+ const guild = this._manager.client.guilds.get(guildID);
1103
+ return this._manager.authRequest({
1104
+ method: "GET",
1105
+ path: Routes.GUILD_AUTOMOD_RULES(guildID)
1106
+ }).then(data => data.map(rule => guild?.autoModerationRules.update(rule) ?? new AutoModerationRule_1.default(rule, this._manager.client)));
1107
+ }
1108
+ /**
1109
+ * Get a ban.
1110
+ * @param guildID The ID of the guild.
1111
+ * @param userID The ID of the user to get the ban of.
1112
+ * @caching This method **does** cache part of its result.
1113
+ * @caches {@link Client#users | Client#users}
1114
+ */
1115
+ async getBan(guildID, userID) {
1116
+ return this._manager.authRequest({
1117
+ method: "GET",
1118
+ path: Routes.GUILD_BAN(guildID, userID)
1119
+ }).then(data => ({
1120
+ reason: data.reason,
1121
+ user: this._manager.client.users.update(data.user)
1122
+ }));
1123
+ }
1124
+ /**
1125
+ * Get the bans in a guild.
1126
+ * @param guildID The ID of the guild.
1127
+ * @param options The options for getting the bans.
1128
+ * @caching This method **does** cache part of its result.
1129
+ * @caches {@link Client#users | Client#users}
1130
+ */
1131
+ async getBans(guildID, options) {
1132
+ const _getBans = async (_options) => {
1133
+ const query = new URLSearchParams();
1134
+ if (_options?.after !== undefined) {
1135
+ query.set("after", _options.after);
1136
+ }
1137
+ if (_options?.before !== undefined) {
1138
+ query.set("before", _options.before);
1139
+ }
1140
+ if (_options?.limit !== undefined) {
1141
+ query.set("limit", _options.limit.toString());
1142
+ }
1143
+ return this._manager.authRequest({
1144
+ method: "GET",
1145
+ path: Routes.GUILD_BANS(guildID),
1146
+ query
1147
+ }).then(data => data.map(ban => ({
1148
+ reason: ban.reason,
1149
+ user: this._manager.client.users.update(ban.user)
1150
+ })));
1151
+ };
1152
+ const limit = options?.limit ?? 1000;
1153
+ let chosenOption;
1154
+ if (options?.after) {
1155
+ chosenOption = "after";
1156
+ }
1157
+ else if (options?.before) {
1158
+ chosenOption = "before";
1159
+ }
1160
+ else {
1161
+ chosenOption = "after";
1162
+ }
1163
+ let optionValue = options?.[chosenOption] ?? undefined;
1164
+ let bans = [];
1165
+ while (bans.length < limit) {
1166
+ const limitLeft = limit - bans.length;
1167
+ const limitToFetch = limitLeft <= 1000 ? limitLeft : 1000;
1168
+ this._manager.client.emit("debug", `Getting ${limitLeft} more ban${limitLeft === 1 ? "" : "s"} for ${guildID}: ${optionValue ?? ""}`);
1169
+ const bansChunk = await _getBans({
1170
+ limit: limitToFetch,
1171
+ [chosenOption]: optionValue
1172
+ });
1173
+ if (bansChunk.length === 0) {
1174
+ break;
1175
+ }
1176
+ bans = bans.concat(bansChunk);
1177
+ optionValue = bansChunk.at(-1).user.id;
1178
+ if (bansChunk.length < 1000) {
1179
+ break;
1180
+ }
1181
+ }
1182
+ return bans;
1183
+ }
1184
+ /**
1185
+ * Get the channels in a guild. Does not include threads.
1186
+ * @param guildID The ID of the guild.
1187
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1188
+ * @caches {@link Guild#channels | Guild#channels}
1189
+ */
1190
+ async getChannels(guildID) {
1191
+ return this._manager.authRequest({
1192
+ method: "GET",
1193
+ path: Routes.GUILD_CHANNELS(guildID)
1194
+ }).then(data => data.map(d => this._manager.client.util.updateChannel(d)));
1195
+ }
1196
+ /**
1197
+ * Get an emoji in a guild.
1198
+ * @param guildID The ID of the guild.
1199
+ * @param emojiID The ID of the emoji to get.
1200
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1201
+ * @caches {@link Guild#emojis | Guild#emojis}
1202
+ */
1203
+ async getEmoji(guildID, emojiID) {
1204
+ return this._manager.authRequest({
1205
+ method: "GET",
1206
+ path: Routes.GUILD_EMOJI(guildID, emojiID)
1207
+ }).then(data => this._manager.client.guilds.get(guildID)?.emojis.update(data) ?? this._manager.client.util.convertEmoji(data));
1208
+ }
1209
+ /**
1210
+ * Get the emojis in a guild.
1211
+ * @param guildID The ID of the guild.
1212
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1213
+ * @caches {@link Guild#emojis | Guild#emojis} (will be completely cleared and refilled)
1214
+ */
1215
+ async getEmojis(guildID) {
1216
+ return this._manager.authRequest({
1217
+ method: "GET",
1218
+ path: Routes.GUILD_EMOJIS(guildID)
1219
+ }).then(data => {
1220
+ const guild = this._manager.client.guilds.get(guildID);
1221
+ guild?.emojis.clear();
1222
+ return data.map(emoji => guild?.emojis.update(emoji) ?? this._manager.client.util.convertEmoji(emoji));
1223
+ });
1224
+ }
1225
+ /**
1226
+ * Get the integrations in a guild.
1227
+ * @param guildID The ID of the guild.
1228
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1229
+ * @caches {@link Guild#integrations | Guild#integrations}
1230
+ */
1231
+ async getIntegrations(guildID) {
1232
+ const guild = this._manager.client.guilds.get(guildID);
1233
+ return this._manager.authRequest({
1234
+ method: "GET",
1235
+ path: Routes.GUILD_INTEGRATIONS(guildID)
1236
+ }).then(data => data.map(integration => guild?.integrations.update(integration, guildID) ?? new Integration_1.default(integration, this._manager.client, guildID)));
1237
+ }
1238
+ /**
1239
+ * Get the invites of a guild.
1240
+ * @param guildID The ID of the guild to get the invites of.
1241
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1242
+ * @caches {@link Guild#invites | Guild#invites}
1243
+ */
1244
+ async getInvites(guildID) {
1245
+ const guild = this._manager.client.guilds.get(guildID);
1246
+ return this._manager.authRequest({
1247
+ method: "GET",
1248
+ path: Routes.GUILD_INVITES(guildID)
1249
+ }).then(data => data.map(invite => guild?.invites.update(invite) ?? new Invite_1.default(invite, this._manager.client)));
1250
+ }
1251
+ /**
1252
+ * Get a guild member.
1253
+ * @param guildID The ID of the guild.
1254
+ * @param memberID The ID of the member.
1255
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1256
+ * @caches {@link Guild#members | Guild#members}
1257
+ */
1258
+ async getMember(guildID, memberID) {
1259
+ return this._manager.authRequest({
1260
+ method: "GET",
1261
+ path: Routes.GUILD_MEMBER(guildID, memberID)
1262
+ }).then(data => this._manager.client.util.updateMember(guildID, memberID, data));
1263
+ }
1264
+ /**
1265
+ * Get a guild's members. This requires the `GUILD_MEMBERS` intent.
1266
+ * @param guildID The ID of the guild.
1267
+ * @param options The options for getting the members.
1268
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1269
+ * @caches {@link Guild#members | Guild#members}}
1270
+ */
1271
+ async getMembers(guildID, options) {
1272
+ const query = new URLSearchParams();
1273
+ if (options?.after !== undefined) {
1274
+ query.set("after", options.after);
1275
+ }
1276
+ if (options?.limit !== undefined) {
1277
+ query.set("limit", options.limit.toString());
1278
+ }
1279
+ return this._manager.authRequest({
1280
+ method: "GET",
1281
+ path: Routes.GUILD_MEMBERS(guildID),
1282
+ query
1283
+ }).then(data => data.map(d => this._manager.client.util.updateMember(guildID, d.user.id, d)));
1284
+ }
1285
+ /**
1286
+ * Get a guild's onboarding info.
1287
+ * @param guildID The ID of the guild.
1288
+ * @caching This method **does not** cache its result.
1289
+ */
1290
+ async getOnboarding(guildID) {
1291
+ return this._manager.authRequest({
1292
+ method: "GET",
1293
+ path: Routes.GUILD_ONBOARDING(guildID)
1294
+ }).then(data => ({
1295
+ defaultChannelIDs: data.default_channel_ids,
1296
+ enabled: data.enabled,
1297
+ guildID: data.guild_id,
1298
+ mode: data.mode,
1299
+ prompts: data.prompts.map(p => ({
1300
+ id: p.id,
1301
+ inOnboarding: p.in_onboarding,
1302
+ options: p.options.map(o => ({
1303
+ channelIDs: o.channel_ids,
1304
+ description: o.description,
1305
+ emoji: o.emoji,
1306
+ id: o.id,
1307
+ roleIDs: o.role_ids,
1308
+ title: o.title
1309
+ })),
1310
+ required: p.required,
1311
+ singleSelect: p.single_select,
1312
+ title: p.title
1313
+ }))
1314
+ }));
1315
+ }
1316
+ /**
1317
+ * Get a preview of a guild. If the client is not already in this guild, the guild must be lurkable.
1318
+ * @param guildID The ID of the guild.
1319
+ * @caching This method **does not** cache its result.
1320
+ */
1321
+ async getPreview(guildID) {
1322
+ return this._manager.authRequest({
1323
+ method: "GET",
1324
+ path: Routes.GUILD_PREVIEW(guildID)
1325
+ }).then(data => new GuildPreview_1.default(data, this._manager.client));
1326
+ }
1327
+ /**
1328
+ * Get the prune count of a guild.
1329
+ * @param guildID The ID of the guild.
1330
+ * @param options The options for getting the prune count.
1331
+ * @caching This method **does not** cache its result.
1332
+ */
1333
+ async getPruneCount(guildID, options) {
1334
+ const query = new URLSearchParams();
1335
+ if (options?.days !== undefined) {
1336
+ query.set("days", options.days.toString());
1337
+ }
1338
+ if (options?.includeRoles !== undefined) {
1339
+ query.set("include_roles", options.includeRoles.join(","));
1340
+ }
1341
+ return this._manager.authRequest({
1342
+ method: "GET",
1343
+ path: Routes.GUILD_PRUNE(guildID),
1344
+ query
1345
+ }).then(data => data.pruned);
1346
+ }
1347
+ /**
1348
+ * Get the roles in a guild.
1349
+ * @param guildID The ID of the guild.
1350
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1351
+ * @caches {@link Guild#roles | Guild#roles}
1352
+ */
1353
+ async getRoles(guildID) {
1354
+ const guild = this._manager.client.guilds.get(guildID);
1355
+ return this._manager.authRequest({
1356
+ method: "GET",
1357
+ path: Routes.GUILD_ROLES(guildID)
1358
+ }).then(data => data.map(role => guild?.roles.update(role, guildID) ?? new Role_1.default(role, this._manager.client, guildID)));
1359
+ }
1360
+ /**
1361
+ * Get a scheduled event.
1362
+ * @param guildID The ID of the guild.
1363
+ * @param eventID The ID of the scheduled event to get.
1364
+ * @param withUserCount If the number of users subscribed to the event should be included.
1365
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1366
+ * @caches {@link Guild#scheduledEvents | Guild#scheduledEvents}
1367
+ */
1368
+ async getScheduledEvent(guildID, eventID, withUserCount) {
1369
+ const guild = this._manager.client.guilds.get(guildID);
1370
+ const query = new URLSearchParams();
1371
+ if (withUserCount !== undefined) {
1372
+ query.set("with_user_count", withUserCount.toString());
1373
+ }
1374
+ return this._manager.authRequest({
1375
+ method: "GET",
1376
+ path: Routes.GUILD_SCHEDULED_EVENT(guildID, eventID),
1377
+ query
1378
+ }).then(data => guild?.scheduledEvents.update(data) ?? new GuildScheduledEvent_1.default(data, this._manager.client));
1379
+ }
1380
+ /**
1381
+ * Get the users subscribed to a scheduled event.
1382
+ * @param guildID The ID of the guild.
1383
+ * @param eventID The ID of the scheduled event.
1384
+ * @param options The options for getting the users.
1385
+ * @caching This method **does** cache part its result. Members will not be cached if the guild is not cached.
1386
+ * @caches {@link Client#users | Client#users}<br>{@link Guild#members | Guild#members}
1387
+ */
1388
+ async getScheduledEventUsers(guildID, eventID, options) {
1389
+ const guild = this._manager.client.guilds.get(guildID);
1390
+ const query = new URLSearchParams();
1391
+ if (options?.after !== undefined) {
1392
+ query.set("after", options.after);
1393
+ }
1394
+ if (options?.before !== undefined) {
1395
+ query.set("before", options.before);
1396
+ }
1397
+ if (options?.limit !== undefined) {
1398
+ query.set("limit", options.limit.toString());
1399
+ }
1400
+ if (options?.withMember !== undefined) {
1401
+ query.set("with_member", options.withMember.toString());
1402
+ }
1403
+ return this._manager.authRequest({
1404
+ method: "GET",
1405
+ path: Routes.GUILD_SCHEDULED_EVENT_USERS(guildID, eventID)
1406
+ }).then(data => data.map(d => ({
1407
+ guildScheduledEvent: guild?.scheduledEvents.get(d.guild_scheduled_event_id),
1408
+ guildScheduledEventID: d.guild_scheduled_event_id,
1409
+ user: this._manager.client.users.update(d.user),
1410
+ member: d.member ? this._manager.client.util.updateMember(guildID, d.member.user.id, d.member) : undefined
1411
+ })));
1412
+ }
1413
+ /**
1414
+ * Get a guild's scheduled events.
1415
+ * @param guildID The ID of the guild.
1416
+ * @param withUserCount If the number of users subscribed to the event should be included.
1417
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1418
+ * @caches {@link Guild#scheduledEvents | Guild#scheduledEvents}
1419
+ */
1420
+ async getScheduledEvents(guildID, withUserCount) {
1421
+ const guild = this._manager.client.guilds.get(guildID);
1422
+ const query = new URLSearchParams();
1423
+ if (withUserCount !== undefined) {
1424
+ query.set("with_user_count", withUserCount.toString());
1425
+ }
1426
+ return this._manager.authRequest({
1427
+ method: "GET",
1428
+ path: Routes.GUILD_SCHEDULED_EVENTS(guildID),
1429
+ query
1430
+ }).then(data => data.map(d => guild?.scheduledEvents.update(d) ?? new GuildScheduledEvent_1.default(d, this._manager.client)));
1431
+ }
1432
+ /**
1433
+ * Get a sticker. Response will include a user if the client has the `MANAGE_EMOJIS_AND_STICKERS` permissions.
1434
+ * @param guildID The ID of the guild.
1435
+ * @param stickerID The ID of the sticker to get.
1436
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1437
+ * @caches {@link Guild#stickers | Guild#stickers}
1438
+ */
1439
+ async getSticker(guildID, stickerID) {
1440
+ return this._manager.authRequest({
1441
+ method: "GET",
1442
+ path: Routes.GUILD_STICKER(guildID, stickerID)
1443
+ }).then(data => this._manager.client.guilds.get(guildID)?.stickers.update(data) ?? this._manager.client.util.convertSticker(data));
1444
+ }
1445
+ /**
1446
+ * Get a guild's stickers. Stickers will include a user if the client has the `MANAGE_EMOJIS_AND_STICKERS` permissions.
1447
+ * @param guildID The ID of the guild.
1448
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1449
+ * @caches {@link Guild#stickers | Guild#stickers} (will be completely cleared and refilled)
1450
+ */
1451
+ async getStickers(guildID) {
1452
+ return this._manager.authRequest({
1453
+ method: "GET",
1454
+ path: Routes.GUILD_STICKERS(guildID)
1455
+ }).then(data => {
1456
+ const guild = this._manager.client.guilds.get(guildID);
1457
+ guild?.stickers.clear();
1458
+ return data.map(sticker => guild?.stickers.update(sticker) ?? this._manager.client.util.convertSticker(sticker));
1459
+ });
1460
+ }
1461
+ /**
1462
+ * Get a guild template.
1463
+ * @param code The code of the template to get.
1464
+ * @caching This method **does not** cache its result.
1465
+ */
1466
+ async getTemplate(code) {
1467
+ return this._manager.authRequest({
1468
+ method: "GET",
1469
+ path: Routes.GUILD_TEMPLATE_CODE(code)
1470
+ }).then(data => new GuildTemplate_1.default(data, this._manager.client));
1471
+ }
1472
+ /**
1473
+ * Get a guild's templates.
1474
+ * @param guildID The ID of the guild.
1475
+ * @caching This method **does not** cache its result.
1476
+ */
1477
+ async getTemplates(guildID) {
1478
+ return this._manager.authRequest({
1479
+ method: "GET",
1480
+ path: Routes.GUILD_TEMPLATES(guildID)
1481
+ }).then(data => data.map(d => new GuildTemplate_1.default(d, this._manager.client)));
1482
+ }
1483
+ /**
1484
+ * Get the vanity url of a guild.
1485
+ * @param guildID The ID of the guild.
1486
+ * @caching This method **does not** cache its result.
1487
+ */
1488
+ async getVanityURL(guildID) {
1489
+ return this._manager.authRequest({
1490
+ method: "GET",
1491
+ path: Routes.GUILD_VANITY_URL(guildID)
1492
+ });
1493
+ }
1494
+ /**
1495
+ * Get the list of usable voice regions for a guild. This will return VIP servers when the guild is VIP-enabled.
1496
+ * @param guildID The ID of the guild.
1497
+ * @caching This method **does not** cache its result.
1498
+ */
1499
+ async getVoiceRegions(guildID) {
1500
+ return this._manager.authRequest({
1501
+ method: "GET",
1502
+ path: Routes.GUILD_VOICE_REGIONS(guildID)
1503
+ });
1504
+ }
1505
+ /**
1506
+ * Get the welcome screen for a guild.
1507
+ * @param guildID The ID of the guild.
1508
+ * @caching This method **does not** cache its result.
1509
+ */
1510
+ async getWelcomeScreen(guildID) {
1511
+ return this._manager.authRequest({
1512
+ method: "GET",
1513
+ path: Routes.GUILD_WELCOME_SCREEN(guildID)
1514
+ }).then(data => ({
1515
+ description: data.description,
1516
+ welcomeChannels: data.welcome_channels.map(channel => ({
1517
+ channelID: channel.channel_id,
1518
+ description: channel.description,
1519
+ emojiID: channel.emoji_id,
1520
+ emojiName: channel.emoji_name
1521
+ }))
1522
+ }));
1523
+ }
1524
+ /**
1525
+ * Get the widget of a guild.
1526
+ * @param guildID The ID of the guild.
1527
+ * @caching This method **does not** cache its result.
1528
+ */
1529
+ async getWidget(guildID) {
1530
+ return this._manager.authRequest({
1531
+ method: "GET",
1532
+ path: Routes.GUILD_WIDGET(guildID)
1533
+ }).then(data => ({
1534
+ channels: data.channels,
1535
+ id: data.id,
1536
+ instantInvite: data.instant_invite,
1537
+ members: data.members.map(m => ({
1538
+ activity: m.activity,
1539
+ avatar: m.avatar,
1540
+ avatarURL: m.avatar_url,
1541
+ discriminator: m.discriminator,
1542
+ id: m.id,
1543
+ status: m.status,
1544
+ tag: m.username,
1545
+ username: m.username
1546
+ })),
1547
+ name: data.name,
1548
+ presenceCount: data.presence_count
1549
+ }));
1550
+ }
1551
+ /**
1552
+ * Get the widget image of a guild.
1553
+ * @param guildID The ID of the guild.
1554
+ * @param style The style of the image.
1555
+ * @caching This method **does not** cache its result.
1556
+ */
1557
+ async getWidgetImage(guildID, style) {
1558
+ const query = new URLSearchParams();
1559
+ if (style !== undefined) {
1560
+ query.set("style", style);
1561
+ }
1562
+ return this._manager.request({
1563
+ method: "GET",
1564
+ path: Routes.GUILD_WIDGET_IMAGE(guildID),
1565
+ query
1566
+ });
1567
+ }
1568
+ /**
1569
+ * Get the raw JSON widget of a guild.
1570
+ * @param guildID The ID of the guild.
1571
+ * @caching This method **does not** cache its result.
1572
+ */
1573
+ async getWidgetJSON(guildID) {
1574
+ return this._manager.request({
1575
+ method: "GET",
1576
+ path: Routes.GUILD_WIDGET_JSON(guildID)
1577
+ });
1578
+ }
1579
+ /**
1580
+ * Get a guild's widget settings.
1581
+ * @param guildID The ID of the guild.
1582
+ * @caching This method **does not** cache its result.
1583
+ */
1584
+ async getWidgetSettings(guildID) {
1585
+ return this._manager.authRequest({
1586
+ method: "GET",
1587
+ path: Routes.GUILD_WIDGET(guildID)
1588
+ }).then(data => ({
1589
+ channelID: data.channel_id,
1590
+ enabled: data.enabled
1591
+ }));
1592
+ }
1593
+ /**
1594
+ * Remove a ban.
1595
+ * @param guildID The ID of the guild.
1596
+ * @param userID The ID of the user to remove the ban from.
1597
+ * @param reason The reason for removing the ban.
1598
+ * @caching This method **does not** cache its result.
1599
+ */
1600
+ async removeBan(guildID, userID, reason) {
1601
+ await this._manager.authRequest({
1602
+ method: "DELETE",
1603
+ path: Routes.GUILD_BAN(guildID, userID),
1604
+ reason
1605
+ });
1606
+ }
1607
+ /**
1608
+ * Remove a member from a guild.
1609
+ * @param guildID The ID of the guild.
1610
+ * @param memberID The ID of the user to remove.
1611
+ * @param reason The reason for the removal.
1612
+ * @caching This method **does not** cache its result.
1613
+ */
1614
+ async removeMember(guildID, memberID, reason) {
1615
+ await this._manager.authRequest({
1616
+ method: "DELETE",
1617
+ path: Routes.GUILD_MEMBER(guildID, memberID),
1618
+ reason
1619
+ });
1620
+ }
1621
+ /**
1622
+ * Remove a role from a member.
1623
+ * @param guildID The ID of the guild.
1624
+ * @param memberID The ID of the member.
1625
+ * @param roleID The ID of the role to remove.
1626
+ * @param reason The reason for removing the role.
1627
+ * @caching This method **does not** cache its result.
1628
+ */
1629
+ async removeMemberRole(guildID, memberID, roleID, reason) {
1630
+ await this._manager.authRequest({
1631
+ method: "DELETE",
1632
+ path: Routes.GUILD_MEMBER_ROLE(guildID, memberID, roleID),
1633
+ reason
1634
+ });
1635
+ }
1636
+ /**
1637
+ * Search the username & nicknames of members in a guild.
1638
+ * @param guildID The ID of the guild.
1639
+ * @param options The options to search with.
1640
+ * @caching This method **may** cache its result. The result will not be cached if the guild is not cached.
1641
+ * @caches {@link Guild#members | Guild#members}
1642
+ */
1643
+ async searchMembers(guildID, options) {
1644
+ const query = new URLSearchParams();
1645
+ query.set("query", options.query);
1646
+ if (options.limit !== undefined) {
1647
+ query.set("limit", options.limit.toString());
1648
+ }
1649
+ return this._manager.authRequest({
1650
+ method: "GET",
1651
+ path: Routes.GUILD_SEARCH_MEMBERS(guildID),
1652
+ query
1653
+ }).then(data => data.map(d => this._manager.client.util.updateMember(guildID, d.user.id, d)));
1654
+ }
1655
+ /**
1656
+ * Sync a guild template.
1657
+ * @param guildID The ID of the guild.
1658
+ * @param code The code of the template to sync.
1659
+ * @caching This method **does not** cache its result.
1660
+ */
1661
+ async syncTemplate(guildID, code) {
1662
+ return this._manager.authRequest({
1663
+ method: "POST",
1664
+ path: Routes.GUILD_TEMPLATE(guildID, code)
1665
+ }).then(data => new GuildTemplate_1.default(data, this._manager.client));
1666
+ }
1667
+ }
1668
+ exports.default = Guilds;
1669
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3JvdXRlcy9HdWlsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBd0RBLCtEQUF5QztBQUl6QyxvR0FBb0U7QUFDcEUsNEVBQTRDO0FBUzVDLHdGQUF3RDtBQUV4RCxzRkFBc0Q7QUFXdEQsc0VBQXNDO0FBRXRDLDBFQUEwQztBQUMxQyxvRkFBb0Q7QUFDcEQsa0dBQWtFO0FBQ2xFLHdGQUF3RDtBQUV4RCx3RUFBd0M7QUFHeEMsa0dBQWtFO0FBRWxFLHFJQUFxSTtBQUNySSxNQUFxQixNQUFNO0lBQ2YsUUFBUSxDQUFjO0lBQzlCLFlBQVksT0FBb0I7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBZSxFQUFFLE1BQWMsRUFBRSxPQUF5QjtRQUN0RSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFvQjtZQUNoRCxNQUFNLEVBQUUsS0FBSztZQUNiLElBQUksRUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7WUFDNUMsSUFBSSxFQUFJO2dCQUNKLFlBQVksRUFBRSxPQUFPLENBQUMsV0FBVztnQkFDakMsSUFBSSxFQUFVLE9BQU8sQ0FBQyxJQUFJO2dCQUMxQixJQUFJLEVBQVUsT0FBTyxDQUFDLElBQUk7Z0JBQzFCLElBQUksRUFBVSxPQUFPLENBQUMsSUFBSTtnQkFDMUIsS0FBSyxFQUFTLE9BQU8sQ0FBQyxLQUFLO2FBQzlCO1NBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFP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