discord-sb.js 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 (366) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +2 -0
  3. package/package.json +91 -0
  4. package/src/WebSocket.js +39 -0
  5. package/src/client/BaseClient.js +86 -0
  6. package/src/client/Client.js +978 -0
  7. package/src/client/WebhookClient.js +61 -0
  8. package/src/client/actions/Action.js +116 -0
  9. package/src/client/actions/ActionsManager.js +80 -0
  10. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  11. package/src/client/actions/AutoModerationActionExecution.js +27 -0
  12. package/src/client/actions/AutoModerationRuleCreate.js +28 -0
  13. package/src/client/actions/AutoModerationRuleDelete.js +32 -0
  14. package/src/client/actions/AutoModerationRuleUpdate.js +30 -0
  15. package/src/client/actions/ChannelCreate.js +23 -0
  16. package/src/client/actions/ChannelDelete.js +39 -0
  17. package/src/client/actions/ChannelUpdate.js +43 -0
  18. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  19. package/src/client/actions/GuildBanAdd.js +20 -0
  20. package/src/client/actions/GuildBanRemove.js +25 -0
  21. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  22. package/src/client/actions/GuildDelete.js +65 -0
  23. package/src/client/actions/GuildEmojiCreate.js +20 -0
  24. package/src/client/actions/GuildEmojiDelete.js +21 -0
  25. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  26. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  27. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  28. package/src/client/actions/GuildMemberRemove.js +33 -0
  29. package/src/client/actions/GuildMemberUpdate.js +44 -0
  30. package/src/client/actions/GuildRoleCreate.js +25 -0
  31. package/src/client/actions/GuildRoleDelete.js +31 -0
  32. package/src/client/actions/GuildRoleUpdate.js +39 -0
  33. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  34. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  35. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  36. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  37. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  38. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  39. package/src/client/actions/GuildStickerCreate.js +20 -0
  40. package/src/client/actions/GuildStickerDelete.js +21 -0
  41. package/src/client/actions/GuildStickerUpdate.js +20 -0
  42. package/src/client/actions/GuildStickersUpdate.js +34 -0
  43. package/src/client/actions/GuildUpdate.js +33 -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 +50 -0
  47. package/src/client/actions/MessageDelete.js +32 -0
  48. package/src/client/actions/MessageDeleteBulk.js +46 -0
  49. package/src/client/actions/MessagePollVoteAdd.js +33 -0
  50. package/src/client/actions/MessagePollVoteRemove.js +33 -0
  51. package/src/client/actions/MessageReactionAdd.js +68 -0
  52. package/src/client/actions/MessageReactionRemove.js +50 -0
  53. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  54. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  55. package/src/client/actions/MessageUpdate.js +26 -0
  56. package/src/client/actions/PresenceUpdate.js +50 -0
  57. package/src/client/actions/StageInstanceCreate.js +28 -0
  58. package/src/client/actions/StageInstanceDelete.js +33 -0
  59. package/src/client/actions/StageInstanceUpdate.js +30 -0
  60. package/src/client/actions/ThreadCreate.js +24 -0
  61. package/src/client/actions/ThreadDelete.js +32 -0
  62. package/src/client/actions/ThreadListSync.js +59 -0
  63. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  64. package/src/client/actions/ThreadMembersUpdate.js +34 -0
  65. package/src/client/actions/TypingStart.js +29 -0
  66. package/src/client/actions/UserUpdate.js +35 -0
  67. package/src/client/actions/VoiceStateUpdate.js +50 -0
  68. package/src/client/actions/WebhooksUpdate.js +20 -0
  69. package/src/client/voice/ClientVoiceManager.js +151 -0
  70. package/src/client/voice/VoiceConnection.js +1249 -0
  71. package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
  72. package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
  73. package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
  74. package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
  75. package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
  76. package/src/client/voice/networking/VoiceUDPClient.js +173 -0
  77. package/src/client/voice/networking/VoiceWebSocket.js +286 -0
  78. package/src/client/voice/player/MediaPlayer.js +321 -0
  79. package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
  80. package/src/client/voice/player/processing/IvfSplitter.js +106 -0
  81. package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
  82. package/src/client/voice/receiver/PacketHandler.js +260 -0
  83. package/src/client/voice/receiver/Receiver.js +96 -0
  84. package/src/client/voice/receiver/Recorder.js +173 -0
  85. package/src/client/voice/util/Function.js +116 -0
  86. package/src/client/voice/util/PlayInterface.js +122 -0
  87. package/src/client/voice/util/Secretbox.js +64 -0
  88. package/src/client/voice/util/Silence.js +16 -0
  89. package/src/client/voice/util/Socket.js +62 -0
  90. package/src/client/voice/util/VolumeInterface.js +104 -0
  91. package/src/client/websocket/WebSocketManager.js +392 -0
  92. package/src/client/websocket/WebSocketShard.js +907 -0
  93. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  94. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  95. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  97. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  98. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  99. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  100. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  101. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  102. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  103. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  104. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  105. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  106. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  107. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -0
  108. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  109. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  110. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  111. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  112. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  113. package/src/client/websocket/handlers/GUILD_CREATE.js +52 -0
  114. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  115. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  116. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  117. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  118. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  119. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  120. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  121. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  122. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  123. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  124. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  125. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  126. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  128. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  129. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  130. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  131. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
  132. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  133. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  134. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  135. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  136. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  137. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -0
  138. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -0
  139. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  140. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  141. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  142. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  143. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  144. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  145. package/src/client/websocket/handlers/READY.js +121 -0
  146. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
  147. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
  148. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -0
  149. package/src/client/websocket/handlers/RESUMED.js +14 -0
  150. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  151. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  152. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  153. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  154. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  155. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  156. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  157. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  158. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  159. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  160. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -0
  161. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  162. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
  163. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
  164. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  165. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
  166. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
  167. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  168. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  169. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  170. package/src/client/websocket/handlers/index.js +84 -0
  171. package/src/errors/DJSError.js +61 -0
  172. package/src/errors/Messages.js +217 -0
  173. package/src/errors/index.js +4 -0
  174. package/src/index.js +172 -0
  175. package/src/managers/ApplicationCommandManager.js +264 -0
  176. package/src/managers/ApplicationCommandPermissionsManager.js +417 -0
  177. package/src/managers/AutoModerationRuleManager.js +296 -0
  178. package/src/managers/BaseGuildEmojiManager.js +80 -0
  179. package/src/managers/BaseManager.js +19 -0
  180. package/src/managers/BillingManager.js +66 -0
  181. package/src/managers/CachedManager.js +71 -0
  182. package/src/managers/ChannelManager.js +148 -0
  183. package/src/managers/ClientUserSettingManager.js +372 -0
  184. package/src/managers/DataManager.js +61 -0
  185. package/src/managers/DeveloperManager.js +254 -0
  186. package/src/managers/GuildBanManager.js +250 -0
  187. package/src/managers/GuildChannelManager.js +488 -0
  188. package/src/managers/GuildEmojiManager.js +171 -0
  189. package/src/managers/GuildEmojiRoleManager.js +118 -0
  190. package/src/managers/GuildForumThreadManager.js +108 -0
  191. package/src/managers/GuildInviteManager.js +213 -0
  192. package/src/managers/GuildManager.js +338 -0
  193. package/src/managers/GuildMemberManager.js +599 -0
  194. package/src/managers/GuildMemberRoleManager.js +195 -0
  195. package/src/managers/GuildScheduledEventManager.js +314 -0
  196. package/src/managers/GuildSettingManager.js +155 -0
  197. package/src/managers/GuildStickerManager.js +179 -0
  198. package/src/managers/GuildTextThreadManager.js +98 -0
  199. package/src/managers/InteractionManager.js +39 -0
  200. package/src/managers/MessageManager.js +423 -0
  201. package/src/managers/PermissionOverwriteManager.js +164 -0
  202. package/src/managers/PresenceManager.js +71 -0
  203. package/src/managers/QuestManager.js +353 -0
  204. package/src/managers/ReactionManager.js +67 -0
  205. package/src/managers/ReactionUserManager.js +73 -0
  206. package/src/managers/RelationshipManager.js +278 -0
  207. package/src/managers/RoleManager.js +448 -0
  208. package/src/managers/SessionManager.js +66 -0
  209. package/src/managers/StageInstanceManager.js +162 -0
  210. package/src/managers/ThreadManager.js +175 -0
  211. package/src/managers/ThreadMemberManager.js +186 -0
  212. package/src/managers/UserManager.js +136 -0
  213. package/src/managers/UserNoteManager.js +53 -0
  214. package/src/managers/VoiceStateManager.js +59 -0
  215. package/src/rest/APIRequest.js +154 -0
  216. package/src/rest/APIRouter.js +53 -0
  217. package/src/rest/DiscordAPIError.js +119 -0
  218. package/src/rest/HTTPError.js +62 -0
  219. package/src/rest/RESTManager.js +67 -0
  220. package/src/rest/RateLimitError.js +55 -0
  221. package/src/rest/RequestHandler.js +466 -0
  222. package/src/sharding/Shard.js +444 -0
  223. package/src/sharding/ShardClientUtil.js +279 -0
  224. package/src/sharding/ShardingManager.js +319 -0
  225. package/src/structures/AnonymousGuild.js +98 -0
  226. package/src/structures/ApplicationCommand.js +593 -0
  227. package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
  228. package/src/structures/AutoModerationActionExecution.js +89 -0
  229. package/src/structures/AutoModerationRule.js +294 -0
  230. package/src/structures/AutocompleteInteraction.js +107 -0
  231. package/src/structures/Base.js +43 -0
  232. package/src/structures/BaseCommandInteraction.js +211 -0
  233. package/src/structures/BaseGuild.js +116 -0
  234. package/src/structures/BaseGuildEmoji.js +56 -0
  235. package/src/structures/BaseGuildTextChannel.js +191 -0
  236. package/src/structures/BaseGuildVoiceChannel.js +241 -0
  237. package/src/structures/BaseMessageComponent.js +181 -0
  238. package/src/structures/ButtonInteraction.js +11 -0
  239. package/src/structures/CallState.js +63 -0
  240. package/src/structures/CategoryChannel.js +85 -0
  241. package/src/structures/Channel.js +284 -0
  242. package/src/structures/ClientPresence.js +77 -0
  243. package/src/structures/ClientUser.js +655 -0
  244. package/src/structures/CommandInteraction.js +41 -0
  245. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  246. package/src/structures/ContainerComponent.js +68 -0
  247. package/src/structures/ContextMenuInteraction.js +65 -0
  248. package/src/structures/DMChannel.js +219 -0
  249. package/src/structures/DirectoryChannel.js +20 -0
  250. package/src/structures/Emoji.js +148 -0
  251. package/src/structures/FileComponent.js +49 -0
  252. package/src/structures/ForumChannel.js +31 -0
  253. package/src/structures/GroupDMChannel.js +394 -0
  254. package/src/structures/Guild.js +1791 -0
  255. package/src/structures/GuildAuditLogs.js +746 -0
  256. package/src/structures/GuildBan.js +59 -0
  257. package/src/structures/GuildBoost.js +108 -0
  258. package/src/structures/GuildChannel.js +470 -0
  259. package/src/structures/GuildEmoji.js +161 -0
  260. package/src/structures/GuildMember.js +636 -0
  261. package/src/structures/GuildPreview.js +191 -0
  262. package/src/structures/GuildPreviewEmoji.js +27 -0
  263. package/src/structures/GuildScheduledEvent.js +536 -0
  264. package/src/structures/GuildTemplate.js +236 -0
  265. package/src/structures/Integration.js +188 -0
  266. package/src/structures/IntegrationApplication.js +96 -0
  267. package/src/structures/Interaction.js +290 -0
  268. package/src/structures/InteractionCollector.js +248 -0
  269. package/src/structures/InteractionWebhook.js +43 -0
  270. package/src/structures/Invite.js +358 -0
  271. package/src/structures/InviteGuild.js +23 -0
  272. package/src/structures/InviteStageInstance.js +86 -0
  273. package/src/structures/MediaChannel.js +11 -0
  274. package/src/structures/MediaGalleryComponent.js +41 -0
  275. package/src/structures/MediaGalleryItem.js +47 -0
  276. package/src/structures/Message.js +1252 -0
  277. package/src/structures/MessageActionRow.js +105 -0
  278. package/src/structures/MessageAttachment.js +216 -0
  279. package/src/structures/MessageButton.js +166 -0
  280. package/src/structures/MessageCollector.js +146 -0
  281. package/src/structures/MessageComponentInteraction.js +120 -0
  282. package/src/structures/MessageContextMenuInteraction.js +20 -0
  283. package/src/structures/MessageEmbed.js +596 -0
  284. package/src/structures/MessageMentions.js +273 -0
  285. package/src/structures/MessagePayload.js +354 -0
  286. package/src/structures/MessageReaction.js +181 -0
  287. package/src/structures/MessageSelectMenu.js +141 -0
  288. package/src/structures/Modal.js +161 -0
  289. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  290. package/src/structures/ModalSubmitInteraction.js +119 -0
  291. package/src/structures/NewsChannel.js +32 -0
  292. package/src/structures/OAuth2Guild.js +28 -0
  293. package/src/structures/PermissionOverwrites.js +198 -0
  294. package/src/structures/Poll.js +108 -0
  295. package/src/structures/PollAnswer.js +88 -0
  296. package/src/structures/Presence.js +1157 -0
  297. package/src/structures/ReactionCollector.js +229 -0
  298. package/src/structures/ReactionEmoji.js +31 -0
  299. package/src/structures/Role.js +590 -0
  300. package/src/structures/SectionComponent.js +48 -0
  301. package/src/structures/SelectMenuInteraction.js +21 -0
  302. package/src/structures/SeparatorComponent.js +48 -0
  303. package/src/structures/Session.js +81 -0
  304. package/src/structures/StageChannel.js +104 -0
  305. package/src/structures/StageInstance.js +208 -0
  306. package/src/structures/Sticker.js +310 -0
  307. package/src/structures/StickerPack.js +95 -0
  308. package/src/structures/StoreChannel.js +56 -0
  309. package/src/structures/Team.js +118 -0
  310. package/src/structures/TeamMember.js +80 -0
  311. package/src/structures/TextChannel.js +33 -0
  312. package/src/structures/TextDisplayComponent.js +40 -0
  313. package/src/structures/TextInputComponent.js +132 -0
  314. package/src/structures/ThreadChannel.js +605 -0
  315. package/src/structures/ThreadMember.js +105 -0
  316. package/src/structures/ThreadOnlyChannel.js +249 -0
  317. package/src/structures/ThumbnailComponent.js +57 -0
  318. package/src/structures/Typing.js +74 -0
  319. package/src/structures/UnfurledMediaItem.js +29 -0
  320. package/src/structures/User.js +640 -0
  321. package/src/structures/UserContextMenuInteraction.js +29 -0
  322. package/src/structures/VoiceChannel.js +110 -0
  323. package/src/structures/VoiceChannelEffect.js +69 -0
  324. package/src/structures/VoiceRegion.js +53 -0
  325. package/src/structures/VoiceState.js +354 -0
  326. package/src/structures/WebEmbed.js +373 -0
  327. package/src/structures/Webhook.js +478 -0
  328. package/src/structures/WelcomeChannel.js +60 -0
  329. package/src/structures/WelcomeScreen.js +48 -0
  330. package/src/structures/Widget.js +87 -0
  331. package/src/structures/WidgetMember.js +99 -0
  332. package/src/structures/interfaces/Application.js +953 -0
  333. package/src/structures/interfaces/Collector.js +300 -0
  334. package/src/structures/interfaces/InteractionResponses.js +313 -0
  335. package/src/structures/interfaces/TextBasedChannel.js +821 -0
  336. package/src/util/APITypes.js +59 -0
  337. package/src/util/ActivityFlags.js +44 -0
  338. package/src/util/ApplicationFlags.js +76 -0
  339. package/src/util/AttachmentFlags.js +38 -0
  340. package/src/util/BitField.js +170 -0
  341. package/src/util/ChannelFlags.js +45 -0
  342. package/src/util/Constants.js +1914 -0
  343. package/src/util/DataResolver.js +146 -0
  344. package/src/util/Formatters.js +228 -0
  345. package/src/util/GuildMemberFlags.js +43 -0
  346. package/src/util/Intents.js +74 -0
  347. package/src/util/InviteFlags.js +34 -0
  348. package/src/util/LimitedCollection.js +131 -0
  349. package/src/util/MessageFlags.js +63 -0
  350. package/src/util/Options.js +358 -0
  351. package/src/util/Permissions.js +202 -0
  352. package/src/util/PremiumUsageFlags.js +31 -0
  353. package/src/util/PurchasedFlags.js +33 -0
  354. package/src/util/RemoteAuth.js +415 -0
  355. package/src/util/RoleFlags.js +37 -0
  356. package/src/util/SnowflakeUtil.js +92 -0
  357. package/src/util/Speaking.js +33 -0
  358. package/src/util/Sweepers.js +466 -0
  359. package/src/util/SystemChannelFlags.js +55 -0
  360. package/src/util/ThreadMemberFlags.js +30 -0
  361. package/src/util/UserFlags.js +104 -0
  362. package/src/util/Util.js +1048 -0
  363. package/typings/enums.d.ts +439 -0
  364. package/typings/index.d.ts +8505 -0
  365. package/typings/index.test-d.ts +0 -0
  366. package/typings/rawDataTypes.d.ts +403 -0
