@velliajs/discord 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +133 -0
  3. package/package.json +82 -0
  4. package/src/client/BaseClient.js +83 -0
  5. package/src/client/Client.js +591 -0
  6. package/src/client/WebhookClient.js +103 -0
  7. package/src/client/actions/Action.js +119 -0
  8. package/src/client/actions/ActionsManager.js +79 -0
  9. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  10. package/src/client/actions/AutoModerationActionExecution.js +26 -0
  11. package/src/client/actions/AutoModerationRuleCreate.js +27 -0
  12. package/src/client/actions/AutoModerationRuleDelete.js +31 -0
  13. package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
  14. package/src/client/actions/ChannelCreate.js +23 -0
  15. package/src/client/actions/ChannelDelete.js +23 -0
  16. package/src/client/actions/ChannelUpdate.js +33 -0
  17. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  18. package/src/client/actions/GuildBanAdd.js +20 -0
  19. package/src/client/actions/GuildBanRemove.js +25 -0
  20. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  21. package/src/client/actions/GuildDelete.js +44 -0
  22. package/src/client/actions/GuildEmojiCreate.js +20 -0
  23. package/src/client/actions/GuildEmojiDelete.js +19 -0
  24. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  25. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  26. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  27. package/src/client/actions/GuildMemberRemove.js +31 -0
  28. package/src/client/actions/GuildMemberUpdate.js +44 -0
  29. package/src/client/actions/GuildRoleCreate.js +25 -0
  30. package/src/client/actions/GuildRoleDelete.js +29 -0
  31. package/src/client/actions/GuildRoleUpdate.js +39 -0
  32. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  33. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  34. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  35. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  36. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  37. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  38. package/src/client/actions/GuildStickerCreate.js +20 -0
  39. package/src/client/actions/GuildStickerDelete.js +19 -0
  40. package/src/client/actions/GuildStickerUpdate.js +20 -0
  41. package/src/client/actions/GuildStickersUpdate.js +34 -0
  42. package/src/client/actions/GuildUpdate.js +33 -0
  43. package/src/client/actions/InteractionCreate.js +101 -0
  44. package/src/client/actions/InviteCreate.js +28 -0
  45. package/src/client/actions/InviteDelete.js +30 -0
  46. package/src/client/actions/MessageCreate.js +37 -0
  47. package/src/client/actions/MessageDelete.js +32 -0
  48. package/src/client/actions/MessageDeleteBulk.js +47 -0
  49. package/src/client/actions/MessageReactionAdd.js +55 -0
  50. package/src/client/actions/MessageReactionRemove.js +45 -0
  51. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  52. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  53. package/src/client/actions/MessageUpdate.js +26 -0
  54. package/src/client/actions/PresenceUpdate.js +42 -0
  55. package/src/client/actions/StageInstanceCreate.js +28 -0
  56. package/src/client/actions/StageInstanceDelete.js +31 -0
  57. package/src/client/actions/StageInstanceUpdate.js +30 -0
  58. package/src/client/actions/ThreadCreate.js +24 -0
  59. package/src/client/actions/ThreadDelete.js +26 -0
  60. package/src/client/actions/ThreadListSync.js +60 -0
  61. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  62. package/src/client/actions/ThreadMembersUpdate.js +47 -0
  63. package/src/client/actions/TypingStart.js +29 -0
  64. package/src/client/actions/UserUpdate.js +36 -0
  65. package/src/client/actions/VoiceStateUpdate.js +43 -0
  66. package/src/client/actions/WebhooksUpdate.js +20 -0
  67. package/src/client/voice/ClientVoiceManager.js +44 -0
  68. package/src/client/websocket/WebSocketManager.js +393 -0
  69. package/src/client/websocket/WebSocketShard.js +231 -0
  70. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  71. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  72. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  73. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  74. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  75. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  76. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  77. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  78. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  79. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  80. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  81. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  82. package/src/client/websocket/handlers/GUILD_CREATE.js +26 -0
  83. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  84. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  85. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  86. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  87. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  88. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  89. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  90. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  91. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  92. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  93. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  94. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  95. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  97. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  98. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  99. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  100. package/src/client/websocket/handlers/INTERACTION_CREATE.js +5 -0
  101. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  102. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  103. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  104. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  105. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  106. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  107. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  108. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  109. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  110. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  111. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  112. package/src/client/websocket/handlers/READY.js +27 -0
  113. package/src/client/websocket/handlers/RESUMED.js +14 -0
  114. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  115. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  116. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  117. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  118. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  119. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  120. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  121. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  122. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  123. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  124. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  125. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  126. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  128. package/src/client/websocket/handlers/index.js +64 -0
  129. package/src/errors/DJSError.js +48 -0
  130. package/src/errors/ErrorCodes.js +319 -0
  131. package/src/errors/Messages.js +170 -0
  132. package/src/errors/index.js +5 -0
  133. package/src/index.js +213 -0
  134. package/src/managers/ApplicationCommandManager.js +263 -0
  135. package/src/managers/ApplicationCommandPermissionsManager.js +434 -0
  136. package/src/managers/AutoModerationRuleManager.js +288 -0
  137. package/src/managers/BaseGuildEmojiManager.js +80 -0
  138. package/src/managers/BaseManager.js +19 -0
  139. package/src/managers/CachedManager.js +57 -0
  140. package/src/managers/CategoryChannelChildManager.js +77 -0
  141. package/src/managers/ChannelManager.js +128 -0
  142. package/src/managers/DataManager.js +61 -0
  143. package/src/managers/GuildApplicationCommandManager.js +28 -0
  144. package/src/managers/GuildBanManager.js +204 -0
  145. package/src/managers/GuildChannelManager.js +494 -0
  146. package/src/managers/GuildEmojiManager.js +174 -0
  147. package/src/managers/GuildEmojiRoleManager.js +118 -0
  148. package/src/managers/GuildForumThreadManager.js +83 -0
  149. package/src/managers/GuildInviteManager.js +213 -0
  150. package/src/managers/GuildManager.js +283 -0
  151. package/src/managers/GuildMemberManager.js +540 -0
  152. package/src/managers/GuildMemberRoleManager.js +204 -0
  153. package/src/managers/GuildScheduledEventManager.js +297 -0
  154. package/src/managers/GuildStickerManager.js +182 -0
  155. package/src/managers/GuildTextThreadManager.js +91 -0
  156. package/src/managers/MessageManager.js +259 -0
  157. package/src/managers/PermissionOverwriteManager.js +168 -0
  158. package/src/managers/PresenceManager.js +58 -0
  159. package/src/managers/ReactionManager.js +68 -0
  160. package/src/managers/ReactionUserManager.js +77 -0
  161. package/src/managers/RoleManager.js +360 -0
  162. package/src/managers/StageInstanceManager.js +154 -0
  163. package/src/managers/ThreadManager.js +204 -0
  164. package/src/managers/ThreadMemberManager.js +182 -0
  165. package/src/managers/UserManager.js +139 -0
  166. package/src/managers/VoiceStateManager.js +37 -0
  167. package/src/sharding/Shard.js +457 -0
  168. package/src/sharding/ShardClientUtil.js +285 -0
  169. package/src/sharding/ShardingManager.js +326 -0
  170. package/src/structures/ActionRow.js +46 -0
  171. package/src/structures/ActionRowBuilder.js +35 -0
  172. package/src/structures/AnonymousGuild.js +97 -0
  173. package/src/structures/ApplicationCommand.js +606 -0
  174. package/src/structures/ApplicationRoleConnectionMetadata.js +46 -0
  175. package/src/structures/Attachment.js +140 -0
  176. package/src/structures/AttachmentBuilder.js +116 -0
  177. package/src/structures/AutoModerationActionExecution.js +116 -0
  178. package/src/structures/AutoModerationRule.js +284 -0
  179. package/src/structures/AutocompleteInteraction.js +97 -0
  180. package/src/structures/Base.js +43 -0
  181. package/src/structures/BaseChannel.js +160 -0
  182. package/src/structures/BaseGuild.js +119 -0
  183. package/src/structures/BaseGuildEmoji.js +56 -0
  184. package/src/structures/BaseGuildTextChannel.js +186 -0
  185. package/src/structures/BaseGuildVoiceChannel.js +234 -0
  186. package/src/structures/BaseInteraction.js +344 -0
  187. package/src/structures/BaseSelectMenuComponent.js +56 -0
  188. package/src/structures/ButtonBuilder.js +44 -0
  189. package/src/structures/ButtonComponent.js +65 -0
  190. package/src/structures/ButtonInteraction.js +11 -0
  191. package/src/structures/CategoryChannel.js +45 -0
  192. package/src/structures/ChannelSelectMenuBuilder.js +31 -0
  193. package/src/structures/ChannelSelectMenuComponent.js +20 -0
  194. package/src/structures/ChannelSelectMenuInteraction.js +33 -0
  195. package/src/structures/ChatInputCommandInteraction.js +41 -0
  196. package/src/structures/ClientApplication.js +193 -0
  197. package/src/structures/ClientPresence.js +82 -0
  198. package/src/structures/ClientUser.js +185 -0
  199. package/src/structures/CommandInteraction.js +224 -0
  200. package/src/structures/CommandInteractionOptionResolver.js +308 -0
  201. package/src/structures/Component.js +47 -0
  202. package/src/structures/ContextMenuCommandInteraction.js +64 -0
  203. package/src/structures/DMChannel.js +129 -0
  204. package/src/structures/DirectoryChannel.js +36 -0
  205. package/src/structures/Embed.js +220 -0
  206. package/src/structures/EmbedBuilder.js +41 -0
  207. package/src/structures/Emoji.js +108 -0
  208. package/src/structures/ForumChannel.js +264 -0
  209. package/src/structures/Guild.js +1361 -0
  210. package/src/structures/GuildAuditLogs.js +91 -0
  211. package/src/structures/GuildAuditLogsEntry.js +527 -0
  212. package/src/structures/GuildBan.js +59 -0
  213. package/src/structures/GuildChannel.js +457 -0
  214. package/src/structures/GuildEmoji.js +148 -0
  215. package/src/structures/GuildMember.js +518 -0
  216. package/src/structures/GuildPreview.js +193 -0
  217. package/src/structures/GuildPreviewEmoji.js +27 -0
  218. package/src/structures/GuildScheduledEvent.js +439 -0
  219. package/src/structures/GuildTemplate.js +241 -0
  220. package/src/structures/Integration.js +220 -0
  221. package/src/structures/IntegrationApplication.js +85 -0
  222. package/src/structures/InteractionCollector.js +263 -0
  223. package/src/structures/InteractionResponse.js +102 -0
  224. package/src/structures/InteractionWebhook.js +59 -0
  225. package/src/structures/Invite.js +322 -0
  226. package/src/structures/InviteGuild.js +22 -0
  227. package/src/structures/InviteStageInstance.js +87 -0
  228. package/src/structures/MentionableSelectMenuBuilder.js +32 -0
  229. package/src/structures/MentionableSelectMenuComponent.js +11 -0
  230. package/src/structures/MentionableSelectMenuInteraction.js +71 -0
  231. package/src/structures/Message.js +997 -0
  232. package/src/structures/MessageCollector.js +146 -0
  233. package/src/structures/MessageComponentInteraction.js +107 -0
  234. package/src/structures/MessageContextMenuCommandInteraction.js +20 -0
  235. package/src/structures/MessageMentions.js +297 -0
  236. package/src/structures/MessagePayload.js +299 -0
  237. package/src/structures/MessageReaction.js +142 -0
  238. package/src/structures/ModalBuilder.js +34 -0
  239. package/src/structures/ModalSubmitFields.js +55 -0
  240. package/src/structures/ModalSubmitInteraction.js +121 -0
  241. package/src/structures/NewsChannel.js +32 -0
  242. package/src/structures/OAuth2Guild.js +28 -0
  243. package/src/structures/PartialGroupDMChannel.js +60 -0
  244. package/src/structures/PermissionOverwrites.js +196 -0
  245. package/src/structures/Presence.js +372 -0
  246. package/src/structures/ReactionCollector.js +229 -0
  247. package/src/structures/ReactionEmoji.js +31 -0
  248. package/src/structures/Role.js +458 -0
  249. package/src/structures/RoleSelectMenuBuilder.js +31 -0
  250. package/src/structures/RoleSelectMenuComponent.js +11 -0
  251. package/src/structures/RoleSelectMenuInteraction.js +33 -0
  252. package/src/structures/SelectMenuBuilder.js +26 -0
  253. package/src/structures/SelectMenuComponent.js +26 -0
  254. package/src/structures/SelectMenuInteraction.js +26 -0
  255. package/src/structures/SelectMenuOptionBuilder.js +26 -0
  256. package/src/structures/StageChannel.js +112 -0
  257. package/src/structures/StageInstance.js +167 -0
  258. package/src/structures/Sticker.js +272 -0
  259. package/src/structures/StickerPack.js +95 -0
  260. package/src/structures/StringSelectMenuBuilder.js +79 -0
  261. package/src/structures/StringSelectMenuComponent.js +20 -0
  262. package/src/structures/StringSelectMenuInteraction.js +21 -0
  263. package/src/structures/StringSelectMenuOptionBuilder.js +49 -0
  264. package/src/structures/Team.js +117 -0
  265. package/src/structures/TeamMember.js +70 -0
  266. package/src/structures/TextChannel.js +33 -0
  267. package/src/structures/TextInputBuilder.js +31 -0
  268. package/src/structures/TextInputComponent.js +29 -0
  269. package/src/structures/ThreadChannel.js +606 -0
  270. package/src/structures/ThreadMember.js +113 -0
  271. package/src/structures/Typing.js +74 -0
  272. package/src/structures/User.js +331 -0
  273. package/src/structures/UserContextMenuCommandInteraction.js +29 -0
  274. package/src/structures/UserSelectMenuBuilder.js +31 -0
  275. package/src/structures/UserSelectMenuComponent.js +11 -0
  276. package/src/structures/UserSelectMenuInteraction.js +51 -0
  277. package/src/structures/VoiceChannel.js +96 -0
  278. package/src/structures/VoiceRegion.js +46 -0
  279. package/src/structures/VoiceState.js +303 -0
  280. package/src/structures/Webhook.js +481 -0
  281. package/src/structures/WelcomeChannel.js +60 -0
  282. package/src/structures/WelcomeScreen.js +49 -0
  283. package/src/structures/Widget.js +88 -0
  284. package/src/structures/WidgetMember.js +99 -0
  285. package/src/structures/interfaces/Application.js +108 -0
  286. package/src/structures/interfaces/Collector.js +335 -0
  287. package/src/structures/interfaces/InteractionResponses.js +320 -0
  288. package/src/structures/interfaces/TextBasedChannel.js +413 -0
  289. package/src/util/APITypes.js +456 -0
  290. package/src/util/ActivityFlagsBitField.js +26 -0
  291. package/src/util/ApplicationFlagsBitField.js +26 -0
  292. package/src/util/BitField.js +176 -0
  293. package/src/util/ChannelFlagsBitField.js +41 -0
  294. package/src/util/Channels.js +150 -0
  295. package/src/util/Colors.js +73 -0
  296. package/src/util/Components.js +152 -0
  297. package/src/util/Constants.js +230 -0
  298. package/src/util/DataResolver.js +140 -0
  299. package/src/util/Enums.js +13 -0
  300. package/src/util/Events.js +160 -0
  301. package/src/util/Formatters.js +413 -0
  302. package/src/util/GuildMemberFlagsBitField.js +41 -0
  303. package/src/util/IntentsBitField.js +34 -0
  304. package/src/util/LimitedCollection.js +68 -0
  305. package/src/util/MessageFlagsBitField.js +32 -0
  306. package/src/util/Options.js +216 -0
  307. package/src/util/Partials.js +44 -0
  308. package/src/util/PermissionsBitField.js +104 -0
  309. package/src/util/ShardEvents.js +27 -0
  310. package/src/util/Status.js +33 -0
  311. package/src/util/Sweepers.js +467 -0
  312. package/src/util/SystemChannelFlagsBitField.js +43 -0
  313. package/src/util/ThreadMemberFlagsBitField.js +31 -0
  314. package/src/util/Transformers.js +36 -0
  315. package/src/util/UserFlagsBitField.js +32 -0
  316. package/src/util/Util.js +394 -0
  317. package/src/util/WebSocketShardEvents.js +25 -0
