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,300 @@
1
+ 'use strict';
2
+
3
+ const EventEmitter = require('node:events');
4
+ const { setTimeout } = require('node:timers');
5
+ const { Collection } = require('@discordjs/collection');
6
+ const { TypeError } = require('../../errors');
7
+ const Util = require('../../util/Util');
8
+
9
+ /**
10
+ * Filter to be applied to the collector.
11
+ * @typedef {Function} CollectorFilter
12
+ * @param {...*} args Any arguments received by the listener
13
+ * @param {Collection} collection The items collected by this collector
14
+ * @returns {boolean|Promise<boolean>}
15
+ */
16
+
17
+ /**
18
+ * Options to be applied to the collector.
19
+ * @typedef {Object} CollectorOptions
20
+ * @property {CollectorFilter} [filter] The filter applied to this collector
21
+ * @property {number} [time] How long to run the collector for in milliseconds
22
+ * @property {number} [idle] How long to stop the collector after inactivity in milliseconds
23
+ * @property {boolean} [dispose=false] Whether to dispose data when it's deleted
24
+ */
25
+
26
+ /**
27
+ * Abstract class for defining a new Collector.
28
+ * @extends {EventEmitter}
29
+ * @abstract
30
+ */
31
+ class Collector extends EventEmitter {
32
+ constructor(client, options = {}) {
33
+ super();
34
+
35
+ /**
36
+ * The client that instantiated this Collector
37
+ * @name Collector#client
38
+ * @type {Client}
39
+ * @readonly
40
+ */
41
+ Object.defineProperty(this, 'client', { value: client });
42
+
43
+ /**
44
+ * The filter applied to this collector
45
+ * @type {CollectorFilter}
46
+ * @returns {boolean|Promise<boolean>}
47
+ */
48
+ this.filter = options.filter ?? (() => true);
49
+
50
+ /**
51
+ * The options of this collector
52
+ * @type {CollectorOptions}
53
+ */
54
+ this.options = options;
55
+
56
+ /**
57
+ * The items collected by this collector
58
+ * @type {Collection}
59
+ */
60
+ this.collected = new Collection();
61
+
62
+ /**
63
+ * Whether this collector has finished collecting
64
+ * @type {boolean}
65
+ */
66
+ this.ended = false;
67
+
68
+ /**
69
+ * Timeout for cleanup
70
+ * @type {?Timeout}
71
+ * @private
72
+ */
73
+ this._timeout = null;
74
+
75
+ /**
76
+ * Timeout for cleanup due to inactivity
77
+ * @type {?Timeout}
78
+ * @private
79
+ */
80
+ this._idletimeout = null;
81
+
82
+ if (typeof this.filter !== 'function') {
83
+ throw new TypeError('INVALID_TYPE', 'options.filter', 'function');
84
+ }
85
+
86
+ this.handleCollect = this.handleCollect.bind(this);
87
+ this.handleDispose = this.handleDispose.bind(this);
88
+
89
+ if (options.time) this._timeout = setTimeout(() => this.stop('time'), options.time).unref();
90
+ if (options.idle) this._idletimeout = setTimeout(() => this.stop('idle'), options.idle).unref();
91
+ }
92
+
93
+ /**
94
+ * Call this to handle an event as a collectable element. Accepts any event data as parameters.
95
+ * @param {...*} args The arguments emitted by the listener
96
+ * @returns {Promise<void>}
97
+ * @emits Collector#collect
98
+ */
99
+ async handleCollect(...args) {
100
+ const collect = await this.collect(...args);
101
+
102
+ if (collect && (await this.filter(...args, this.collected))) {
103
+ this.collected.set(collect, args[0]);
104
+
105
+ /**
106
+ * Emitted whenever an element is collected.
107
+ * @event Collector#collect
108
+ * @param {...*} args The arguments emitted by the listener
109
+ */
110
+ this.emit('collect', ...args);
111
+
112
+ if (this._idletimeout) {
113
+ clearTimeout(this._idletimeout);
114
+ this._idletimeout = setTimeout(() => this.stop('idle'), this.options.idle).unref();
115
+ }
116
+ }
117
+ this.checkEnd();
118
+ }
119
+
120
+ /**
121
+ * Call this to remove an element from the collection. Accepts any event data as parameters.
122
+ * @param {...*} args The arguments emitted by the listener
123
+ * @returns {Promise<void>}
124
+ * @emits Collector#dispose
125
+ */
126
+ async handleDispose(...args) {
127
+ if (!this.options.dispose) return;
128
+
129
+ const dispose = this.dispose(...args);
130
+ if (!dispose || !(await this.filter(...args)) || !this.collected.has(dispose)) return;
131
+ this.collected.delete(dispose);
132
+
133
+ /**
134
+ * Emitted whenever an element is disposed of.
135
+ * @event Collector#dispose
136
+ * @param {...*} args The arguments emitted by the listener
137
+ */
138
+ this.emit('dispose', ...args);
139
+ this.checkEnd();
140
+ }
141
+
142
+ /**
143
+ * Returns a promise that resolves with the next collected element;
144
+ * rejects with collected elements if the collector finishes without receiving a next element
145
+ * @type {Promise}
146
+ * @readonly
147
+ */
148
+ get next() {
149
+ return new Promise((resolve, reject) => {
150
+ if (this.ended) {
151
+ reject(this.collected);
152
+ return;
153
+ }
154
+
155
+ const cleanup = () => {
156
+ this.removeListener('collect', onCollect);
157
+ this.removeListener('end', onEnd);
158
+ };
159
+
160
+ const onCollect = item => {
161
+ cleanup();
162
+ resolve(item);
163
+ };
164
+
165
+ const onEnd = () => {
166
+ cleanup();
167
+ reject(this.collected); // eslint-disable-line prefer-promise-reject-errors
168
+ };
169
+
170
+ this.on('collect', onCollect);
171
+ this.on('end', onEnd);
172
+ });
173
+ }
174
+
175
+ /**
176
+ * Stops this collector and emits the `end` event.
177
+ * @param {string} [reason='user'] The reason this collector is ending
178
+ * @emits Collector#end
179
+ */
180
+ stop(reason = 'user') {
181
+ if (this.ended) return;
182
+
183
+ if (this._timeout) {
184
+ clearTimeout(this._timeout);
185
+ this._timeout = null;
186
+ }
187
+ if (this._idletimeout) {
188
+ clearTimeout(this._idletimeout);
189
+ this._idletimeout = null;
190
+ }
191
+ this.ended = true;
192
+
193
+ /**
194
+ * Emitted when the collector is finished collecting.
195
+ * @event Collector#end
196
+ * @param {Collection} collected The elements collected by the collector
197
+ * @param {string} reason The reason the collector ended
198
+ */
199
+ this.emit('end', this.collected, reason);
200
+ }
201
+
202
+ /**
203
+ * Options used to reset the timeout and idle timer of a {@link Collector}.
204
+ * @typedef {Object} CollectorResetTimerOptions
205
+ * @property {number} [time] How long to run the collector for (in milliseconds)
206
+ * @property {number} [idle] How long to wait to stop the collector after inactivity (in milliseconds)
207
+ */
208
+
209
+ /**
210
+ * Resets the collector's timeout and idle timer.
211
+ * @param {CollectorResetTimerOptions} [options] Options for resetting
212
+ */
213
+ resetTimer({ time, idle } = {}) {
214
+ if (this._timeout) {
215
+ clearTimeout(this._timeout);
216
+ this._timeout = setTimeout(() => this.stop('time'), time ?? this.options.time).unref();
217
+ }
218
+ if (this._idletimeout) {
219
+ clearTimeout(this._idletimeout);
220
+ this._idletimeout = setTimeout(() => this.stop('idle'), idle ?? this.options.idle).unref();
221
+ }
222
+ }
223
+
224
+ /**
225
+ * Checks whether the collector should end, and if so, ends it.
226
+ * @returns {boolean} Whether the collector ended or not
227
+ */
228
+ checkEnd() {
229
+ const reason = this.endReason;
230
+ if (reason) this.stop(reason);
231
+ return Boolean(reason);
232
+ }
233
+
234
+ /**
235
+ * Allows collectors to be consumed with for-await-of loops
236
+ * @see {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/for-await...of}
237
+ */
238
+ async *[Symbol.asyncIterator]() {
239
+ const queue = [];
240
+ const onCollect = item => queue.push(item);
241
+ this.on('collect', onCollect);
242
+
243
+ try {
244
+ while (queue.length || !this.ended) {
245
+ if (queue.length) {
246
+ yield queue.shift();
247
+ } else {
248
+ // eslint-disable-next-line no-await-in-loop
249
+ await new Promise(resolve => {
250
+ const tick = () => {
251
+ this.removeListener('collect', tick);
252
+ this.removeListener('end', tick);
253
+ return resolve();
254
+ };
255
+ this.on('collect', tick);
256
+ this.on('end', tick);
257
+ });
258
+ }
259
+ }
260
+ } finally {
261
+ this.removeListener('collect', onCollect);
262
+ }
263
+ }
264
+
265
+ toJSON() {
266
+ return Util.flatten(this);
267
+ }
268
+
269
+ /* eslint-disable no-empty-function */
270
+ /**
271
+ * The reason this collector has ended with, or null if it hasn't ended yet
272
+ * @type {?string}
273
+ * @readonly
274
+ * @abstract
275
+ */
276
+ get endReason() {}
277
+
278
+ /**
279
+ * Handles incoming events from the `handleCollect` function. Returns null if the event should not
280
+ * be collected, or returns an object describing the data that should be stored.
281
+ * @see Collector#handleCollect
282
+ * @param {...*} args Any args the event listener emits
283
+ * @returns {?(*|Promise<?*>)} Data to insert into collection, if any
284
+ * @abstract
285
+ */
286
+ collect() {}
287
+
288
+ /**
289
+ * Handles incoming events from the `handleDispose`. Returns null if the event should not
290
+ * be disposed, or returns the key that should be removed.
291
+ * @see Collector#handleDispose
292
+ * @param {...*} args Any args the event listener emits
293
+ * @returns {?*} Key to remove from the collection, if any
294
+ * @abstract
295
+ */
296
+ dispose() {}
297
+ /* eslint-enable no-empty-function */
298
+ }
299
+
300
+ module.exports = Collector;
@@ -0,0 +1,313 @@
1
+ 'use strict';
2
+
3
+ const { Error } = require('../../errors');
4
+ const { InteractionResponseTypes, InteractionTypes } = require('../../util/Constants');
5
+ const MessageFlags = require('../../util/MessageFlags');
6
+ const InteractionCollector = require('../InteractionCollector');
7
+ const MessagePayload = require('../MessagePayload');
8
+ const Modal = require('../Modal');
9
+
10
+ /**
11
+ * Interface for classes that support shared interaction response types.
12
+ * @interface
13
+ */
14
+ class InteractionResponses {
15
+ /**
16
+ * Options for deferring the reply to an {@link Interaction}.
17
+ * @typedef {Object} InteractionDeferReplyOptions
18
+ * @property {boolean} [ephemeral] Whether the reply should be ephemeral
19
+ * @property {boolean} [fetchReply] Whether to fetch the reply
20
+ */
21
+
22
+ /**
23
+ * Options for deferring and updating the reply to a {@link MessageComponentInteraction}.
24
+ * @typedef {Object} InteractionDeferUpdateOptions
25
+ * @property {boolean} [fetchReply] Whether to fetch the reply
26
+ */
27
+
28
+ /**
29
+ * Options for a reply to an {@link Interaction}.
30
+ * @typedef {BaseMessageOptionsWithPoll} InteractionReplyOptions
31
+ * @property {boolean} [ephemeral] Whether the reply should be ephemeral
32
+ * @property {boolean} [fetchReply] Whether to fetch the reply
33
+ * @property {MessageFlags} [flags] Which flags to set for the message.
34
+ * Only `SUPPRESS_EMBEDS` and `EPHEMERAL` can be set.
35
+ */
36
+
37
+ /**
38
+ * Options for updating the message received from a {@link MessageComponentInteraction}.
39
+ * @typedef {MessageEditOptions} InteractionUpdateOptions
40
+ * @property {boolean} [fetchReply] Whether to fetch the reply
41
+ */
42
+
43
+ /**
44
+ * Defers the reply to this interaction.
45
+ * @param {InteractionDeferReplyOptions} [options] Options for deferring the reply to this interaction
46
+ * @returns {Promise<Message|APIMessage|void>}
47
+ * @example
48
+ * // Defer the reply to this interaction
49
+ * interaction.deferReply()
50
+ * .then(console.log)
51
+ * .catch(console.error)
52
+ * @example
53
+ * // Defer to send an ephemeral reply later
54
+ * interaction.deferReply({ ephemeral: true })
55
+ * .then(console.log)
56
+ * .catch(console.error);
57
+ */
58
+ async deferReply(options = {}) {
59
+ if (this.deferred || this.replied) throw new Error('INTERACTION_ALREADY_REPLIED');
60
+ this.ephemeral = options.ephemeral ?? false;
61
+ await this.client.api.interactions(this.id, this.token).callback.post({
62
+ data: {
63
+ type: InteractionResponseTypes.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE,
64
+ data: {
65
+ flags: options.ephemeral ? MessageFlags.FLAGS.EPHEMERAL : undefined,
66
+ },
67
+ },
68
+ auth: false,
69
+ });
70
+ this.deferred = true;
71
+
72
+ return options.fetchReply ? this.fetchReply() : undefined;
73
+ }
74
+
75
+ /**
76
+ * Creates a reply to this interaction.
77
+ * <info>Use the `fetchReply` option to get the bot's reply message.</info>
78
+ * @param {string|MessagePayload|InteractionReplyOptions} options The options for the reply
79
+ * @returns {Promise<Message|APIMessage|void>}
80
+ * @example
81
+ * // Reply to the interaction and fetch the response
82
+ * interaction.reply({ content: 'Pong!', fetchReply: true })
83
+ * .then((message) => console.log(`Reply sent with content ${message.content}`))
84
+ * .catch(console.error);
85
+ * @example
86
+ * // Create an ephemeral reply with an embed
87
+ * const embed = new MessageEmbed().setDescription('Pong!');
88
+ *
89
+ * interaction.reply({ embeds: [embed], ephemeral: true })
90
+ * .then(() => console.log('Reply sent.'))
91
+ * .catch(console.error);
92
+ */
93
+ async reply(options) {
94
+ if (this.deferred || this.replied) throw new Error('INTERACTION_ALREADY_REPLIED');
95
+ this.ephemeral = options.ephemeral ?? false;
96
+
97
+ let messagePayload;
98
+ if (options instanceof MessagePayload) messagePayload = options;
99
+ else messagePayload = MessagePayload.create(this, options);
100
+
101
+ const { data, files } = await messagePayload.resolveData().resolveFiles();
102
+
103
+ await this.client.api.interactions(this.id, this.token).callback.post({
104
+ data: {
105
+ type: InteractionResponseTypes.CHANNEL_MESSAGE_WITH_SOURCE,
106
+ data,
107
+ },
108
+ files,
109
+ auth: false,
110
+ });
111
+ this.replied = true;
112
+
113
+ return options.fetchReply ? this.fetchReply() : undefined;
114
+ }
115
+
116
+ /**
117
+ * Fetches a reply to this interaction.
118
+ * @see Webhook#fetchMessage
119
+ * @param {MessageResolvable|'@original'} [message='@original'] The response to fetch
120
+ * @returns {Promise<Message|APIMessage>}
121
+ * @example
122
+ * // Fetch the initial reply to this interaction
123
+ * interaction.fetchReply()
124
+ * .then(reply => console.log(`Replied with ${reply.content}`))
125
+ * .catch(console.error);
126
+ */
127
+ fetchReply(message = '@original') {
128
+ return this.webhook.fetchMessage(message);
129
+ }
130
+
131
+ /**
132
+ * Options that can be passed into {@link InteractionResponses#editReply}.
133
+ * @typedef {WebhookEditMessageOptions} InteractionEditReplyOptions
134
+ * @property {MessageResolvable|'@original'} [message='@original'] The response to edit
135
+ */
136
+
137
+ /**
138
+ * Edits a reply to this interaction.
139
+ * @see Webhook#editMessage
140
+ * @param {string|MessagePayload|InteractionEditReplyOptions} options The new options for the message
141
+ * @returns {Promise<Message|APIMessage>}
142
+ * @example
143
+ * // Edit the initial reply to this interaction
144
+ * interaction.editReply('New content')
145
+ * .then(console.log)
146
+ * .catch(console.error);
147
+ */
148
+ async editReply(options) {
149
+ if (!this.deferred && !this.replied) throw new Error('INTERACTION_NOT_REPLIED');
150
+ const message = await this.webhook.editMessage(options.message ?? '@original', options);
151
+ this.replied = true;
152
+ return message;
153
+ }
154
+
155
+ /**
156
+ * Deletes a reply to this interaction.
157
+ * @see Webhook#deleteMessage
158
+ * @param {MessageResolvable|'@original'} [message='@original'] The response to delete
159
+ * @returns {Promise<void>}
160
+ * @example
161
+ * // Delete the initial reply to this interaction
162
+ * interaction.deleteReply()
163
+ * .then(console.log)
164
+ * .catch(console.error);
165
+ */
166
+ async deleteReply(message = '@original') {
167
+ await this.webhook.deleteMessage(message);
168
+ }
169
+
170
+ /**
171
+ * Send a follow-up message to this interaction.
172
+ * @param {string|MessagePayload|InteractionReplyOptions} options The options for the reply
173
+ * @returns {Promise<Message|APIMessage>}
174
+ */
175
+ async followUp(options) {
176
+ if (!this.deferred && !this.replied) throw new Error('INTERACTION_NOT_REPLIED');
177
+ return this.webhook.send(options);
178
+ }
179
+
180
+ /**
181
+ * Defers an update to the message to which the component was attached.
182
+ * @param {InteractionDeferUpdateOptions} [options] Options for deferring the update to this interaction
183
+ * @returns {Promise<Message|APIMessage|void>}
184
+ * @example
185
+ * // Defer updating and reset the component's loading state
186
+ * interaction.deferUpdate()
187
+ * .then(console.log)
188
+ * .catch(console.error);
189
+ */
190
+ async deferUpdate(options = {}) {
191
+ if (this.deferred || this.replied) throw new Error('INTERACTION_ALREADY_REPLIED');
192
+ await this.client.api.interactions(this.id, this.token).callback.post({
193
+ data: {
194
+ type: InteractionResponseTypes.DEFERRED_MESSAGE_UPDATE,
195
+ },
196
+ auth: false,
197
+ });
198
+ this.deferred = true;
199
+
200
+ return options.fetchReply ? this.fetchReply() : undefined;
201
+ }
202
+
203
+ /**
204
+ * Updates the original message of the component on which the interaction was received on.
205
+ * @param {string|MessagePayload|InteractionUpdateOptions} options The options for the updated message
206
+ * @returns {Promise<Message|APIMessage|void>}
207
+ * @example
208
+ * // Remove the components from the message
209
+ * interaction.update({
210
+ * content: "A component interaction was received",
211
+ * components: []
212
+ * })
213
+ * .then(console.log)
214
+ * .catch(console.error);
215
+ */
216
+ async update(options) {
217
+ if (this.deferred || this.replied) throw new Error('INTERACTION_ALREADY_REPLIED');
218
+
219
+ let messagePayload;
220
+ if (options instanceof MessagePayload) messagePayload = options;
221
+ else messagePayload = MessagePayload.create(this, options);
222
+
223
+ const { data, files } = await messagePayload.resolveData().resolveFiles();
224
+
225
+ await this.client.api.interactions(this.id, this.token).callback.post({
226
+ data: {
227
+ type: InteractionResponseTypes.UPDATE_MESSAGE,
228
+ data,
229
+ },
230
+ files,
231
+ auth: false,
232
+ });
233
+ this.replied = true;
234
+
235
+ return options.fetchReply ? this.fetchReply() : undefined;
236
+ }
237
+
238
+ /**
239
+ * Shows a modal component
240
+ * @param {Modal|ModalOptions} modal The modal to show
241
+ * @returns {Promise<void>}
242
+ */
243
+ async showModal(modal) {
244
+ if (this.deferred || this.replied) throw new Error('INTERACTION_ALREADY_REPLIED');
245
+
246
+ const _modal = modal instanceof Modal ? modal : new Modal(modal);
247
+ await this.client.api.interactions(this.id, this.token).callback.post({
248
+ data: {
249
+ type: InteractionResponseTypes.MODAL,
250
+ data: _modal.toJSON(),
251
+ },
252
+ });
253
+ this.replied = true;
254
+ }
255
+
256
+ /**
257
+ * An object containing the same properties as CollectorOptions, but a few more:
258
+ * @typedef {Object} AwaitModalSubmitOptions
259
+ * @property {CollectorFilter} [filter] The filter applied to this collector
260
+ * @property {number} time Time in milliseconds to wait for an interaction before rejecting
261
+ */
262
+
263
+ /**
264
+ * Collects a single modal submit interaction that passes the filter.
265
+ * The Promise will reject if the time expires.
266
+ * @param {AwaitModalSubmitOptions} options Options to pass to the internal collector
267
+ * @returns {Promise<ModalSubmitInteraction>}
268
+ * @example
269
+ * // Collect a modal submit interaction
270
+ * const filter = (interaction) => interaction.customId === 'modal';
271
+ * interaction.awaitModalSubmit({ filter, time: 15_000 })
272
+ * .then(interaction => console.log(`${interaction.customId} was submitted!`))
273
+ * .catch(console.error);
274
+ */
275
+ awaitModalSubmit(options) {
276
+ if (typeof options.time !== 'number') throw new Error('INVALID_TYPE', 'time', 'number');
277
+ const _options = { ...options, max: 1, interactionType: InteractionTypes.MODAL_SUBMIT };
278
+ return new Promise((resolve, reject) => {
279
+ const collector = new InteractionCollector(this.client, _options);
280
+ collector.once('end', (interactions, reason) => {
281
+ const interaction = interactions.first();
282
+ if (interaction) resolve(interaction);
283
+ else reject(new Error('INTERACTION_COLLECTOR_ERROR', reason));
284
+ });
285
+ });
286
+ }
287
+
288
+ static applyToClass(structure, ignore = []) {
289
+ const props = [
290
+ 'deferReply',
291
+ 'reply',
292
+ 'fetchReply',
293
+ 'editReply',
294
+ 'deleteReply',
295
+ 'followUp',
296
+ 'deferUpdate',
297
+ 'update',
298
+ 'showModal',
299
+ 'awaitModalSubmit',
300
+ ];
301
+
302
+ for (const prop of props) {
303
+ if (ignore.includes(prop)) continue;
304
+ Object.defineProperty(
305
+ structure.prototype,
306
+ prop,
307
+ Object.getOwnPropertyDescriptor(InteractionResponses.prototype, prop),
308
+ );
309
+ }
310
+ }
311
+ }
312
+
313
+ module.exports = InteractionResponses;