@@ -0,0 +1,590 @@
1
+ 'use strict';
2
+
3
+ const process = require('node:process');
4
+ const Base = require('./Base');
5
+ const { Error } = require('../errors');
6
+ const Permissions = require('../util/Permissions');
7
+ const RoleFlags = require('../util/RoleFlags');
8
+ const SnowflakeUtil = require('../util/SnowflakeUtil');
9
+
10
+ let deprecationEmittedForComparePositions = false;
11
+
12
+ /**
13
+ * @type {WeakSet<Role>}
14
+ * @private
15
+ * @internal
16
+ */
17
+ const deletedRoles = new WeakSet();
18
+ let deprecationEmittedForDeleted = false;
19
+
20
+ /**
21
+ * Represents a role on Discord.
22
+ * @extends {Base}
23
+ */
24
+ class Role extends Base {
25
+ constructor(client, data, guild) {
26
+ super(client);
27
+
28
+ /**
29
+ * The guild that the role belongs to
30
+ * @type {Guild}
31
+ */
32
+ this.guild = guild;
33
+
34
+ /**
35
+ * The icon hash of the role
36
+ * @type {?string}
37
+ */
38
+ this.icon = null;
39
+
40
+ /**
41
+ * The unicode emoji for the role
42
+ * @type {?string}
43
+ */
44
+ this.unicodeEmoji = null;
45
+
46
+ if (data) this._patch(data);
47
+ }
48
+
49
+ _patch(data) {
50
+ /**
51
+ * The role's id (unique to the guild it is part of)
52
+ * @type {Snowflake}
53
+ */
54
+ this.id = data.id;
55
+ if ('name' in data) {
56
+ /**
57
+ * The name of the role
58
+ * @type {string}
59
+ */
60
+ this.name = data.name;
61
+ }
62
+
63
+ if ('color' in data) {
64
+ /**
65
+ * The base 10 color of the role
66
+ * @type {number}
67
+ * @deprecated Use {@link Role#colors} instead.
68
+ */
69
+ this.color = data.color;
70
+ }
71
+
72
+ /**
73
+ * @typedef {Object} RoleColors
74
+ * @property {number} primaryColor The primary color of the role
75
+ * @property {?number} secondaryColor The secondary color of the role.
76
+ * This will make the role a gradient between the other provided colors
77
+ * @property {?number} tertiaryColor The tertiary color of the role.
78
+ * When sending `tertiaryColor` the API enforces the role color to be a holographic style
79
+ * with values of `primaryColor = 11127295`, `secondaryColor = 16759788`, and `tertiaryColor = 16761760`.
80
+ * These values are available as a constant: `Constants.HolographicStyle`
81
+ */
82
+
83
+ if ('colors' in data) {
84
+ /**
85
+ * The colors of the role
86
+ *
87
+ * @type {RoleColors}
88
+ */
89
+ this.colors = {
90
+ primaryColor: data.colors.primary_color,
91
+ secondaryColor: data.colors.secondary_color,
92
+ tertiaryColor: data.colors.tertiary_color,
93
+ };
94
+ }
95
+
96
+ if ('hoist' in data) {
97
+ /**
98
+ * If true, users that are part of this role will appear in a separate category in the users list
99
+ * @type {boolean}
100
+ */
101
+ this.hoist = data.hoist;
102
+ }
103
+
104
+ if ('position' in data) {
105
+ /**
106
+ * The raw position of the role from the API
107
+ * @type {number}
108
+ */
109
+ this.rawPosition = data.position;
110
+ }
111
+
112
+ if ('permissions' in data) {
113
+ /**
114
+ * The permissions of the role
115
+ * @type {Readonly<Permissions>}
116
+ */
117
+ this.permissions = new Permissions(BigInt(data.permissions)).freeze();
118
+ }
119
+
120
+ if ('managed' in data) {
121
+ /**
122
+ * Whether or not the role is managed by an external service
123
+ * @type {boolean}
124
+ */
125
+ this.managed = data.managed;
126
+ }
127
+
128
+ if ('mentionable' in data) {
129
+ /**
130
+ * Whether or not the role can be mentioned by anyone
131
+ * @type {boolean}
132
+ */
133
+ this.mentionable = data.mentionable;
134
+ }
135
+
136
+ if ('icon' in data) this.icon = data.icon;
137
+
138
+ if ('unicode_emoji' in data) this.unicodeEmoji = data.unicode_emoji;
139
+
140
+ /**
141
+ * The tags this role has
142
+ * @type {?Object}
143
+ * @property {Snowflake} [botId] The id of the bot this role belongs to
144
+ * @property {Snowflake|string} [integrationId] The id of the integration this role belongs to
145
+ * @property {true} [premiumSubscriberRole] Whether this is the guild's premium subscription role
146
+ * @property {Snowflake} [subscriptionListingId] The id of this role's subscription SKU and listing
147
+ * @property {true} [availableForPurchase] Whether this role is available for purchase
148
+ * @property {true} [guildConnections] Whether this role is a guild's linked role
149
+ */
150
+ this.tags = data.tags ? {} : null;
151
+ if (data.tags) {
152
+ if ('bot_id' in data.tags) {
153
+ this.tags.botId = data.tags.bot_id;
154
+ }
155
+ if ('integration_id' in data.tags) {
156
+ this.tags.integrationId = data.tags.integration_id;
157
+ }
158
+ if ('premium_subscriber' in data.tags) {
159
+ this.tags.premiumSubscriberRole = true;
160
+ }
161
+ if ('subscription_listing_id' in data.tags) {
162
+ this.tags.subscriptionListingId = data.tags.subscription_listing_id;
163
+ }
164
+ if ('available_for_purchase' in data.tags) {
165
+ this.tags.availableForPurchase = true;
166
+ }
167
+ if ('guild_connections' in data.tags) {
168
+ this.tags.guildConnections = true;
169
+ }
170
+ }
171
+
172
+ if ('flags' in data) {
173
+ /**
174
+ * The flags of this role
175
+ * @type {Readonly<RoleFlags>}
176
+ */
177
+ this.flags = new RoleFlags(data.flags).freeze();
178
+ } else {
179
+ this.flags ??= new RoleFlags().freeze();
180
+ }
181
+ }
182
+
183
+ /**
184
+ * The timestamp the role was created at
185
+ * @type {number}
186
+ * @readonly
187
+ */
188
+ get createdTimestamp() {
189
+ return SnowflakeUtil.timestampFrom(this.id);
190
+ }
191
+
192
+ /**
193
+ * The time the role was created at
194
+ * @type {Date}
195
+ * @readonly
196
+ */
197
+ get createdAt() {
198
+ return new Date(this.createdTimestamp);
199
+ }
200
+
201
+ /**
202
+ * Whether or not the role has been deleted
203
+ * @type {boolean}
204
+ * @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091
205
+ */
206
+ get deleted() {
207
+ if (!deprecationEmittedForDeleted) {
208
+ deprecationEmittedForDeleted = true;
209
+ process.emitWarning(
210
+ 'Role#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
211
+ 'DeprecationWarning',
212
+ );
213
+ }
214
+
215
+ return deletedRoles.has(this);
216
+ }
217
+
218
+ set deleted(value) {
219
+ if (!deprecationEmittedForDeleted) {
220
+ deprecationEmittedForDeleted = true;
221
+ process.emitWarning(
222
+ 'Role#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
223
+ 'DeprecationWarning',
224
+ );
225
+ }
226
+
227
+ if (value) deletedRoles.add(this);
228
+ else deletedRoles.delete(this);
229
+ }
230
+
231
+ /**
232
+ * The hexadecimal version of the role color, with a leading hashtag
233
+ * @type {string}
234
+ * @readonly
235
+ */
236
+ get hexColor() {
237
+ return `#${this.colors.primaryColor.toString(16).padStart(6, '0')}`;
238
+ }
239
+
240
+ /**
241
+ * The cached guild members that have this role
242
+ * @type {Collection<Snowflake, GuildMember>}
243
+ * @readonly
244
+ */
245
+ get members() {
246
+ return this.guild.members.cache.filter(m => m.roles.cache.has(this.id));
247
+ }
248
+
249
+ /**
250
+ * Whether the role is editable by the client user
251
+ * @type {boolean}
252
+ * @readonly
253
+ */
254
+ get editable() {
255
+ if (this.managed) return false;
256
+ const clientMember = this.guild.members.resolve(this.client.user);
257
+ if (!clientMember.permissions.has(Permissions.FLAGS.MANAGE_ROLES)) return false;
258
+ return clientMember.roles.highest.comparePositionTo(this) > 0;
259
+ }
260
+
261
+ /**
262
+ * The position of the role in the role manager
263
+ * @type {number}
264
+ * @readonly
265
+ */
266
+ get position() {
267
+ let count = 0;
268
+ for (const role of this.guild.roles.cache.values()) {
269
+ if (this.rawPosition > role.rawPosition) count++;
270
+ else if (this.rawPosition === role.rawPosition && BigInt(this.id) < BigInt(role.id)) count++;
271
+ }
272
+
273
+ return count;
274
+ }
275
+
276
+ /**
277
+ * Compares this role's position to another role's.
278
+ * @param {RoleResolvable} role Role to compare to this one
279
+ * @returns {number} Negative number if this role's position is lower (other role's is higher),
280
+ * positive number if this one is higher (other's is lower), 0 if equal
281
+ * @example
282
+ * // Compare the position of a role to another
283
+ * const roleCompare = role.comparePositionTo(otherRole);
284
+ * if (roleCompare >= 1) console.log(`${role.name} is higher than ${otherRole.name}`);
285
+ */
286
+ comparePositionTo(role) {
287
+ return this.guild.roles.comparePositions(this, role);
288
+ }
289
+
290
+ /**
291
+ * The data for a role.
292
+ * @typedef {Object} RoleData
293
+ * @property {string} [name] The name of the role
294
+ * @property {ColorResolvable} [color] The color of the role, either a hex string or a base 10 number
295
+ * <warn>This property is deprecated. Use `colors` instead.</warn>
296
+ * @property {RoleColorsResolvable} [colors] The colors of the role
297
+ * @property {boolean} [hoist] Whether or not the role should be hoisted
298
+ * @property {number} [position] The position of the role
299
+ * @property {PermissionResolvable} [permissions] The permissions of the role
300
+ * @property {boolean} [mentionable] Whether or not the role should be mentionable
301
+ * @property {?(BufferResolvable|Base64Resolvable|EmojiResolvable)} [icon] The icon for the role
302
+ * <warn>The `EmojiResolvable` should belong to the same guild as the role.
303
+ * If not, pass the emoji's URL directly</warn>
304
+ * @property {?string} [unicodeEmoji] The unicode emoji for the role
305
+ */
306
+
307
+ /**
308
+ * Edits the role.
309
+ * @param {RoleData} data The new data for the role
310
+ * @param {string} [reason] Reason for editing this role
311
+ * @returns {Promise<Role>}
312
+ * @example
313
+ * // Edit a role
314
+ * role.edit({ name: 'new role' })
315
+ * .then(updated => console.log(`Edited role name to ${updated.name}`))
316
+ * .catch(console.error);
317
+ */
318
+ edit(data, reason) {
319
+ return this.guild.roles.edit(this, data, reason);
320
+ }
321
+
322
+ /**
323
+ * Returns `channel.permissionsFor(role)`. Returns permissions for a role in a guild channel,
324
+ * taking into account permission overwrites.
325
+ * @param {GuildChannel|Snowflake} channel The guild channel to use as context
326
+ * @param {boolean} [checkAdmin=true] Whether having `ADMINISTRATOR` will return all permissions
327
+ * @returns {Readonly<Permissions>}
328
+ */
329
+ permissionsIn(channel, checkAdmin = true) {
330
+ channel = this.guild.channels.resolve(channel);
331
+ if (!channel) throw new Error('GUILD_CHANNEL_RESOLVE');
332
+ return channel.rolePermissions(this, checkAdmin);
333
+ }
334
+
335
+ /**
336
+ * Sets a new name for the role.
337
+ * @param {string} name The new name of the role
338
+ * @param {string} [reason] Reason for changing the role's name
339
+ * @returns {Promise<Role>}
340
+ * @example
341
+ * // Set the name of the role
342
+ * role.setName('new role')
343
+ * .then(updated => console.log(`Updated role name to ${updated.name}`))
344
+ * .catch(console.error);
345
+ */
346
+ setName(name, reason) {
347
+ return this.edit({ name }, reason);
348
+ }
349
+
350
+ /**
351
+ * Sets a new color for the role.
352
+ * @param {ColorResolvable} color The color of the role
353
+ * @param {string} [reason] Reason for changing the role's color
354
+ * @returns {Promise<Role>}
355
+ * @deprecated Use {@link Role#setColors} instead.
356
+ */
357
+ setColor(color, reason) {
358
+ return this.edit({ color }, reason);
359
+ }
360
+
361
+ /**
362
+ * Sets new colors for the role.
363
+ *
364
+ * @param {RoleColorsResolvable} colors The colors of the role
365
+ * @param {string} [reason] Reason for changing the role's colors
366
+ * @returns {Promise<Role>}
367
+ * @example
368
+ * // Set the colors of a role
369
+ * role.setColors({ primaryColor: '#FF0000', secondaryColor: '#00FF00', tertiaryColor: '#0000FF' })
370
+ * .then(updated => console.log(`Set colors of role to ${updated.colors}`))
371
+ * .catch(console.error);
372
+ * @example
373
+ * // Set holographic colors using constants
374
+ * role.setColors({
375
+ * primaryColor: Constants.HolographicStyle.Primary,
376
+ * secondaryColor: Constants.HolographicStyle.Secondary,
377
+ * tertiaryColor: Constants.HolographicStyle.Tertiary,
378
+ * })
379
+ * .then(updated => console.log(`Set holographic colors for role ${updated.name}`))
380
+ * .catch(console.error);
381
+ */
382
+ setColors(colors, reason) {
383
+ return this.edit({ colors, reason });
384
+ }
385
+
386
+ /**
387
+ * Sets whether or not the role should be hoisted.
388
+ * @param {boolean} [hoist=true] Whether or not to hoist the role
389
+ * @param {string} [reason] Reason for setting whether or not the role should be hoisted
390
+ * @returns {Promise<Role>}
391
+ * @example
392
+ * // Set the hoist of the role
393
+ * role.setHoist(true)
394
+ * .then(updated => console.log(`Role hoisted: ${updated.hoist}`))
395
+ * .catch(console.error);
396
+ */
397
+ setHoist(hoist = true, reason) {
398
+ return this.edit({ hoist }, reason);
399
+ }
400
+
401
+ /**
402
+ * Sets the permissions of the role.
403
+ * @param {PermissionResolvable} permissions The permissions of the role
404
+ * @param {string} [reason] Reason for changing the role's permissions
405
+ * @returns {Promise<Role>}
406
+ * @example
407
+ * // Set the permissions of the role
408
+ * role.setPermissions([Permissions.FLAGS.KICK_MEMBERS, Permissions.FLAGS.BAN_MEMBERS])
409
+ * .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))
410
+ * .catch(console.error);
411
+ * @example
412
+ * // Remove all permissions from a role
413
+ * role.setPermissions(0n)
414
+ * .then(updated => console.log(`Updated permissions to ${updated.permissions.bitfield}`))
415
+ * .catch(console.error);
416
+ */
417
+ setPermissions(permissions, reason) {
418
+ return this.edit({ permissions }, reason);
419
+ }
420
+
421
+ /**
422
+ * Sets whether this role is mentionable.
423
+ * @param {boolean} [mentionable=true] Whether this role should be mentionable
424
+ * @param {string} [reason] Reason for setting whether or not this role should be mentionable
425
+ * @returns {Promise<Role>}
426
+ * @example
427
+ * // Make the role mentionable
428
+ * role.setMentionable(true)
429
+ * .then(updated => console.log(`Role updated ${updated.name}`))
430
+ * .catch(console.error);
431
+ */
432
+ setMentionable(mentionable = true, reason) {
433
+ return this.edit({ mentionable }, reason);
434
+ }
435
+
436
+ /**
437
+ * Sets a new icon for the role.
438
+ * @param {?(BufferResolvable|Base64Resolvable|EmojiResolvable)} icon The icon for the role
439
+ * <warn>The `EmojiResolvable` should belong to the same guild as the role.
440
+ * If not, pass the emoji's URL directly</warn>
441
+ * @param {string} [reason] Reason for changing the role's icon
442
+ * @returns {Promise<Role>}
443
+ */
444
+ setIcon(icon, reason) {
445
+ return this.edit({ icon }, reason);
446
+ }
447
+
448
+ /**
449
+ * Sets a new unicode emoji for the role.
450
+ * @param {?string} unicodeEmoji The new unicode emoji for the role
451
+ * @param {string} [reason] Reason for changing the role's unicode emoji
452
+ * @returns {Promise<Role>}
453
+ * @example
454
+ * // Set a new unicode emoji for the role
455
+ * role.setUnicodeEmoji('🤖')
456
+ * .then(updated => console.log(`Set unicode emoji for the role to ${updated.unicodeEmoji}`))
457
+ * .catch(console.error);
458
+ */
459
+ setUnicodeEmoji(unicodeEmoji, reason) {
460
+ return this.edit({ unicodeEmoji }, reason);
461
+ }
462
+
463
+ /**
464
+ * Options used to set the position of a role.
465
+ * @typedef {Object} SetRolePositionOptions
466
+ * @property {boolean} [relative=false] Whether to change the position relative to its current value or not
467
+ * @property {string} [reason] The reason for changing the position
468
+ */
469
+
470
+ /**
471
+ * Sets the new position of the role.
472
+ * @param {number} position The new position for the role
473
+ * @param {SetRolePositionOptions} [options] Options for setting the position
474
+ * @returns {Promise<Role>}
475
+ * @example
476
+ * // Set the position of the role
477
+ * role.setPosition(1)
478
+ * .then(updated => console.log(`Role position: ${updated.position}`))
479
+ * .catch(console.error);
480
+ */
481
+ setPosition(position, options = {}) {
482
+ return this.guild.roles.setPosition(this, position, options);
483
+ }
484
+
485
+ /**
486
+ * Deletes the role.
487
+ * @param {string} [reason] Reason for deleting this role
488
+ * @returns {Promise<Role>}
489
+ * @example
490
+ * // Delete a role
491
+ * role.delete('The role needed to go')
492
+ * .then(deleted => console.log(`Deleted role ${deleted.name}`))
493
+ * .catch(console.error);
494
+ */
495
+ async delete(reason) {
496
+ await this.guild.roles.delete(this.id, reason);
497
+ return this;
498
+ }
499
+
500
+ /**
501
+ * Fetches the member ids for this role in the guild.
502
+ * <info>This only returns 100 member ids</info>
503
+ * @returns {Promise<Snowflake[]>}
504
+ */
505
+ fetchMemberIds() {
506
+ return this.guild.roles.fetchMemberIds(this.id);
507
+ }
508
+
509
+ /**
510
+ * A link to the role's icon
511
+ * @param {StaticImageURLOptions} [options={}] Options for the image URL
512
+ * @returns {?string}
513
+ */
514
+ iconURL({ format, size } = {}) {
515
+ if (!this.icon) return null;
516
+ return this.client.rest.cdn.RoleIcon(this.id, this.icon, format, size);
517
+ }
518
+
519
+ /**
520
+ * Whether this role equals another role. It compares all properties, so for most operations
521
+ * it is advisable to just compare `role.id === role2.id` as it is much faster and is often
522
+ * what most users need.
523
+ * @param {Role} role Role to compare with
524
+ * @returns {boolean}
525
+ */
526
+ equals(role) {
527
+ return (
528
+ role &&
529
+ this.id === role.id &&
530
+ this.name === role.name &&
531
+ this.colors.primaryColor === role.colors.primaryColor &&
532
+ this.colors.secondaryColor === role.colors.secondaryColor &&
533
+ this.colors.tertiaryColor === role.colors.tertiaryColor &&
534
+ this.hoist === role.hoist &&
535
+ this.position === role.position &&
536
+ this.permissions.bitfield === role.permissions.bitfield &&
537
+ this.managed === role.managed &&
538
+ this.icon === role.icon &&
539
+ this.unicodeEmoji === role.unicodeEmoji
540
+ );
541
+ }
542
+
543
+ /**
544
+ * When concatenated with a string, this automatically returns the role's mention instead of the Role object.
545
+ * @returns {string}
546
+ * @example
547
+ * // Logs: Role: <@&123456789012345678>
548
+ * console.log(`Role: ${role}`);
549
+ */
550
+ toString() {
551
+ if (this.id === this.guild.id) return '@everyone';
552
+ return `<@&${this.id}>`;
553
+ }
554
+
555
+ toJSON() {
556
+ return {
557
+ ...super.toJSON({ createdTimestamp: true }),
558
+ permissions: this.permissions.toJSON(),
559
+ };
560
+ }
561
+
562
+ /**
563
+ * Compares the positions of two roles.
564
+ * @param {Role} role1 First role to compare
565
+ * @param {Role} role2 Second role to compare
566
+ * @returns {number} Negative number if the first role's position is lower (second role's is higher),
567
+ * positive number if the first's is higher (second's is lower), 0 if equal
568
+ * @deprecated Use {@link RoleManager#comparePositions} instead.
569
+ */
570
+ static comparePositions(role1, role2) {
571
+ if (!deprecationEmittedForComparePositions) {
572
+ process.emitWarning(
573
+ 'The Role.comparePositions method is deprecated. Use RoleManager#comparePositions instead.',
574
+ 'DeprecationWarning',
575
+ );
576
+
577
+ deprecationEmittedForComparePositions = true;
578
+ }
579
+
580
+ return role1.guild.roles.comparePositions(role1, role2);
581
+ }
582
+ }
583
+
584
+ exports.Role = Role;
585
+ exports.deletedRoles = deletedRoles;
586
+
587
+ /**
588
+ * @external APIRole
589
+ * @see {@link https://discord.com/developers/docs/topics/permissions#role-object}
590
+ */
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ const BaseMessageComponent = require('./BaseMessageComponent');
4
+ const { MessageComponentTypes } = require('../util/Constants');
5
+
6
+ class SectionComponent extends BaseMessageComponent {
7
+ /**
8
+ * @property {TextDisplayComponent[]} [components] One to three text components
9
+ * @property {ThumbnailComponent|MessageButton} [accessory] A thumbnail or a button component, with a future possibility of adding more compatible components
10
+ */
11
+
12
+ /**
13
+ * @param {SectionComponent | APISectionComponent} [data={}] The data
14
+ */
15
+ constructor(data = {}) {
16
+ super({ type: 'SECTION' });
17
+
18
+ this.setup(data);
19
+ }
20
+
21
+ setup(data) {
22
+ super.setup(data);
23
+ /**
24
+ * One to three text components
25
+ * @type {TextDisplayComponent[]}
26
+ */
27
+ this.components = data.components?.map(c => BaseMessageComponent.create(c)) ?? [];
28
+
29
+ /**
30
+ * A thumbnail or a button component, with a future possibility of adding more compatible components
31
+ * @type {ThumbnailComponent|MessageButton}
32
+ */
33
+ this.accessory = BaseMessageComponent.create(data.accessory) ?? null;
34
+ }
35
+
36
+ /**
37
+ * @returns {APISectionComponent}
38
+ */
39
+ toJSON() {
40
+ return {
41
+ type: MessageComponentTypes[this.type],
42
+ components: this.components.map(c => c.toJSON()),
43
+ accessory: this.accessory.toJSON(),
44
+ };
45
+ }
46
+ }
47
+
48
+ module.exports = SectionComponent;
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ const MessageComponentInteraction = require('./MessageComponentInteraction');
4
+
5
+ /**
6
+ * Represents a select menu interaction.
7
+ * @extends {MessageComponentInteraction}
8
+ */
9
+ class SelectMenuInteraction extends MessageComponentInteraction {
10
+ constructor(client, data) {
11
+ super(client, data);
12
+
13
+ /**
14
+ * The values selected, if the component which was interacted with was a select menu
15
+ * @type {string[]}
16
+ */
17
+ this.values = data.data.values ?? [];
18
+ }
19
+ }
20
+
21
+ module.exports = SelectMenuInteraction;
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ const BaseMessageComponent = require('./BaseMessageComponent');
4
+ const { MessageComponentTypes, SeparatorSpacingSizes } = require('../util/Constants');
5
+
6
+ class SeparatorComponent extends BaseMessageComponent {
7
+ /**
8
+ * @property {SeparatorSpacingSizes} [spacing] Size of separator padding — SeparatorSpacingSizes.SMALL for small padding, SeparatorSpacingSizes.LARGE for large padding. Defaults to SeparatorSpacingSizes.SMALL
9
+ * @property {Boolean} [divider] Whether a visual divider should be displayed in the component. Defaults to true
10
+ */
11
+
12
+ /**
13
+ * @param {SeparatorComponent | APISeparatorComponent} [data={}] The data
14
+ */
15
+ constructor(data = {}) {
16
+ super({ type: 'SEPARATOR' });
17
+
18
+ this.setup(data);
19
+ }
20
+
21
+ setup(data) {
22
+ super.setup(data);
23
+ /**
24
+ * Size of separator padding — SeparatorSpacingSizes.SMALL for small padding, SeparatorSpacingSizes.LARGE for large padding. Defaults to SeparatorSpacingSizes.SMALL
25
+ * @type {SeparatorSpacingSizes}
26
+ */
27
+ this.spacing = data.spacing ?? SeparatorSpacingSizes.SMALL;
28
+
29
+ /**
30
+ * Whether a visual divider should be displayed in the component. Defaults to true
31
+ * @type {Boolean}
32
+ */
33
+ this.divider = data.divider ?? true;
34
+ }
35
+
36
+ /**
37
+ * @returns {APISeparatorComponent}
38
+ */
39
+ toJSON() {
40
+ return {
41
+ type: MessageComponentTypes[this.type],
42
+ spacing: this.spacing,
43
+ divider: this.divider,
44
+ };
45
+ }
46
+ }
47
+
48
+ module.exports = SeparatorComponent;