@ovencord/discord.js 14.16.3

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 (332) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +148 -0
  3. package/package.json +73 -0
  4. package/src/client/Client.ts +967 -0
  5. package/src/client/actions/Action.ts +141 -0
  6. package/src/client/actions/ActionsManager.ts +138 -0
  7. package/src/client/actions/ChannelCreate.ts +21 -0
  8. package/src/client/actions/ChannelDelete.ts +20 -0
  9. package/src/client/actions/ChannelUpdate.ts +38 -0
  10. package/src/client/actions/GuildChannelsPositionUpdate.ts +17 -0
  11. package/src/client/actions/GuildEmojiCreate.ts +17 -0
  12. package/src/client/actions/GuildEmojiDelete.ts +16 -0
  13. package/src/client/actions/GuildEmojiUpdate.ts +17 -0
  14. package/src/client/actions/GuildEmojisUpdate.ts +30 -0
  15. package/src/client/actions/GuildMemberRemove.ts +29 -0
  16. package/src/client/actions/GuildMemberUpdate.ts +41 -0
  17. package/src/client/actions/GuildRoleCreate.ts +23 -0
  18. package/src/client/actions/GuildRoleDelete.ts +26 -0
  19. package/src/client/actions/GuildRolesPositionUpdate.ts +17 -0
  20. package/src/client/actions/GuildScheduledEventDelete.ts +28 -0
  21. package/src/client/actions/GuildScheduledEventUserAdd.ts +29 -0
  22. package/src/client/actions/GuildScheduledEventUserRemove.ts +29 -0
  23. package/src/client/actions/GuildSoundboardSoundDelete.ts +26 -0
  24. package/src/client/actions/GuildStickerCreate.ts +17 -0
  25. package/src/client/actions/GuildStickerDelete.ts +16 -0
  26. package/src/client/actions/GuildStickerUpdate.ts +17 -0
  27. package/src/client/actions/GuildStickersUpdate.ts +30 -0
  28. package/src/client/actions/GuildUpdate.ts +30 -0
  29. package/src/client/actions/InteractionCreate.ts +104 -0
  30. package/src/client/actions/MessageCreate.ts +38 -0
  31. package/src/client/actions/MessageDelete.ts +29 -0
  32. package/src/client/actions/MessageDeleteBulk.ts +45 -0
  33. package/src/client/actions/MessagePollVoteAdd.ts +37 -0
  34. package/src/client/actions/MessagePollVoteRemove.ts +35 -0
  35. package/src/client/actions/MessageReactionAdd.ts +68 -0
  36. package/src/client/actions/MessageReactionRemove.ts +47 -0
  37. package/src/client/actions/MessageReactionRemoveAll.ts +30 -0
  38. package/src/client/actions/MessageReactionRemoveEmoji.ts +25 -0
  39. package/src/client/actions/MessageUpdate.ts +22 -0
  40. package/src/client/actions/StageInstanceCreate.ts +25 -0
  41. package/src/client/actions/StageInstanceDelete.ts +28 -0
  42. package/src/client/actions/StageInstanceUpdate.ts +27 -0
  43. package/src/client/actions/ThreadCreate.ts +22 -0
  44. package/src/client/actions/ThreadMembersUpdate.ts +45 -0
  45. package/src/client/actions/TypingStart.ts +26 -0
  46. package/src/client/actions/UserUpdate.ts +33 -0
  47. package/src/client/voice/ClientVoiceManager.ts +46 -0
  48. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.ts +19 -0
  49. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.ts +17 -0
  50. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.ts +18 -0
  51. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.ts +21 -0
  52. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.ts +20 -0
  53. package/src/client/websocket/handlers/CHANNEL_CREATE.ts +4 -0
  54. package/src/client/websocket/handlers/CHANNEL_DELETE.ts +4 -0
  55. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.ts +22 -0
  56. package/src/client/websocket/handlers/CHANNEL_UPDATE.ts +16 -0
  57. package/src/client/websocket/handlers/ENTITLEMENT_CREATE.ts +14 -0
  58. package/src/client/websocket/handlers/ENTITLEMENT_DELETE.ts +18 -0
  59. package/src/client/websocket/handlers/ENTITLEMENT_UPDATE.ts +16 -0
  60. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.ts +19 -0
  61. package/src/client/websocket/handlers/GUILD_BAN_ADD.ts +15 -0
  62. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.ts +20 -0
  63. package/src/client/websocket/handlers/GUILD_CREATE.ts +34 -0
  64. package/src/client/websocket/handlers/GUILD_DELETE.ts +36 -0
  65. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.ts +4 -0
  66. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.ts +15 -0
  67. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.ts +40 -0
  68. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.ts +17 -0
  69. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.ts +4 -0
  70. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.ts +4 -0
  71. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.ts +4 -0
  72. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.ts +4 -0
  73. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.ts +21 -0
  74. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.ts +17 -0
  75. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.ts +4 -0
  76. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.ts +19 -0
  77. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.ts +4 -0
  78. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.ts +4 -0
  79. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUNDS_UPDATE.ts +24 -0
  80. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_CREATE.ts +18 -0
  81. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_DELETE.ts +4 -0
  82. package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_UPDATE.ts +20 -0
  83. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.ts +4 -0
  84. package/src/client/websocket/handlers/GUILD_UPDATE.ts +4 -0
  85. package/src/client/websocket/handlers/INTERACTION_CREATE.ts +4 -0
  86. package/src/client/websocket/handlers/INVITE_CREATE.ts +20 -0
  87. package/src/client/websocket/handlers/INVITE_DELETE.ts +23 -0
  88. package/src/client/websocket/handlers/MESSAGE_CREATE.ts +4 -0
  89. package/src/client/websocket/handlers/MESSAGE_DELETE.ts +4 -0
  90. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.ts +4 -0
  91. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.ts +4 -0
  92. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.ts +4 -0
  93. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.ts +4 -0
  94. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.ts +4 -0
  95. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.ts +4 -0
  96. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.ts +4 -0
  97. package/src/client/websocket/handlers/MESSAGE_UPDATE.ts +16 -0
  98. package/src/client/websocket/handlers/PRESENCE_UPDATE.ts +42 -0
  99. package/src/client/websocket/handlers/RATE_LIMITED.ts +23 -0
  100. package/src/client/websocket/handlers/READY.ts +29 -0
  101. package/src/client/websocket/handlers/SOUNDBOARD_SOUNDS.ts +24 -0
  102. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.ts +4 -0
  103. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.ts +4 -0
  104. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.ts +4 -0
  105. package/src/client/websocket/handlers/SUBSCRIPTION_CREATE.ts +14 -0
  106. package/src/client/websocket/handlers/SUBSCRIPTION_DELETE.ts +16 -0
  107. package/src/client/websocket/handlers/SUBSCRIPTION_UPDATE.ts +16 -0
  108. package/src/client/websocket/handlers/THREAD_CREATE.ts +4 -0
  109. package/src/client/websocket/handlers/THREAD_DELETE.ts +17 -0
  110. package/src/client/websocket/handlers/THREAD_LIST_SYNC.ts +50 -0
  111. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.ts +4 -0
  112. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.ts +25 -0
  113. package/src/client/websocket/handlers/THREAD_UPDATE.ts +16 -0
  114. package/src/client/websocket/handlers/TYPING_START.ts +4 -0
  115. package/src/client/websocket/handlers/USER_UPDATE.ts +4 -0
  116. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.ts +16 -0
  117. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.ts +5 -0
  118. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.ts +37 -0
  119. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.ts +16 -0
  120. package/src/client/websocket/handlers/index.ts +74 -0
  121. package/src/errors/DJSError.ts +50 -0
  122. package/src/errors/ErrorCodes.ts +277 -0
  123. package/src/errors/Messages.ts +155 -0
  124. package/src/errors/index.ts +6 -0
  125. package/src/index.ts +241 -0
  126. package/src/managers/ApplicationCommandManager.ts +303 -0
  127. package/src/managers/ApplicationCommandPermissionsManager.ts +453 -0
  128. package/src/managers/ApplicationEmojiManager.ts +149 -0
  129. package/src/managers/AutoModerationRuleManager.ts +307 -0
  130. package/src/managers/BaseManager.ts +13 -0
  131. package/src/managers/CachedManager.ts +56 -0
  132. package/src/managers/CategoryChannelChildManager.ts +81 -0
  133. package/src/managers/ChannelManager.ts +194 -0
  134. package/src/managers/DMMessageManager.ts +15 -0
  135. package/src/managers/DataManager.ts +38 -0
  136. package/src/managers/EntitlementManager.ts +182 -0
  137. package/src/managers/GuildApplicationCommandManager.ts +29 -0
  138. package/src/managers/GuildBanManager.ts +221 -0
  139. package/src/managers/GuildChannelManager.ts +552 -0
  140. package/src/managers/GuildEmojiManager.ts +262 -0
  141. package/src/managers/GuildEmojiRoleManager.ts +134 -0
  142. package/src/managers/GuildForumThreadManager.ts +84 -0
  143. package/src/managers/GuildInviteManager.ts +236 -0
  144. package/src/managers/GuildManager.ts +265 -0
  145. package/src/managers/GuildMemberManager.ts +619 -0
  146. package/src/managers/GuildMemberRoleManager.ts +230 -0
  147. package/src/managers/GuildMessageManager.ts +31 -0
  148. package/src/managers/GuildScheduledEventManager.ts +330 -0
  149. package/src/managers/GuildSoundboardSoundManager.ts +157 -0
  150. package/src/managers/GuildStickerManager.ts +192 -0
  151. package/src/managers/GuildTextThreadManager.ts +91 -0
  152. package/src/managers/MessageManager.ts +352 -0
  153. package/src/managers/PartialGroupDMMessageManager.ts +15 -0
  154. package/src/managers/PermissionOverwriteManager.ts +174 -0
  155. package/src/managers/PollAnswerVoterManager.ts +59 -0
  156. package/src/managers/PresenceManager.ts +60 -0
  157. package/src/managers/ReactionManager.ts +72 -0
  158. package/src/managers/ReactionUserManager.ts +82 -0
  159. package/src/managers/RoleManager.ts +432 -0
  160. package/src/managers/StageInstanceManager.ts +166 -0
  161. package/src/managers/SubscriptionManager.ts +83 -0
  162. package/src/managers/ThreadManager.ts +210 -0
  163. package/src/managers/ThreadMemberManager.ts +194 -0
  164. package/src/managers/UserManager.ts +139 -0
  165. package/src/managers/VoiceStateManager.ts +61 -0
  166. package/src/sharding/Shard.ts +513 -0
  167. package/src/sharding/ShardClientUtil.ts +293 -0
  168. package/src/sharding/ShardingManager.ts +374 -0
  169. package/src/structures/ActionRow.ts +31 -0
  170. package/src/structures/AnnouncementChannel.ts +25 -0
  171. package/src/structures/AnonymousGuild.ts +110 -0
  172. package/src/structures/ApplicationCommand.ts +675 -0
  173. package/src/structures/ApplicationEmoji.ts +189 -0
  174. package/src/structures/ApplicationRoleConnectionMetadata.ts +54 -0
  175. package/src/structures/Attachment.ts +189 -0
  176. package/src/structures/AuthorizingIntegrationOwners.ts +63 -0
  177. package/src/structures/AutoModerationActionExecution.ts +138 -0
  178. package/src/structures/AutoModerationRule.ts +325 -0
  179. package/src/structures/AutocompleteInteraction.ts +115 -0
  180. package/src/structures/Base.ts +37 -0
  181. package/src/structures/BaseChannel.ts +188 -0
  182. package/src/structures/BaseGuild.ts +134 -0
  183. package/src/structures/BaseGuildEmoji.ts +113 -0
  184. package/src/structures/BaseGuildTextChannel.ts +230 -0
  185. package/src/structures/BaseGuildVoiceChannel.ts +270 -0
  186. package/src/structures/BaseInteraction.ts +393 -0
  187. package/src/structures/BaseInvite.ts +192 -0
  188. package/src/structures/BaseSelectMenuComponent.ts +58 -0
  189. package/src/structures/ButtonComponent.ts +68 -0
  190. package/src/structures/ButtonInteraction.ts +8 -0
  191. package/src/structures/CategoryChannel.ts +46 -0
  192. package/src/structures/ChannelSelectMenuComponent.ts +18 -0
  193. package/src/structures/ChannelSelectMenuInteraction.ts +34 -0
  194. package/src/structures/ChatInputCommandInteraction.ts +43 -0
  195. package/src/structures/ClientApplication.ts +470 -0
  196. package/src/structures/ClientPresence.ts +87 -0
  197. package/src/structures/ClientUser.ts +219 -0
  198. package/src/structures/CommandInteraction.ts +193 -0
  199. package/src/structures/CommandInteractionOptionResolver.ts +336 -0
  200. package/src/structures/Component.ts +59 -0
  201. package/src/structures/ContainerComponent.ts +63 -0
  202. package/src/structures/ContextMenuCommandInteraction.ts +68 -0
  203. package/src/structures/DMChannel.ts +148 -0
  204. package/src/structures/DirectoryChannel.ts +40 -0
  205. package/src/structures/Embed.ts +251 -0
  206. package/src/structures/Emoji.ts +61 -0
  207. package/src/structures/Entitlement.ts +206 -0
  208. package/src/structures/FileComponent.ts +41 -0
  209. package/src/structures/ForumChannel.ts +31 -0
  210. package/src/structures/GroupDMInvite.ts +34 -0
  211. package/src/structures/Guild.ts +1605 -0
  212. package/src/structures/GuildAuditLogs.ts +99 -0
  213. package/src/structures/GuildAuditLogsEntry.ts +557 -0
  214. package/src/structures/GuildBan.ts +65 -0
  215. package/src/structures/GuildChannel.ts +515 -0
  216. package/src/structures/GuildEmoji.ts +159 -0
  217. package/src/structures/GuildInvite.ts +233 -0
  218. package/src/structures/GuildMember.ts +643 -0
  219. package/src/structures/GuildOnboarding.ts +73 -0
  220. package/src/structures/GuildOnboardingPrompt.ts +93 -0
  221. package/src/structures/GuildOnboardingPromptOption.ts +100 -0
  222. package/src/structures/GuildPreview.ts +218 -0
  223. package/src/structures/GuildPreviewEmoji.ts +28 -0
  224. package/src/structures/GuildScheduledEvent.ts +593 -0
  225. package/src/structures/GuildTemplate.ts +229 -0
  226. package/src/structures/Integration.ts +257 -0
  227. package/src/structures/IntegrationApplication.ts +84 -0
  228. package/src/structures/InteractionCallback.ts +86 -0
  229. package/src/structures/InteractionCallbackResource.ts +57 -0
  230. package/src/structures/InteractionCallbackResponse.ts +35 -0
  231. package/src/structures/InteractionCollector.ts +260 -0
  232. package/src/structures/InteractionWebhook.ts +65 -0
  233. package/src/structures/InviteGuild.ts +22 -0
  234. package/src/structures/LabelComponent.ts +51 -0
  235. package/src/structures/MediaChannel.ts +8 -0
  236. package/src/structures/MediaGalleryComponent.ts +31 -0
  237. package/src/structures/MediaGalleryItem.ts +54 -0
  238. package/src/structures/MentionableSelectMenuComponent.ts +8 -0
  239. package/src/structures/MentionableSelectMenuInteraction.ts +76 -0
  240. package/src/structures/Message.ts +1202 -0
  241. package/src/structures/MessageCollector.ts +155 -0
  242. package/src/structures/MessageComponentInteraction.ts +132 -0
  243. package/src/structures/MessageContextMenuCommandInteraction.ts +18 -0
  244. package/src/structures/MessageMentions.ts +327 -0
  245. package/src/structures/MessagePayload.ts +325 -0
  246. package/src/structures/MessageReaction.ts +219 -0
  247. package/src/structures/ModalComponentResolver.ts +237 -0
  248. package/src/structures/ModalSubmitInteraction.ts +260 -0
  249. package/src/structures/OAuth2Guild.ts +30 -0
  250. package/src/structures/PartialGroupDMChannel.ts +151 -0
  251. package/src/structures/PermissionOverwrites.ts +222 -0
  252. package/src/structures/Poll.ts +195 -0
  253. package/src/structures/PollAnswer.ts +100 -0
  254. package/src/structures/Presence.ts +448 -0
  255. package/src/structures/PrimaryEntryPointCommandInteraction.ts +8 -0
  256. package/src/structures/ReactionCollector.ts +245 -0
  257. package/src/structures/ReactionEmoji.ts +30 -0
  258. package/src/structures/Role.ts +543 -0
  259. package/src/structures/RoleSelectMenuComponent.ts +8 -0
  260. package/src/structures/RoleSelectMenuInteraction.ts +34 -0
  261. package/src/structures/SKU.ts +62 -0
  262. package/src/structures/SectionComponent.ts +44 -0
  263. package/src/structures/SeparatorComponent.ts +29 -0
  264. package/src/structures/SoundboardSound.ts +176 -0
  265. package/src/structures/StageChannel.ts +118 -0
  266. package/src/structures/StageInstance.ts +173 -0
  267. package/src/structures/Sticker.ts +300 -0
  268. package/src/structures/StickerPack.ts +111 -0
  269. package/src/structures/StringSelectMenuComponent.ts +18 -0
  270. package/src/structures/StringSelectMenuInteraction.ts +21 -0
  271. package/src/structures/Subscription.ts +138 -0
  272. package/src/structures/Team.ts +131 -0
  273. package/src/structures/TeamMember.ts +77 -0
  274. package/src/structures/TextChannel.ts +33 -0
  275. package/src/structures/TextDisplayComponent.ts +18 -0
  276. package/src/structures/TextInputComponent.ts +28 -0
  277. package/src/structures/ThreadChannel.ts +680 -0
  278. package/src/structures/ThreadMember.ts +125 -0
  279. package/src/structures/ThreadOnlyChannel.ts +276 -0
  280. package/src/structures/ThumbnailComponent.ts +51 -0
  281. package/src/structures/Typing.ts +81 -0
  282. package/src/structures/UnfurledMediaItem.ts +33 -0
  283. package/src/structures/User.ts +511 -0
  284. package/src/structures/UserContextMenuCommandInteraction.ts +28 -0
  285. package/src/structures/UserSelectMenuComponent.ts +8 -0
  286. package/src/structures/UserSelectMenuInteraction.ts +54 -0
  287. package/src/structures/VoiceChannel.ts +119 -0
  288. package/src/structures/VoiceChannelEffect.ts +92 -0
  289. package/src/structures/VoiceRegion.ts +52 -0
  290. package/src/structures/VoiceState.ts +346 -0
  291. package/src/structures/Webhook.ts +526 -0
  292. package/src/structures/WelcomeChannel.ts +67 -0
  293. package/src/structures/WelcomeScreen.ts +53 -0
  294. package/src/structures/Widget.ts +110 -0
  295. package/src/structures/WidgetMember.ts +124 -0
  296. package/src/structures/interfaces/Application.ts +179 -0
  297. package/src/structures/interfaces/Collector.ts +372 -0
  298. package/src/structures/interfaces/InteractionResponses.ts +384 -0
  299. package/src/structures/interfaces/TextBasedChannel.ts +430 -0
  300. package/src/util/APITypes.ts +690 -0
  301. package/src/util/ActivityFlagsBitField.ts +26 -0
  302. package/src/util/ApplicationFlagsBitField.ts +43 -0
  303. package/src/util/AttachmentFlagsBitField.ts +26 -0
  304. package/src/util/BitField.ts +178 -0
  305. package/src/util/ChannelFlagsBitField.ts +43 -0
  306. package/src/util/Channels.ts +165 -0
  307. package/src/util/Colors.ts +72 -0
  308. package/src/util/Components.ts +285 -0
  309. package/src/util/Constants.ts +251 -0
  310. package/src/util/DataResolver.ts +146 -0
  311. package/src/util/Enums.ts +10 -0
  312. package/src/util/Events.ts +178 -0
  313. package/src/util/GuildMemberFlagsBitField.ts +43 -0
  314. package/src/util/IntentsBitField.ts +35 -0
  315. package/src/util/InviteFlagsBitField.ts +26 -0
  316. package/src/util/Invites.ts +27 -0
  317. package/src/util/LimitedCollection.ts +73 -0
  318. package/src/util/MessageFlagsBitField.ts +43 -0
  319. package/src/util/Options.ts +215 -0
  320. package/src/util/Partials.ts +50 -0
  321. package/src/util/PermissionsBitField.ts +113 -0
  322. package/src/util/RoleFlagsBitField.ts +26 -0
  323. package/src/util/SKUFlagsBitField.ts +26 -0
  324. package/src/util/ShardEvents.ts +26 -0
  325. package/src/util/Status.ts +16 -0
  326. package/src/util/Sweepers.ts +532 -0
  327. package/src/util/Symbols.ts +1 -0
  328. package/src/util/SystemChannelFlagsBitField.ts +45 -0
  329. package/src/util/ThreadMemberFlagsBitField.ts +33 -0
  330. package/src/util/Transformers.ts +123 -0
  331. package/src/util/UserFlagsBitField.ts +33 -0
  332. package/src/util/Util.ts +519 -0