@@ -0,0 +1,97 @@
1
+ 'use strict';
2
+
3
+ const BaseGuild = require('./BaseGuild');
4
+
5
+ /**
6
+ * Bundles common attributes and methods between {@link Guild} and {@link InviteGuild}
7
+ * @extends {BaseGuild}
8
+ * @abstract
9
+ */
10
+ class AnonymousGuild extends BaseGuild {
11
+ constructor(client, data, immediatePatch = true) {
12
+ super(client, data);
13
+ if (immediatePatch) this._patch(data);
14
+ }
15
+
16
+ _patch(data) {
17
+ if ('features' in data) this.features = data.features;
18
+
19
+ if ('splash' in data) {
20
+ /**
21
+ * The hash of the guild invite splash image
22
+ * @type {?string}
23
+ */
24
+ this.splash = data.splash;
25
+ }
26
+
27
+ if ('banner' in data) {
28
+ /**
29
+ * The hash of the guild banner
30
+ * @type {?string}
31
+ */
32
+ this.banner = data.banner;
33
+ }
34
+
35
+ if ('description' in data) {
36
+ /**
37
+ * The description of the guild, if any
38
+ * @type {?string}
39
+ */
40
+ this.description = data.description;
41
+ }
42
+
43
+ if ('verification_level' in data) {
44
+ /**
45
+ * The verification level of the guild
46
+ * @type {GuildVerificationLevel}
47
+ */
48
+ this.verificationLevel = data.verification_level;
49
+ }
50
+
51
+ if ('vanity_url_code' in data) {
52
+ /**
53
+ * The vanity invite code of the guild, if any
54
+ * @type {?string}
55
+ */
56
+ this.vanityURLCode = data.vanity_url_code;
57
+ }
58
+
59
+ if ('nsfw_level' in data) {
60
+ /**
61
+ * The NSFW level of this guild
62
+ * @type {GuildNSFWLevel}
63
+ */
64
+ this.nsfwLevel = data.nsfw_level;
65
+ }
66
+
67
+ if ('premium_subscription_count' in data) {
68
+ /**
69
+ * The total number of boosts for this server
70
+ * @type {?number}
71
+ */
72
+ this.premiumSubscriptionCount = data.premium_subscription_count;
73
+ } else {
74
+ this.premiumSubscriptionCount ??= null;
75
+ }
76
+ }
77
+
78
+ /**
79
+ * The URL to this guild's banner.
80
+ * @param {ImageURLOptions} [options={}] Options for the image URL
81
+ * @returns {?string}
82
+ */
83
+ bannerURL(options = {}) {
84
+ return this.banner && this.client.rest.cdn.banner(this.id, this.banner, options);
85
+ }
86
+
87
+ /**
88
+ * The URL to this guild's invite splash image.
89
+ * @param {ImageURLOptions} [options={}] Options for the image URL
90
+ * @returns {?string}
91
+ */
92
+ splashURL(options = {}) {
93
+ return this.splash && this.client.rest.cdn.splash(this.id, this.splash, options);
94
+ }
95
+ }
96
+
97
+ module.exports = AnonymousGuild;
@@ -0,0 +1,606 @@
1
+ 'use strict';
2
+
3
+ const { DiscordSnowflake } = require('@sapphire/snowflake');
4
+ const { ApplicationCommandOptionType } = require('discord-api-types/v10');
5
+ const isEqual = require('fast-deep-equal');
6
+ const Base = require('./Base');
7
+ const ApplicationCommandPermissionsManager = require('../managers/ApplicationCommandPermissionsManager');
8
+ const PermissionsBitField = require('../util/PermissionsBitField');
9
+
10
+ /**
11
+ * Represents an application command.
12
+ * @extends {Base}
13
+ */
14
+ class ApplicationCommand extends Base {
15
+ constructor(client, data, guild, guildId) {
16
+ super(client);
17
+
18
+ /**
19
+ * The command's id
20
+ * @type {Snowflake}
21
+ */
22
+ this.id = data.id;
23
+
24
+ /**
25
+ * The parent application's id
26
+ * @type {Snowflake}
27
+ */
28
+ this.applicationId = data.application_id;
29
+
30
+ /**
31
+ * The guild this command is part of
32
+ * @type {?Guild}
33
+ */
34
+ this.guild = guild ?? null;
35
+
36
+ /**
37
+ * The guild's id this command is part of, this may be non-null when `guild` is `null` if the command
38
+ * was fetched from the `ApplicationCommandManager`
39
+ * @type {?Snowflake}
40
+ */
41
+ this.guildId = guild?.id ?? guildId ?? null;
42
+
43
+ /**
44
+ * The manager for permissions of this command on its guild or arbitrary guilds when the command is global
45
+ * @type {ApplicationCommandPermissionsManager}
46
+ */
47
+ this.permissions = new ApplicationCommandPermissionsManager(this);
48
+
49
+ /**
50
+ * The type of this application command
51
+ * @type {ApplicationCommandType}
52
+ */
53
+ this.type = data.type;
54
+
55
+ /**
56
+ * Whether this command is age-restricted (18+)
57
+ * @type {boolean}
58
+ */
59
+ this.nsfw = data.nsfw ?? false;
60
+
61
+ this._patch(data);
62
+ }
63
+
64
+ _patch(data) {
65
+ if ('name' in data) {
66
+ /**
67
+ * The name of this command
68
+ * @type {string}
69
+ */
70
+ this.name = data.name;
71
+ }
72
+
73
+ if ('name_localizations' in data) {
74
+ /**
75
+ * The name localizations for this command
76
+ * @type {?Object<Locale, string>}
77
+ */
78
+ this.nameLocalizations = data.name_localizations;
79
+ } else {
80
+ this.nameLocalizations ??= null;
81
+ }
82
+
83
+ if ('name_localized' in data) {
84
+ /**
85
+ * The localized name for this command
86
+ * @type {?string}
87
+ */
88
+ this.nameLocalized = data.name_localized;
89
+ } else {
90
+ this.nameLocalized ??= null;
91
+ }
92
+
93
+ if ('description' in data) {
94
+ /**
95
+ * The description of this command
96
+ * @type {string}
97
+ */
98
+ this.description = data.description;
99
+ }
100
+
101
+ if ('description_localizations' in data) {
102
+ /**
103
+ * The description localizations for this command
104
+ * @type {?Object<Locale, string>}
105
+ */
106
+ this.descriptionLocalizations = data.description_localizations;
107
+ } else {
108
+ this.descriptionLocalizations ??= null;
109
+ }
110
+
111
+ if ('description_localized' in data) {
112
+ /**
113
+ * The localized description for this command
114
+ * @type {?string}
115
+ */
116
+ this.descriptionLocalized = data.description_localized;
117
+ } else {
118
+ this.descriptionLocalized ??= null;
119
+ }
120
+
121
+ if ('options' in data) {
122
+ /**
123
+ * The options of this command
124
+ * @type {ApplicationCommandOption[]}
125
+ */
126
+ this.options = data.options.map(o => this.constructor.transformOption(o, true));
127
+ } else {
128
+ this.options ??= [];
129
+ }
130
+
131
+ if ('default_member_permissions' in data) {
132
+ /**
133
+ * The default bitfield used to determine whether this command be used in a guild
134
+ * @type {?Readonly<PermissionsBitField>}
135
+ */
136
+ this.defaultMemberPermissions = data.default_member_permissions
137
+ ? new PermissionsBitField(BigInt(data.default_member_permissions)).freeze()
138
+ : null;
139
+ } else {
140
+ this.defaultMemberPermissions ??= null;
141
+ }
142
+
143
+ if ('dm_permission' in data) {
144
+ /**
145
+ * Whether the command can be used in DMs
146
+ * <info>This property is always `null` on guild commands</info>
147
+ * @type {boolean|null}
148
+ */
149
+ this.dmPermission = data.dm_permission;
150
+ } else {
151
+ this.dmPermission ??= null;
152
+ }
153
+
154
+ if ('version' in data) {
155
+ /**
156
+ * Autoincrementing version identifier updated during substantial record changes
157
+ * @type {Snowflake}
158
+ */
159
+ this.version = data.version;
160
+ }
161
+ }
162
+
163
+ /**
164
+ * The timestamp the command was created at
165
+ * @type {number}
166
+ * @readonly
167
+ */
168
+ get createdTimestamp() {
169
+ return DiscordSnowflake.timestampFrom(this.id);
170
+ }
171
+
172
+ /**
173
+ * The time the command was created at
174
+ * @type {Date}
175
+ * @readonly
176
+ */
177
+ get createdAt() {
178
+ return new Date(this.createdTimestamp);
179
+ }
180
+
181
+ /**
182
+ * The manager that this command belongs to
183
+ * @type {ApplicationCommandManager}
184
+ * @readonly
185
+ */
186
+ get manager() {
187
+ return (this.guild ?? this.client.application).commands;
188
+ }
189
+
190
+ /**
191
+ * Data for creating or editing an application command.
192
+ * @typedef {Object} ApplicationCommandData
193
+ * @property {string} name The name of the command, must be in all lowercase if type is
194
+ * {@link ApplicationCommandType.ChatInput}
195
+ * @property {Object<Locale, string>} [nameLocalizations] The localizations for the command name
196
+ * @property {string} description The description of the command, if type is {@link ApplicationCommandType.ChatInput}
197
+ * @property {boolean} [nsfw] Whether the command is age-restricted
198
+ * @property {Object<Locale, string>} [descriptionLocalizations] The localizations for the command description,
199
+ * if type is {@link ApplicationCommandType.ChatInput}
200
+ * @property {ApplicationCommandType} [type=ApplicationCommandType.ChatInput] The type of the command
201
+ * @property {ApplicationCommandOptionData[]} [options] Options for the command
202
+ * @property {?PermissionResolvable} [defaultMemberPermissions] The bitfield used to determine the default permissions
203
+ * a member needs in order to run the command
204
+ * @property {boolean} [dmPermission] Whether the command is enabled in DMs
205
+ */
206
+
207
+ /**
208
+ * An option for an application command or subcommand.
209
+ * <info>In addition to the listed properties, when used as a parameter,
210
+ * API style `snake_case` properties can be used for compatibility with generators like `@discordjs/builders`.</info>
211
+ * <warn>Note that providing a value for the `camelCase` counterpart for any `snake_case` property
212
+ * will discard the provided `snake_case` property.</warn>
213
+ * @typedef {Object} ApplicationCommandOptionData
214
+ * @property {ApplicationCommandOptionType} type The type of the option
215
+ * @property {string} name The name of the option
216
+ * @property {Object<Locale, string>} [nameLocalizations] The name localizations for the option
217
+ * @property {string} description The description of the option
218
+ * @property {Object<Locale, string>} [descriptionLocalizations] The description localizations for the option
219
+ * @property {boolean} [autocomplete] Whether the autocomplete interaction is enabled for a
220
+ * {@link ApplicationCommandOptionType.String}, {@link ApplicationCommandOptionType.Integer} or
221
+ * {@link ApplicationCommandOptionType.Number} option
222
+ * @property {boolean} [required] Whether the option is required
223
+ * @property {ApplicationCommandOptionChoiceData[]} [choices] The choices of the option for the user to pick from
224
+ * @property {ApplicationCommandOptionData[]} [options] Additional options if this option is a subcommand (group)
225
+ * @property {ChannelType[]} [channelTypes] When the option type is channel,
226
+ * the allowed types of channels that can be selected
227
+ * @property {number} [minValue] The minimum value for an {@link ApplicationCommandOptionType.Integer} or
228
+ * {@link ApplicationCommandOptionType.Number} option
229
+ * @property {number} [maxValue] The maximum value for an {@link ApplicationCommandOptionType.Integer} or
230
+ * {@link ApplicationCommandOptionType.Number} option
231
+ * @property {number} [minLength] The minimum length for an {@link ApplicationCommandOptionType.String} option
232
+ * (maximum of `6000`)
233
+ * @property {number} [maxLength] The maximum length for an {@link ApplicationCommandOptionType.String} option
234
+ * (maximum of `6000`)
235
+ */
236
+
237
+ /**
238
+ * @typedef {Object} ApplicationCommandOptionChoiceData
239
+ * @property {string} name The name of the choice
240
+ * @property {Object<Locale, string>} [nameLocalizations] The localized names for this choice
241
+ * @property {string|number} value The value of the choice
242
+ */
243
+
244
+ /**
245
+ * Edits this application command.
246
+ * @param {Partial<ApplicationCommandData>} data The data to update the command with
247
+ * @returns {Promise<ApplicationCommand>}
248
+ * @example
249
+ * // Edit the description of this command
250
+ * command.edit({
251
+ * description: 'New description',
252
+ * })
253
+ * .then(console.log)
254
+ * .catch(console.error);
255
+ */
256
+ edit(data) {
257
+ return this.manager.edit(this, data, this.guildId);
258
+ }
259
+
260
+ /**
261
+ * Edits the name of this ApplicationCommand
262
+ * @param {string} name The new name of the command
263
+ * @returns {Promise<ApplicationCommand>}
264
+ */
265
+ setName(name) {
266
+ return this.edit({ name });
267
+ }
268
+
269
+ /**
270
+ * Edits the localized names of this ApplicationCommand
271
+ * @param {Object<Locale, string>} nameLocalizations The new localized names for the command
272
+ * @returns {Promise<ApplicationCommand>}
273
+ * @example
274
+ * // Edit the name localizations of this command
275
+ * command.setLocalizedNames({
276
+ * 'en-GB': 'test',
277
+ * 'pt-BR': 'teste',
278
+ * })
279
+ * .then(console.log)
280
+ * .catch(console.error)
281
+ */
282
+ setNameLocalizations(nameLocalizations) {
283
+ return this.edit({ nameLocalizations });
284
+ }
285
+
286
+ /**
287
+ * Edits the description of this ApplicationCommand
288
+ * @param {string} description The new description of the command
289
+ * @returns {Promise<ApplicationCommand>}
290
+ */
291
+ setDescription(description) {
292
+ return this.edit({ description });
293
+ }
294
+
295
+ /**
296
+ * Edits the localized descriptions of this ApplicationCommand
297
+ * @param {Object<Locale, string>} descriptionLocalizations The new localized descriptions for the command
298
+ * @returns {Promise<ApplicationCommand>}
299
+ * @example
300
+ * // Edit the description localizations of this command
301
+ * command.setDescriptionLocalizations({
302
+ * 'en-GB': 'A test command',
303
+ * 'pt-BR': 'Um comando de teste',
304
+ * })
305
+ * .then(console.log)
306
+ * .catch(console.error)
307
+ */
308
+ setDescriptionLocalizations(descriptionLocalizations) {
309
+ return this.edit({ descriptionLocalizations });
310
+ }
311
+
312
+ /**
313
+ * Edits the default member permissions of this ApplicationCommand
314
+ * @param {?PermissionResolvable} defaultMemberPermissions The default member permissions required to run this command
315
+ * @returns {Promise<ApplicationCommand>}
316
+ */
317
+ setDefaultMemberPermissions(defaultMemberPermissions) {
318
+ return this.edit({ defaultMemberPermissions });
319
+ }
320
+
321
+ /**
322
+ * Edits the DM permission of this ApplicationCommand
323
+ * @param {boolean} [dmPermission=true] Whether the command can be used in DMs
324
+ * @returns {Promise<ApplicationCommand>}
325
+ */
326
+ setDMPermission(dmPermission = true) {
327
+ return this.edit({ dmPermission });
328
+ }
329
+
330
+ /**
331
+ * Edits the options of this ApplicationCommand
332
+ * @param {ApplicationCommandOptionData[]} options The options to set for this command
333
+ * @returns {Promise<ApplicationCommand>}
334
+ */
335
+ setOptions(options) {
336
+ return this.edit({ options });
337
+ }
338
+
339
+ /**
340
+ * Deletes this command.
341
+ * @returns {Promise<ApplicationCommand>}
342
+ * @example
343
+ * // Delete this command
344
+ * command.delete()
345
+ * .then(console.log)
346
+ * .catch(console.error);
347
+ */
348
+ delete() {
349
+ return this.manager.delete(this, this.guildId);
350
+ }
351
+
352
+ /**
353
+ * Whether this command equals another command. It compares all properties, so for most operations
354
+ * it is advisable to just compare `command.id === command2.id` as it is much faster and is often
355
+ * what most users need.
356
+ * @param {ApplicationCommand|ApplicationCommandData|APIApplicationCommand} command The command to compare with
357
+ * @param {boolean} [enforceOptionOrder=false] Whether to strictly check that options and choices are in the same
358
+ * order in the array <info>The client may not always respect this ordering!</info>
359
+ * @returns {boolean}
360
+ */
361
+ equals(command, enforceOptionOrder = false) {
362
+ // If given an id, check if the id matches
363
+ if (command.id && this.id !== command.id) return false;
364
+
365
+ let defaultMemberPermissions = null;
366
+ let dmPermission = command.dmPermission ?? command.dm_permission;
367
+
368
+ if ('default_member_permissions' in command) {
369
+ defaultMemberPermissions = command.default_member_permissions
370
+ ? new PermissionsBitField(BigInt(command.default_member_permissions)).bitfield
371
+ : null;
372
+ }
373
+
374
+ if ('defaultMemberPermissions' in command) {
375
+ defaultMemberPermissions =
376
+ command.defaultMemberPermissions !== null
377
+ ? new PermissionsBitField(command.defaultMemberPermissions).bitfield
378
+ : null;
379
+ }
380
+
381
+ // Check top level parameters
382
+ if (
383
+ command.name !== this.name ||
384
+ ('description' in command && command.description !== this.description) ||
385
+ ('version' in command && command.version !== this.version) ||
386
+ (command.type && command.type !== this.type) ||
387
+ ('nsfw' in command && command.nsfw !== this.nsfw) ||
388
+ // Future proof for options being nullable
389
+ // TODO: remove ?? 0 on each when nullable
390
+ (command.options?.length ?? 0) !== (this.options?.length ?? 0) ||
391
+ defaultMemberPermissions !== (this.defaultMemberPermissions?.bitfield ?? null) ||
392
+ (dmPermission !== undefined && dmPermission !== this.dmPermission) ||
393
+ !isEqual(command.nameLocalizations ?? command.name_localizations ?? {}, this.nameLocalizations ?? {}) ||
394
+ !isEqual(
395
+ command.descriptionLocalizations ?? command.description_localizations ?? {},
396
+ this.descriptionLocalizations ?? {},
397
+ )
398
+ ) {
399
+ return false;
400
+ }
401
+
402
+ if (command.options) {
403
+ return this.constructor.optionsEqual(this.options, command.options, enforceOptionOrder);
404
+ }
405
+ return true;
406
+ }
407
+
408
+ /**
409
+ * Recursively checks that all options for an {@link ApplicationCommand} are equal to the provided options.
410
+ * In most cases it is better to compare using {@link ApplicationCommand#equals}
411
+ * @param {ApplicationCommandOptionData[]} existing The options on the existing command,
412
+ * should be {@link ApplicationCommand#options}
413
+ * @param {ApplicationCommandOptionData[]|APIApplicationCommandOption[]} options The options to compare against
414
+ * @param {boolean} [enforceOptionOrder=false] Whether to strictly check that options and choices are in the same
415
+ * order in the array <info>The client may not always respect this ordering!</info>
416
+ * @returns {boolean}
417
+ */
418
+ static optionsEqual(existing, options, enforceOptionOrder = false) {
419
+ if (existing.length !== options.length) return false;
420
+ if (enforceOptionOrder) {
421
+ return existing.every((option, index) => this._optionEquals(option, options[index], enforceOptionOrder));
422
+ }
423
+ const newOptions = new Map(options.map(option => [option.name, option]));
424
+ for (const option of existing) {
425
+ const foundOption = newOptions.get(option.name);
426
+ if (!foundOption || !this._optionEquals(option, foundOption)) return false;
427
+ }
428
+ return true;
429
+ }
430
+
431
+ /**
432
+ * Checks that an option for an {@link ApplicationCommand} is equal to the provided option
433
+ * In most cases it is better to compare using {@link ApplicationCommand#equals}
434
+ * @param {ApplicationCommandOptionData} existing The option on the existing command,
435
+ * should be from {@link ApplicationCommand#options}
436
+ * @param {ApplicationCommandOptionData|APIApplicationCommandOption} option The option to compare against
437
+ * @param {boolean} [enforceOptionOrder=false] Whether to strictly check that options or choices are in the same
438
+ * order in their array <info>The client may not always respect this ordering!</info>
439
+ * @returns {boolean}
440
+ * @private
441
+ */
442
+ static _optionEquals(existing, option, enforceOptionOrder = false) {
443
+ if (
444
+ option.name !== existing.name ||
445
+ option.type !== existing.type ||
446
+ option.description !== existing.description ||
447
+ option.autocomplete !== existing.autocomplete ||
448
+ (option.required ??
449
+ ([ApplicationCommandOptionType.Subcommand, ApplicationCommandOptionType.SubcommandGroup].includes(option.type)
450
+ ? undefined
451
+ : false)) !== existing.required ||
452
+ option.choices?.length !== existing.choices?.length ||
453
+ option.options?.length !== existing.options?.length ||
454
+ (option.channelTypes ?? option.channel_types)?.length !== existing.channelTypes?.length ||
455
+ (option.minValue ?? option.min_value) !== existing.minValue ||
456
+ (option.maxValue ?? option.max_value) !== existing.maxValue ||
457
+ (option.minLength ?? option.min_length) !== existing.minLength ||
458
+ (option.maxLength ?? option.max_length) !== existing.maxLength ||
459
+ !isEqual(option.nameLocalizations ?? option.name_localizations ?? {}, existing.nameLocalizations ?? {}) ||
460
+ !isEqual(
461
+ option.descriptionLocalizations ?? option.description_localizations ?? {},
462
+ existing.descriptionLocalizations ?? {},
463
+ )
464
+ ) {
465
+ return false;
466
+ }
467
+
468
+ if (existing.choices) {
469
+ if (
470
+ enforceOptionOrder &&
471
+ !existing.choices.every(
472
+ (choice, index) =>
473
+ choice.name === option.choices[index].name &&
474
+ choice.value === option.choices[index].value &&
475
+ isEqual(
476
+ choice.nameLocalizations ?? {},
477
+ option.choices[index].nameLocalizations ?? option.choices[index].name_localizations ?? {},
478
+ ),
479
+ )
480
+ ) {
481
+ return false;
482
+ }
483
+ if (!enforceOptionOrder) {
484
+ const newChoices = new Map(option.choices.map(choice => [choice.name, choice]));
485
+ for (const choice of existing.choices) {
486
+ const foundChoice = newChoices.get(choice.name);
487
+ if (!foundChoice || foundChoice.value !== choice.value) return false;
488
+ }
489
+ }
490
+ }
491
+
492
+ if (existing.channelTypes) {
493
+ const newTypes = option.channelTypes ?? option.channel_types;
494
+ for (const type of existing.channelTypes) {
495
+ if (!newTypes.includes(type)) return false;
496
+ }
497
+ }
498
+
499
+ if (existing.options) {
500
+ return this.optionsEqual(existing.options, option.options, enforceOptionOrder);
501
+ }
502
+ return true;
503
+ }
504
+
505
+ /**
506
+ * An option for an application command or subcommand.
507
+ * @typedef {Object} ApplicationCommandOption
508
+ * @property {ApplicationCommandOptionType} type The type of the option
509
+ * @property {string} name The name of the option
510
+ * @property {Object<Locale, string>} [nameLocalizations] The localizations for the option name
511
+ * @property {string} [nameLocalized] The localized name for this option
512
+ * @property {string} description The description of the option
513
+ * @property {Object<Locale, string>} [descriptionLocalizations] The localizations for the option description
514
+ * @property {string} [descriptionLocalized] The localized description for this option
515
+ * @property {boolean} [required] Whether the option is required
516
+ * @property {boolean} [autocomplete] Whether the autocomplete interaction is enabled for a
517
+ * {@link ApplicationCommandOptionType.String}, {@link ApplicationCommandOptionType.Integer} or
518
+ * {@link ApplicationCommandOptionType.Number} option
519
+ * @property {ApplicationCommandOptionChoice[]} [choices] The choices of the option for the user to pick from
520
+ * @property {ApplicationCommandOption[]} [options] Additional options if this option is a subcommand (group)
521
+ * @property {ApplicationCommandOptionAllowedChannelTypes[]} [channelTypes] When the option type is channel,
522
+ * the allowed types of channels that can be selected
523
+ * @property {number} [minValue] The minimum value for an {@link ApplicationCommandOptionType.Integer} or
524
+ * {@link ApplicationCommandOptionType.Number} option
525
+ * @property {number} [maxValue] The maximum value for an {@link ApplicationCommandOptionType.Integer} or
526
+ * {@link ApplicationCommandOptionType.Number} option
527
+ * @property {number} [minLength] The minimum length for an {@link ApplicationCommandOptionType.String} option
528
+ * (maximum of `6000`)
529
+ * @property {number} [maxLength] The maximum length for an {@link ApplicationCommandOptionType.String} option
530
+ * (maximum of `6000`)
531
+ */
532
+
533
+ /**
534
+ * A choice for an application command option.
535
+ * @typedef {Object} ApplicationCommandOptionChoice
536
+ * @property {string} name The name of the choice
537
+ * @property {?string} nameLocalized The localized name of the choice in the provided locale, if any
538
+ * @property {?Object<string, string>} [nameLocalizations] The localized names for this choice
539
+ * @property {string|number} value The value of the choice
540
+ */
541
+
542
+ /**
543
+ * Transforms an {@link ApplicationCommandOptionData} object into something that can be used with the API.
544
+ * @param {ApplicationCommandOptionData|ApplicationCommandOption} option The option to transform
545
+ * @param {boolean} [received] Whether this option has been received from Discord
546
+ * @returns {APIApplicationCommandOption}
547
+ * @private
548
+ */
549
+ static transformOption(option, received) {
550
+ const channelTypesKey = received ? 'channelTypes' : 'channel_types';
551
+ const minValueKey = received ? 'minValue' : 'min_value';
552
+ const maxValueKey = received ? 'maxValue' : 'max_value';
553
+ const minLengthKey = received ? 'minLength' : 'min_length';
554
+ const maxLengthKey = received ? 'maxLength' : 'max_length';
555
+ const nameLocalizationsKey = received ? 'nameLocalizations' : 'name_localizations';
556
+ const nameLocalizedKey = received ? 'nameLocalized' : 'name_localized';
557
+ const descriptionLocalizationsKey = received ? 'descriptionLocalizations' : 'description_localizations';
558
+ const descriptionLocalizedKey = received ? 'descriptionLocalized' : 'description_localized';
559
+ return {
560
+ type: option.type,
561
+ name: option.name,
562
+ [nameLocalizationsKey]: option.nameLocalizations ?? option.name_localizations,
563
+ [nameLocalizedKey]: option.nameLocalized ?? option.name_localized,
564
+ description: option.description,
565
+ [descriptionLocalizationsKey]: option.descriptionLocalizations ?? option.description_localizations,
566
+ [descriptionLocalizedKey]: option.descriptionLocalized ?? option.description_localized,
567
+ required:
568
+ option.required ??
569
+ (option.type === ApplicationCommandOptionType.Subcommand ||
570
+ option.type === ApplicationCommandOptionType.SubcommandGroup
571
+ ? undefined
572
+ : false),
573
+ autocomplete: option.autocomplete,
574
+ choices: option.choices?.map(choice => ({
575
+ name: choice.name,
576
+ [nameLocalizedKey]: choice.nameLocalized ?? choice.name_localized,
577
+ [nameLocalizationsKey]: choice.nameLocalizations ?? choice.name_localizations,
578
+ value: choice.value,
579
+ })),
580
+ options: option.options?.map(o => this.transformOption(o, received)),
581
+ [channelTypesKey]: option.channelTypes ?? option.channel_types,
582
+ [minValueKey]: option.minValue ?? option.min_value,
583
+ [maxValueKey]: option.maxValue ?? option.max_value,
584
+ [minLengthKey]: option.minLength ?? option.min_length,
585
+ [maxLengthKey]: option.maxLength ?? option.max_length,
586
+ };
587
+ }
588
+ }
589
+
590
+ module.exports = ApplicationCommand;
591
+
592
+ /* eslint-disable max-len */
593
+ /**
594
+ * @external APIApplicationCommand
595
+ * @see {@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-structure}
596
+ */
597
+
598
+ /**
599
+ * @external APIApplicationCommandOption
600
+ * @see {@link https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-structure}
601
+ */
602
+
603
+ /**
604
+ * @external ApplicationCommandOptionAllowedChannelTypes
605
+ * @see {@link https://discord.js.org/docs/packages/builders/stable/ApplicationCommandOptionAllowedChannelTypes:TypeAlias}
606
+ */