@@ -0,0 +1,336 @@
1
+ import { ApplicationCommandOptionType } from 'discord-api-types/v10';
2
+ import { DiscordjsTypeError, ErrorCodes } from '../errors/index.js';
3
+
4
+ /**
5
+ * A resolver for command interaction options.
6
+ */
7
+ export class CommandInteractionOptionResolver {
8
+ public client: any;
9
+ public _group: any;
10
+ public _subcommand: any;
11
+ public _hoistedOptions: any;
12
+ constructor(client, options, resolved) {
13
+ /**
14
+ * The client that instantiated this.
15
+ *
16
+ * @name CommandInteractionOptionResolver#client
17
+ * @type {Client}
18
+ * @readonly
19
+ */
20
+ Object.defineProperty(this, 'client', { value: client });
21
+
22
+ /**
23
+ * The name of the subcommand group.
24
+ *
25
+ * @type {?string}
26
+ * @private
27
+ */
28
+ this._group = null;
29
+
30
+ /**
31
+ * The name of the subcommand.
32
+ *
33
+ * @type {?string}
34
+ * @private
35
+ */
36
+ this._subcommand = null;
37
+
38
+ /**
39
+ * The bottom-level options for the interaction.
40
+ * If there is a subcommand (or subcommand and group), this is the options for the subcommand.
41
+ *
42
+ * @type {CommandInteractionOption[]}
43
+ * @private
44
+ */
45
+ this._hoistedOptions = options;
46
+
47
+ // Hoist subcommand group if present
48
+ if (this._hoistedOptions[0]?.type === ApplicationCommandOptionType.SubcommandGroup) {
49
+ this._group = this._hoistedOptions[0].name;
50
+ this._hoistedOptions = this._hoistedOptions[0].options ?? [];
51
+ }
52
+
53
+ // Hoist subcommand if present
54
+ if (this._hoistedOptions[0]?.type === ApplicationCommandOptionType.Subcommand) {
55
+ this._subcommand = this._hoistedOptions[0].name;
56
+ this._hoistedOptions = this._hoistedOptions[0].options ?? [];
57
+ }
58
+
59
+ /**
60
+ * The interaction options array.
61
+ *
62
+ * @name CommandInteractionOptionResolver#data
63
+ * @type {ReadonlyArray<CommandInteractionOption>}
64
+ * @readonly
65
+ */
66
+ Object.defineProperty(this, 'data', { value: Object.freeze([...options]) });
67
+
68
+ /**
69
+ * The interaction resolved data
70
+ *
71
+ * @name CommandInteractionOptionResolver#resolved
72
+ * @type {?Readonly<CommandInteractionResolvedData>}
73
+ */
74
+ Object.defineProperty(this, 'resolved', { value: resolved ? Object.freeze(resolved) : null });
75
+ }
76
+
77
+ /**
78
+ * Gets an option by its name.
79
+ *
80
+ * @param {string} name The name of the option.
81
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
82
+ * @returns {?CommandInteractionOption} The option, if found.
83
+ */
84
+ get(name, required = false) {
85
+ const option = this._hoistedOptions.find(opt => opt.name === name);
86
+ if (!option) {
87
+ if (required) {
88
+ throw new DiscordjsTypeError(ErrorCodes.CommandInteractionOptionNotFound, name);
89
+ }
90
+
91
+ return null;
92
+ }
93
+
94
+ return option;
95
+ }
96
+
97
+ /**
98
+ * Gets an option by name and property and checks its type.
99
+ *
100
+ * @param {string} name The name of the option.
101
+ * @param {ApplicationCommandOptionType[]} allowedTypes The allowed types of the option.
102
+ * @param {string[]} properties The properties to check for for `required`.
103
+ * @param {boolean} required Whether to throw an error if the option is not found.
104
+ * @returns {?CommandInteractionOption} The option, if found.
105
+ * @private
106
+ */
107
+ _getTypedOption(name, allowedTypes, properties, required) {
108
+ const option = this.get(name, required);
109
+ if (!option) {
110
+ return null;
111
+ } else if (!allowedTypes.includes(option.type)) {
112
+ throw new DiscordjsTypeError(ErrorCodes.CommandInteractionOptionType, name, option.type, allowedTypes.join(', '));
113
+ } else if (required && properties.every(prop => option[prop] === null || option[prop] === undefined)) {
114
+ throw new DiscordjsTypeError(ErrorCodes.CommandInteractionOptionEmpty, name, option.type);
115
+ }
116
+
117
+ return option;
118
+ }
119
+
120
+ /**
121
+ * Gets the selected subcommand.
122
+ *
123
+ * @param {boolean} [required=true] Whether to throw an error if there is no subcommand.
124
+ * @returns {?string} The name of the selected subcommand, or null if not set and not required.
125
+ */
126
+ getSubcommand(required = true) {
127
+ if (required && !this._subcommand) {
128
+ throw new DiscordjsTypeError(ErrorCodes.CommandInteractionOptionNoSubcommand);
129
+ }
130
+
131
+ return this._subcommand;
132
+ }
133
+
134
+ /**
135
+ * Gets the selected subcommand group.
136
+ *
137
+ * @param {boolean} [required=false] Whether to throw an error if there is no subcommand group.
138
+ * @returns {?string} The name of the selected subcommand group, or null if not set and not required.
139
+ */
140
+ getSubcommandGroup(required = false) {
141
+ if (required && !this._group) {
142
+ throw new DiscordjsTypeError(ErrorCodes.CommandInteractionOptionNoSubcommandGroup);
143
+ }
144
+
145
+ return this._group;
146
+ }
147
+
148
+ /**
149
+ * Gets a boolean option.
150
+ *
151
+ * @param {string} name The name of the option.
152
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
153
+ * @returns {?boolean} The value of the option, or null if not set and not required.
154
+ */
155
+ getBoolean(name, required = false) {
156
+ const option = this._getTypedOption(name, [ApplicationCommandOptionType.Boolean], ['value'], required);
157
+ return option?.value ?? null;
158
+ }
159
+
160
+ /**
161
+ * Gets a channel option.
162
+ *
163
+ * @param {string} name The name of the option.
164
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
165
+ * @param {ChannelType[]} [channelTypes=[]] The allowed types of channels. If empty, all channel types are allowed.
166
+ * @returns {?(GuildChannel|ThreadChannel|APIChannel)}
167
+ * The value of the option, or null if not set and not required.
168
+ */
169
+ getChannel(name, required = false, channelTypes = []) {
170
+ const option = this._getTypedOption(name, [ApplicationCommandOptionType.Channel], ['channel'], required);
171
+ const channel = option?.channel ?? null;
172
+
173
+ if (channel && channelTypes.length > 0 && !channelTypes.includes(channel.type)) {
174
+ throw new DiscordjsTypeError(
175
+ ErrorCodes.CommandInteractionOptionInvalidChannelType,
176
+ name,
177
+ channel.type,
178
+ channelTypes.join(', '),
179
+ );
180
+ }
181
+
182
+ return channel;
183
+ }
184
+
185
+ /**
186
+ * Gets a string option.
187
+ *
188
+ * @param {string} name The name of the option.
189
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
190
+ * @returns {?string} The value of the option, or null if not set and not required.
191
+ */
192
+ getString(name, required = false) {
193
+ const option = this._getTypedOption(name, [ApplicationCommandOptionType.String], ['value'], required);
194
+ return option?.value ?? null;
195
+ }
196
+
197
+ /**
198
+ * Gets an integer option.
199
+ *
200
+ * @param {string} name The name of the option.
201
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
202
+ * @returns {?number} The value of the option, or null if not set and not required.
203
+ */
204
+ getInteger(name, required = false) {
205
+ const option = this._getTypedOption(name, [ApplicationCommandOptionType.Integer], ['value'], required);
206
+ return option?.value ?? null;
207
+ }
208
+
209
+ /**
210
+ * Gets a number option.
211
+ *
212
+ * @param {string} name The name of the option.
213
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
214
+ * @returns {?number} The value of the option, or null if not set and not required.
215
+ */
216
+ getNumber(name, required = false) {
217
+ const option = this._getTypedOption(name, [ApplicationCommandOptionType.Number], ['value'], required);
218
+ return option?.value ?? null;
219
+ }
220
+
221
+ /**
222
+ * Gets a user option.
223
+ *
224
+ * @param {string} name The name of the option.
225
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
226
+ * @returns {?User} The value of the option, or null if not set and not required.
227
+ */
228
+ getUser(name, required = false) {
229
+ const option = this._getTypedOption(
230
+ name,
231
+ [ApplicationCommandOptionType.User, ApplicationCommandOptionType.Mentionable],
232
+ ['user'],
233
+ required,
234
+ );
235
+ return option?.user ?? null;
236
+ }
237
+
238
+ /**
239
+ * Gets a member option.
240
+ *
241
+ * @param {string} name The name of the option.
242
+ * @returns {?(GuildMember|APIGuildMember)}
243
+ * The value of the option, or null if the user is not present in the guild or the option is not set.
244
+ */
245
+ getMember(name) {
246
+ const option = this._getTypedOption(
247
+ name,
248
+ [ApplicationCommandOptionType.User, ApplicationCommandOptionType.Mentionable],
249
+ ['member'],
250
+ false,
251
+ );
252
+ return option?.member ?? null;
253
+ }
254
+
255
+ /**
256
+ * Gets a role option.
257
+ *
258
+ * @param {string} name The name of the option.
259
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
260
+ * @returns {?(Role|APIRole)} The value of the option, or null if not set and not required.
261
+ */
262
+ getRole(name, required = false) {
263
+ const option = this._getTypedOption(
264
+ name,
265
+ [ApplicationCommandOptionType.Role, ApplicationCommandOptionType.Mentionable],
266
+ ['role'],
267
+ required,
268
+ );
269
+ return option?.role ?? null;
270
+ }
271
+
272
+ /**
273
+ * Gets an attachment option.
274
+ *
275
+ * @param {string} name The name of the option.
276
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
277
+ * @returns {?Attachment} The value of the option, or null if not set and not required.
278
+ */
279
+ getAttachment(name, required = false) {
280
+ const option = this._getTypedOption(name, [ApplicationCommandOptionType.Attachment], ['attachment'], required);
281
+ return option?.attachment ?? null;
282
+ }
283
+
284
+ /**
285
+ * Gets a mentionable option.
286
+ *
287
+ * @param {string} name The name of the option.
288
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
289
+ * @returns {?(User|GuildMember|APIGuildMember|Role|APIRole)}
290
+ * The value of the option, or null if not set and not required.
291
+ */
292
+ getMentionable(name, required = false) {
293
+ const option = this._getTypedOption(
294
+ name,
295
+ [ApplicationCommandOptionType.Mentionable],
296
+ ['user', 'member', 'role'],
297
+ required,
298
+ );
299
+ return option?.member ?? option?.user ?? option?.role ?? null;
300
+ }
301
+
302
+ /**
303
+ * Gets a message option.
304
+ *
305
+ * @param {string} name The name of the option.
306
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
307
+ * @returns {?Message}
308
+ * The value of the option, or null if not set and not required.
309
+ */
310
+ getMessage(name, required = false) {
311
+ const option = this._getTypedOption(name, ['_MESSAGE'], ['message'], required);
312
+ return option?.message ?? null;
313
+ }
314
+
315
+ /**
316
+ * The full autocomplete option object.
317
+ *
318
+ * @typedef {Object} AutocompleteFocusedOption
319
+ * @property {string} name The name of the option
320
+ * @property {ApplicationCommandOptionType} type The type of the application command option
321
+ * @property {string} value The value of the option
322
+ * @property {boolean} focused Whether this option is currently in focus for autocomplete
323
+ */
324
+
325
+ /**
326
+ * Gets the focused option.
327
+ *
328
+ * @returns {AutocompleteFocusedOption}
329
+ * The whole object of the option that is focused
330
+ */
331
+ getFocused() {
332
+ const focusedOption = this._hoistedOptions.find(option => option.focused);
333
+ if (!focusedOption) throw new DiscordjsTypeError(ErrorCodes.AutocompleteInteractionOptionNoFocusedOption);
334
+ return focusedOption;
335
+ }
336
+ }
@@ -0,0 +1,59 @@
1
+ import isEqual from 'fast-deep-equal';
2
+
3
+ /**
4
+ * Represents a component
5
+ */
6
+ export class Component {
7
+ public data: any;
8
+ constructor(data) {
9
+ /**
10
+ * The API data associated with this component
11
+ *
12
+ * @type {APIMessageComponent}
13
+ */
14
+ this.data = data;
15
+ }
16
+
17
+ /**
18
+ * The id of this component
19
+ *
20
+ * @type {number}
21
+ * @readonly
22
+ */
23
+ get id() {
24
+ return this.data.id;
25
+ }
26
+
27
+ /**
28
+ * The type of the component
29
+ *
30
+ * @type {ComponentType}
31
+ * @readonly
32
+ */
33
+ get type() {
34
+ return this.data.type;
35
+ }
36
+
37
+ /**
38
+ * Whether or not the given components are equal
39
+ *
40
+ * @param {Component|APIMessageComponent} other The component to compare against
41
+ * @returns {boolean}
42
+ */
43
+ equals(other) {
44
+ if (other instanceof Component) {
45
+ return isEqual(other.data, this.data);
46
+ }
47
+
48
+ return isEqual(other, this.data);
49
+ }
50
+
51
+ /**
52
+ * Returns the API-compatible JSON for this component
53
+ *
54
+ * @returns {APIMessageComponent}
55
+ */
56
+ toJSON() {
57
+ return { ...this.data };
58
+ }
59
+ }
@@ -0,0 +1,63 @@
1
+ import { createComponent } from '../util/Components.js';
2
+ import { Component } from './Component.js';
3
+
4
+ /**
5
+ * Represents a container component
6
+ *
7
+ * @extends {Component}
8
+ */
9
+ export class ContainerComponent extends Component {
10
+ public components: any;
11
+ constructor({ components, ...data }) {
12
+ super(data);
13
+
14
+ /**
15
+ * The components in this container
16
+ *
17
+ * @type {Component[]}
18
+ * @readonly
19
+ */
20
+ this.components = components.map(component => createComponent(component));
21
+ }
22
+
23
+ /**
24
+ * The accent color of this container
25
+ *
26
+ * @type {?number}
27
+ * @readonly
28
+ */
29
+ get accentColor() {
30
+ return this.data.accent_color ?? null;
31
+ }
32
+
33
+ /**
34
+ * The hex accent color of this container
35
+ *
36
+ * @type {?string}
37
+ * @readonly
38
+ */
39
+ get hexAccentColor() {
40
+ return typeof this.data.accent_color === 'number'
41
+ ? `#${this.data.accent_color.toString(16).padStart(6, '0')}`
42
+ : (this.data.accent_color ?? null);
43
+ }
44
+
45
+ /**
46
+ * Whether this container is spoilered
47
+ *
48
+ * @type {boolean}
49
+ * @readonly
50
+ */
51
+ get spoiler() {
52
+ return this.data.spoiler ?? false;
53
+ }
54
+
55
+ /**
56
+ * Returns the API-compatible JSON for this component
57
+ *
58
+ * @returns {APIContainerComponent}
59
+ */
60
+ toJSON() {
61
+ return { ...this.data, components: this.components.map(component => component.toJSON()) };
62
+ }
63
+ }
@@ -0,0 +1,68 @@
1
+ import { lazy } from '@ovencord/util';
2
+ import { ApplicationCommandOptionType } from 'discord-api-types/v10';
3
+ import { transformResolved } from '../util/Util.js';
4
+ import { CommandInteraction } from './CommandInteraction.js';
5
+ import { CommandInteractionOptionResolver } from './CommandInteractionOptionResolver.js';
6
+
7
+ const getMessage = lazy(() => require('./Message.js').Message);
8
+
9
+ /**
10
+ * Represents a context menu interaction.
11
+ *
12
+ * @extends {CommandInteraction}
13
+ */
14
+ export class ContextMenuCommandInteraction extends CommandInteraction {
15
+ public client: any;
16
+ public options: any;
17
+ public targetId: any;
18
+ constructor(client, data) {
19
+ super(client, data);
20
+ /**
21
+ * The target of the interaction, parsed into options
22
+ *
23
+ * @type {CommandInteractionOptionResolver}
24
+ */
25
+ this.options = new CommandInteractionOptionResolver(
26
+ this.client,
27
+ this.resolveContextMenuOptions(data.data),
28
+ transformResolved({ client: this.client, guild: this.guild, channel: this.channel }, data.data.resolved),
29
+ );
30
+
31
+ /**
32
+ * The id of the target of this interaction
33
+ *
34
+ * @type {Snowflake}
35
+ */
36
+ this.targetId = data.data.target_id;
37
+ }
38
+
39
+ /**
40
+ * Resolves and transforms options received from the API for a context menu interaction.
41
+ *
42
+ * @param {APIApplicationCommandInteractionData} data The interaction data
43
+ * @returns {CommandInteractionOption[]}
44
+ * @private
45
+ */
46
+ resolveContextMenuOptions({ target_id, resolved }) {
47
+ const result = [];
48
+
49
+ if (resolved.users?.[target_id]) {
50
+ result.push(
51
+ this.transformOption({ name: 'user', type: ApplicationCommandOptionType.User, value: target_id }, resolved),
52
+ );
53
+ }
54
+
55
+ if (resolved.messages?.[target_id]) {
56
+ result.push({
57
+ name: 'message',
58
+ type: '_MESSAGE',
59
+ value: target_id,
60
+ message:
61
+ this.channel?.messages._add(resolved.messages[target_id]) ??
62
+ new (getMessage())(this.client, resolved.messages[target_id]),
63
+ });
64
+ }
65
+
66
+ return result;
67
+ }
68
+ }
@@ -0,0 +1,148 @@
1
+ import { userMention } from '@ovencord/formatters';
2
+ import { ChannelType } from 'discord-api-types/v10';
3
+ import { DMMessageManager } from '../managers/DMMessageManager.js';
4
+ import { Partials } from '../util/Partials.js';
5
+ import { BaseChannel } from './BaseChannel.js';
6
+ import { TextBasedChannel } from './interfaces/TextBasedChannel.js';
7
+
8
+ /**
9
+ * Represents a direct message channel between two users.
10
+ *
11
+ * @extends {BaseChannel}
12
+ * @implements {TextBasedChannel}
13
+ */
14
+ export class DMChannel extends BaseChannel {
15
+ public client: any;
16
+ public type: any;
17
+ public messages: any;
18
+ public recipientId: any;
19
+ public lastMessageId: any;
20
+ public lastPinTimestamp: any;
21
+ constructor(client, data) {
22
+ super(client, data);
23
+
24
+ // Override the channel type so partials have a known type
25
+ this.type = ChannelType.DM;
26
+
27
+ /**
28
+ * A manager of the messages belonging to this channel
29
+ *
30
+ * @type {DMMessageManager}
31
+ */
32
+ this.messages = new DMMessageManager(this);
33
+ }
34
+
35
+ _patch(data) {
36
+ super._patch(data);
37
+
38
+ if (data.recipients) {
39
+ const recipient = data.recipients[0];
40
+
41
+ /**
42
+ * The recipient's id
43
+ *
44
+ * @type {Snowflake}
45
+ */
46
+ this.recipientId = recipient.id;
47
+
48
+ if ('username' in recipient || this.client.options.partials.includes(Partials.User)) {
49
+ this.client.users._add(recipient);
50
+ }
51
+ }
52
+
53
+ if ('last_message_id' in data) {
54
+ /**
55
+ * The channel's last message id, if one was sent
56
+ *
57
+ * @type {?Snowflake}
58
+ */
59
+ this.lastMessageId = data.last_message_id;
60
+ }
61
+
62
+ if ('last_pin_timestamp' in data) {
63
+ /**
64
+ * The timestamp when the last pinned message was pinned, if there was one
65
+ *
66
+ * @type {?number}
67
+ */
68
+ this.lastPinTimestamp = Date.parse(data.last_pin_timestamp);
69
+ } else {
70
+ this.lastPinTimestamp ??= null;
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Whether this DMChannel is a partial
76
+ *
77
+ * @type {boolean}
78
+ * @readonly
79
+ */
80
+ get partial() {
81
+ return this.lastMessageId === undefined;
82
+ }
83
+
84
+ /**
85
+ * The recipient on the other end of the DM
86
+ *
87
+ * @type {?User}
88
+ * @readonly
89
+ */
90
+ get recipient() {
91
+ return this.client.users.resolve(this.recipientId);
92
+ }
93
+
94
+ /**
95
+ * Fetch this DMChannel.
96
+ *
97
+ * @param {boolean} [force=true] Whether to skip the cache check and request the API
98
+ * @returns {Promise<DMChannel>}
99
+ */
100
+ async fetch(force = true) {
101
+ return this.client.users.createDM(this.recipientId, { force });
102
+ }
103
+
104
+ /**
105
+ * When concatenated with a string, this automatically returns the recipient's mention instead of the
106
+ * DMChannel object.
107
+ *
108
+ * @returns {string}
109
+ * @example
110
+ * // Logs: Hello from <@123456789012345678>!
111
+ * console.log(`Hello from ${channel}!`);
112
+ */
113
+ toString() {
114
+ return userMention(this.recipientId);
115
+ }
116
+
117
+ // These are here only for documentation purposes - they are implemented by TextBasedChannel
118
+
119
+ /* eslint-disable getter-return */
120
+ get lastMessage() {}
121
+
122
+ get lastPinAt() {}
123
+
124
+ send() {}
125
+
126
+ sendTyping() {}
127
+
128
+ createMessageCollector() {}
129
+
130
+ awaitMessages() {}
131
+
132
+ createMessageComponentCollector() {}
133
+
134
+ awaitMessageComponent() {}
135
+ // Doesn't work on DM channels; bulkDelete() {}
136
+ // Doesn't work on DM channels; fetchWebhooks() {}
137
+ // Doesn't work on DM channels; createWebhook() {}
138
+ // Doesn't work on DM channels; setRateLimitPerUser() {}
139
+ // Doesn't work on DM channels; setNSFW() {}
140
+ }
141
+
142
+ TextBasedChannel.applyToClass(DMChannel, [
143
+ 'bulkDelete',
144
+ 'fetchWebhooks',
145
+ 'createWebhook',
146
+ 'setRateLimitPerUser',
147
+ 'setNSFW',
148
+ ]);
@@ -0,0 +1,40 @@
1
+ import { BaseChannel } from './BaseChannel.js';
2
+
3
+ /**
4
+ * Represents a channel that displays a directory of guilds.
5
+ *
6
+ * @extends {BaseChannel}
7
+ */
8
+ export class DirectoryChannel extends BaseChannel {
9
+ public client: any;
10
+ public guild: any;
11
+ public guildId: any;
12
+ public name: any;
13
+ constructor(guild, data, client) {
14
+ super(client, data);
15
+
16
+ /**
17
+ * The guild the channel is in
18
+ *
19
+ * @type {InviteGuild}
20
+ */
21
+ this.guild = guild;
22
+
23
+ /**
24
+ * The id of the guild the channel is in
25
+ *
26
+ * @type {Snowflake}
27
+ */
28
+ this.guildId = guild.id;
29
+ }
30
+
31
+ _patch(data) {
32
+ super._patch(data);
33
+ /**
34
+ * The channel's name
35
+ *
36
+ * @type {string}
37
+ */
38
+ this.name = data.name;
39
+ }
40
+ }