@biggy1337/discord-sbjs 1.3.11

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 (373) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +147 -0
  3. package/package.json +80 -0
  4. package/src/WebSocket.js +39 -0
  5. package/src/client/BaseClient.js +110 -0
  6. package/src/client/Client.js +1076 -0
  7. package/src/client/WebhookClient.js +61 -0
  8. package/src/client/actions/Action.js +133 -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 +34 -0
  48. package/src/client/actions/MessageDeleteBulk.js +43 -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 +71 -0
  52. package/src/client/actions/MessageReactionRemove.js +39 -0
  53. package/src/client/actions/MessageReactionRemoveAll.js +36 -0
  54. package/src/client/actions/MessageReactionRemoveEmoji.js +30 -0
  55. package/src/client/actions/MessageUpdate.js +28 -0
  56. package/src/client/actions/PresenceUpdate.js +55 -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 +60 -0
  63. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  64. package/src/client/actions/ThreadMembersUpdate.js +38 -0
  65. package/src/client/actions/TypingStart.js +31 -0
  66. package/src/client/actions/UserUpdate.js +35 -0
  67. package/src/client/actions/VoiceStateUpdate.js +63 -0
  68. package/src/client/actions/WebhooksUpdate.js +20 -0
  69. package/src/client/voice/ClientVoiceManager.js +162 -0
  70. package/src/client/voice/StreamEventRouter.js +60 -0
  71. package/src/client/voice/VoiceConnection.js +1173 -0
  72. package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
  73. package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
  74. package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
  75. package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
  76. package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
  77. package/src/client/voice/networking/VoiceUDPClient.js +187 -0
  78. package/src/client/voice/networking/VoiceWebSocket.js +347 -0
  79. package/src/client/voice/player/MediaPlayer.js +321 -0
  80. package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
  81. package/src/client/voice/player/processing/IvfSplitter.js +106 -0
  82. package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
  83. package/src/client/voice/receiver/PacketHandler.js +260 -0
  84. package/src/client/voice/receiver/Receiver.js +96 -0
  85. package/src/client/voice/receiver/Recorder.js +191 -0
  86. package/src/client/voice/util/Function.js +116 -0
  87. package/src/client/voice/util/PlayInterface.js +122 -0
  88. package/src/client/voice/util/Secretbox.js +64 -0
  89. package/src/client/voice/util/Silence.js +16 -0
  90. package/src/client/voice/util/Socket.js +62 -0
  91. package/src/client/voice/util/VolumeInterface.js +104 -0
  92. package/src/client/websocket/DispatchTable.js +7 -0
  93. package/src/client/websocket/GatewaySendScheduler.js +122 -0
  94. package/src/client/websocket/WebSocketManager.js +439 -0
  95. package/src/client/websocket/WebSocketShard.js +1085 -0
  96. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  97. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  98. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  99. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  100. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  101. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  102. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  103. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  104. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  105. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  106. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  107. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  108. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  109. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  110. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -0
  111. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  112. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  113. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  114. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  115. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  116. package/src/client/websocket/handlers/GUILD_CREATE.js +51 -0
  117. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  118. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  119. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  120. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +45 -0
  121. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  122. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  123. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  124. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  125. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  126. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  128. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  129. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  130. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  131. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  132. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  133. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  134. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
  135. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  136. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  137. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  138. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  139. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  140. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -0
  141. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -0
  142. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  143. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  144. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  145. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  146. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  147. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  148. package/src/client/websocket/handlers/READY.js +156 -0
  149. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
  150. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
  151. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -0
  152. package/src/client/websocket/handlers/RESUMED.js +14 -0
  153. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  154. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  155. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  156. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  157. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  158. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  159. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  160. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  161. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  162. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  163. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -0
  164. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  165. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +82 -0
  166. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
  167. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  168. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
  169. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
  170. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +12 -0
  171. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  172. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  173. package/src/client/websocket/handlers/index.js +84 -0
  174. package/src/errors/DJSError.js +61 -0
  175. package/src/errors/Messages.js +218 -0
  176. package/src/errors/index.js +4 -0
  177. package/src/index.js +172 -0
  178. package/src/managers/ApplicationCommandManager.js +264 -0
  179. package/src/managers/ApplicationCommandPermissionsManager.js +417 -0
  180. package/src/managers/AutoModerationRuleManager.js +296 -0
  181. package/src/managers/BaseGuildEmojiManager.js +80 -0
  182. package/src/managers/BaseManager.js +19 -0
  183. package/src/managers/BillingManager.js +66 -0
  184. package/src/managers/CachedManager.js +72 -0
  185. package/src/managers/ChannelManager.js +148 -0
  186. package/src/managers/ClientUserSettingManager.js +372 -0
  187. package/src/managers/DataManager.js +61 -0
  188. package/src/managers/DeveloperManager.js +265 -0
  189. package/src/managers/GuildBanManager.js +252 -0
  190. package/src/managers/GuildChannelManager.js +488 -0
  191. package/src/managers/GuildEmojiManager.js +171 -0
  192. package/src/managers/GuildEmojiRoleManager.js +118 -0
  193. package/src/managers/GuildForumThreadManager.js +108 -0
  194. package/src/managers/GuildInviteManager.js +213 -0
  195. package/src/managers/GuildManager.js +401 -0
  196. package/src/managers/GuildMemberManager.js +608 -0
  197. package/src/managers/GuildMemberRoleManager.js +195 -0
  198. package/src/managers/GuildScheduledEventManager.js +314 -0
  199. package/src/managers/GuildSettingManager.js +155 -0
  200. package/src/managers/GuildStickerManager.js +179 -0
  201. package/src/managers/GuildTextThreadManager.js +98 -0
  202. package/src/managers/InteractionManager.js +39 -0
  203. package/src/managers/MessageManager.js +457 -0
  204. package/src/managers/PermissionOverwriteManager.js +169 -0
  205. package/src/managers/PresenceManager.js +71 -0
  206. package/src/managers/QuestManager.js +391 -0
  207. package/src/managers/ReactionManager.js +67 -0
  208. package/src/managers/ReactionUserManager.js +73 -0
  209. package/src/managers/RelationshipManager.js +341 -0
  210. package/src/managers/RoleManager.js +448 -0
  211. package/src/managers/SessionManager.js +66 -0
  212. package/src/managers/StageInstanceManager.js +162 -0
  213. package/src/managers/ThreadManager.js +175 -0
  214. package/src/managers/ThreadMemberManager.js +186 -0
  215. package/src/managers/UserManager.js +274 -0
  216. package/src/managers/UserNoteManager.js +53 -0
  217. package/src/managers/VoiceStateManager.js +59 -0
  218. package/src/rest/APIRequest.js +198 -0
  219. package/src/rest/APIRouter.js +94 -0
  220. package/src/rest/DiscordAPIError.js +120 -0
  221. package/src/rest/HTTPError.js +62 -0
  222. package/src/rest/RESTManager.js +203 -0
  223. package/src/rest/RateLimitCoordinator.js +156 -0
  224. package/src/rest/RateLimitError.js +55 -0
  225. package/src/rest/RequestHandler.js +552 -0
  226. package/src/sharding/Shard.js +444 -0
  227. package/src/sharding/ShardClientUtil.js +279 -0
  228. package/src/sharding/ShardingManager.js +319 -0
  229. package/src/structures/AnonymousGuild.js +98 -0
  230. package/src/structures/ApplicationCommand.js +593 -0
  231. package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
  232. package/src/structures/AutoModerationActionExecution.js +89 -0
  233. package/src/structures/AutoModerationRule.js +294 -0
  234. package/src/structures/AutocompleteInteraction.js +107 -0
  235. package/src/structures/Base.js +43 -0
  236. package/src/structures/BaseCommandInteraction.js +211 -0
  237. package/src/structures/BaseGuild.js +124 -0
  238. package/src/structures/BaseGuildEmoji.js +56 -0
  239. package/src/structures/BaseGuildTextChannel.js +191 -0
  240. package/src/structures/BaseGuildVoiceChannel.js +241 -0
  241. package/src/structures/BaseMessageComponent.js +181 -0
  242. package/src/structures/ButtonInteraction.js +11 -0
  243. package/src/structures/CallState.js +63 -0
  244. package/src/structures/CategoryChannel.js +85 -0
  245. package/src/structures/Channel.js +284 -0
  246. package/src/structures/ClientPresence.js +77 -0
  247. package/src/structures/ClientUser.js +706 -0
  248. package/src/structures/CommandInteraction.js +41 -0
  249. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  250. package/src/structures/ContainerComponent.js +68 -0
  251. package/src/structures/ContextMenuInteraction.js +65 -0
  252. package/src/structures/DMChannel.js +222 -0
  253. package/src/structures/DirectoryChannel.js +20 -0
  254. package/src/structures/Emoji.js +148 -0
  255. package/src/structures/FileComponent.js +49 -0
  256. package/src/structures/ForumChannel.js +31 -0
  257. package/src/structures/GroupDMChannel.js +415 -0
  258. package/src/structures/Guild.js +1804 -0
  259. package/src/structures/GuildAuditLogs.js +746 -0
  260. package/src/structures/GuildBan.js +59 -0
  261. package/src/structures/GuildBoost.js +108 -0
  262. package/src/structures/GuildChannel.js +470 -0
  263. package/src/structures/GuildEmoji.js +161 -0
  264. package/src/structures/GuildMember.js +636 -0
  265. package/src/structures/GuildPreview.js +191 -0
  266. package/src/structures/GuildPreviewEmoji.js +27 -0
  267. package/src/structures/GuildScheduledEvent.js +536 -0
  268. package/src/structures/GuildTemplate.js +236 -0
  269. package/src/structures/Integration.js +188 -0
  270. package/src/structures/IntegrationApplication.js +96 -0
  271. package/src/structures/Interaction.js +290 -0
  272. package/src/structures/InteractionCollector.js +248 -0
  273. package/src/structures/InteractionWebhook.js +43 -0
  274. package/src/structures/Invite.js +358 -0
  275. package/src/structures/InviteGuild.js +23 -0
  276. package/src/structures/InviteStageInstance.js +86 -0
  277. package/src/structures/MediaChannel.js +11 -0
  278. package/src/structures/MediaGalleryComponent.js +41 -0
  279. package/src/structures/MediaGalleryItem.js +47 -0
  280. package/src/structures/Message.js +1272 -0
  281. package/src/structures/MessageActionRow.js +105 -0
  282. package/src/structures/MessageAttachment.js +216 -0
  283. package/src/structures/MessageButton.js +166 -0
  284. package/src/structures/MessageCollector.js +146 -0
  285. package/src/structures/MessageComponentInteraction.js +120 -0
  286. package/src/structures/MessageContextMenuInteraction.js +20 -0
  287. package/src/structures/MessageEmbed.js +596 -0
  288. package/src/structures/MessageMentions.js +273 -0
  289. package/src/structures/MessagePayload.js +354 -0
  290. package/src/structures/MessageReaction.js +181 -0
  291. package/src/structures/MessageSelectMenu.js +141 -0
  292. package/src/structures/Modal.js +161 -0
  293. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  294. package/src/structures/ModalSubmitInteraction.js +119 -0
  295. package/src/structures/NewsChannel.js +32 -0
  296. package/src/structures/OAuth2Guild.js +28 -0
  297. package/src/structures/PermissionOverwrites.js +198 -0
  298. package/src/structures/Poll.js +108 -0
  299. package/src/structures/PollAnswer.js +88 -0
  300. package/src/structures/Presence.js +1165 -0
  301. package/src/structures/ReactionCollector.js +229 -0
  302. package/src/structures/ReactionEmoji.js +31 -0
  303. package/src/structures/Role.js +590 -0
  304. package/src/structures/SectionComponent.js +48 -0
  305. package/src/structures/SelectMenuInteraction.js +21 -0
  306. package/src/structures/SeparatorComponent.js +48 -0
  307. package/src/structures/Session.js +81 -0
  308. package/src/structures/StageChannel.js +104 -0
  309. package/src/structures/StageInstance.js +208 -0
  310. package/src/structures/Sticker.js +310 -0
  311. package/src/structures/StickerPack.js +95 -0
  312. package/src/structures/StoreChannel.js +56 -0
  313. package/src/structures/Team.js +118 -0
  314. package/src/structures/TeamMember.js +80 -0
  315. package/src/structures/TextChannel.js +33 -0
  316. package/src/structures/TextDisplayComponent.js +40 -0
  317. package/src/structures/TextInputComponent.js +132 -0
  318. package/src/structures/ThreadChannel.js +605 -0
  319. package/src/structures/ThreadMember.js +105 -0
  320. package/src/structures/ThreadOnlyChannel.js +249 -0
  321. package/src/structures/ThumbnailComponent.js +57 -0
  322. package/src/structures/Typing.js +74 -0
  323. package/src/structures/UnfurledMediaItem.js +29 -0
  324. package/src/structures/User.js +992 -0
  325. package/src/structures/UserContextMenuInteraction.js +29 -0
  326. package/src/structures/VoiceChannel.js +110 -0
  327. package/src/structures/VoiceChannelEffect.js +69 -0
  328. package/src/structures/VoiceRegion.js +53 -0
  329. package/src/structures/VoiceState.js +354 -0
  330. package/src/structures/WebEmbed.js +373 -0
  331. package/src/structures/Webhook.js +478 -0
  332. package/src/structures/WelcomeChannel.js +60 -0
  333. package/src/structures/WelcomeScreen.js +48 -0
  334. package/src/structures/Widget.js +87 -0
  335. package/src/structures/WidgetMember.js +100 -0
  336. package/src/structures/interfaces/Application.js +953 -0
  337. package/src/structures/interfaces/Collector.js +301 -0
  338. package/src/structures/interfaces/InteractionResponses.js +313 -0
  339. package/src/structures/interfaces/TextBasedChannel.js +821 -0
  340. package/src/util/APITypes.js +59 -0
  341. package/src/util/ActivityFlags.js +44 -0
  342. package/src/util/ApplicationFlags.js +76 -0
  343. package/src/util/AttachmentFlags.js +38 -0
  344. package/src/util/BitField.js +170 -0
  345. package/src/util/ChannelFlags.js +45 -0
  346. package/src/util/Constants.js +1953 -0
  347. package/src/util/DataResolver.js +162 -0
  348. package/src/util/FastQueue.js +93 -0
  349. package/src/util/FetchUtil.js +77 -0
  350. package/src/util/Formatters.js +228 -0
  351. package/src/util/GuildMemberFlags.js +43 -0
  352. package/src/util/Intents.js +74 -0
  353. package/src/util/InviteFlags.js +34 -0
  354. package/src/util/LimitedCollection.js +131 -0
  355. package/src/util/ListenerUtil.js +12 -0
  356. package/src/util/MessageFlags.js +63 -0
  357. package/src/util/Options.js +431 -0
  358. package/src/util/Permissions.js +202 -0
  359. package/src/util/PremiumUsageFlags.js +31 -0
  360. package/src/util/PurchasedFlags.js +33 -0
  361. package/src/util/RemoteAuth.js +425 -0
  362. package/src/util/RoleFlags.js +37 -0
  363. package/src/util/SnowflakeUtil.js +92 -0
  364. package/src/util/Speaking.js +33 -0
  365. package/src/util/Sweepers.js +493 -0
  366. package/src/util/SystemChannelFlags.js +55 -0
  367. package/src/util/ThreadMemberFlags.js +30 -0
  368. package/src/util/UserFlags.js +104 -0
  369. package/src/util/Util.js +1144 -0
  370. package/typings/enums.d.ts +437 -0
  371. package/typings/index.d.ts +8857 -0
  372. package/typings/index.test-d.ts +0 -0
  373. package/typings/rawDataTypes.d.ts +403 -0
@@ -0,0 +1,301 @@
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 FastQueue = require('../../util/FastQueue');
8
+ const Util = require('../../util/Util');
9
+
10
+ /**
11
+ * Filter to be applied to the collector.
12
+ * @typedef {Function} CollectorFilter
13
+ * @param {...*} args Any arguments received by the listener
14
+ * @param {Collection} collection The items collected by this collector
15
+ * @returns {boolean|Promise<boolean>}
16
+ */
17
+
18
+ /**
19
+ * Options to be applied to the collector.
20
+ * @typedef {Object} CollectorOptions
21
+ * @property {CollectorFilter} [filter] The filter applied to this collector
22
+ * @property {number} [time] How long to run the collector for in milliseconds
23
+ * @property {number} [idle] How long to stop the collector after inactivity in milliseconds
24
+ * @property {boolean} [dispose=false] Whether to dispose data when it's deleted
25
+ */
26
+
27
+ /**
28
+ * Abstract class for defining a new Collector.
29
+ * @extends {EventEmitter}
30
+ * @abstract
31
+ */
32
+ class Collector extends EventEmitter {
33
+ constructor(client, options = {}) {
34
+ super();
35
+
36
+ /**
37
+ * The client that instantiated this Collector
38
+ * @name Collector#client
39
+ * @type {Client}
40
+ * @readonly
41
+ */
42
+ Object.defineProperty(this, 'client', { value: client });
43
+
44
+ /**
45
+ * The filter applied to this collector
46
+ * @type {CollectorFilter}
47
+ * @returns {boolean|Promise<boolean>}
48
+ */
49
+ this.filter = options.filter ?? (() => true);
50
+
51
+ /**
52
+ * The options of this collector
53
+ * @type {CollectorOptions}
54
+ */
55
+ this.options = options;
56
+
57
+ /**
58
+ * The items collected by this collector
59
+ * @type {Collection}
60
+ */
61
+ this.collected = new Collection();
62
+
63
+ /**
64
+ * Whether this collector has finished collecting
65
+ * @type {boolean}
66
+ */
67
+ this.ended = false;
68
+
69
+ /**
70
+ * Timeout for cleanup
71
+ * @type {?Timeout}
72
+ * @private
73
+ */
74
+ this._timeout = null;
75
+
76
+ /**
77
+ * Timeout for cleanup due to inactivity
78
+ * @type {?Timeout}
79
+ * @private
80
+ */
81
+ this._idletimeout = null;
82
+
83
+ if (typeof this.filter !== 'function') {
84
+ throw new TypeError('INVALID_TYPE', 'options.filter', 'function');
85
+ }
86
+
87
+ this.handleCollect = this.handleCollect.bind(this);
88
+ this.handleDispose = this.handleDispose.bind(this);
89
+
90
+ if (options.time) this._timeout = setTimeout(() => this.stop('time'), options.time).unref();
91
+ if (options.idle) this._idletimeout = setTimeout(() => this.stop('idle'), options.idle).unref();
92
+ }
93
+
94
+ /**
95
+ * Call this to handle an event as a collectable element. Accepts any event data as parameters.
96
+ * @param {...*} args The arguments emitted by the listener
97
+ * @returns {Promise<void>}
98
+ * @emits Collector#collect
99
+ */
100
+ async handleCollect(...args) {
101
+ const collect = await this.collect(...args);
102
+
103
+ if (collect && (await this.filter(...args, this.collected))) {
104
+ this.collected.set(collect, args[0]);
105
+
106
+ /**
107
+ * Emitted whenever an element is collected.
108
+ * @event Collector#collect
109
+ * @param {...*} args The arguments emitted by the listener
110
+ */
111
+ this.emit('collect', ...args);
112
+
113
+ if (this._idletimeout) {
114
+ clearTimeout(this._idletimeout);
115
+ this._idletimeout = setTimeout(() => this.stop('idle'), this.options.idle).unref();
116
+ }
117
+ }
118
+ this.checkEnd();
119
+ }
120
+
121
+ /**
122
+ * Call this to remove an element from the collection. Accepts any event data as parameters.
123
+ * @param {...*} args The arguments emitted by the listener
124
+ * @returns {Promise<void>}
125
+ * @emits Collector#dispose
126
+ */
127
+ async handleDispose(...args) {
128
+ if (!this.options.dispose) return;
129
+
130
+ const dispose = this.dispose(...args);
131
+ if (!dispose || !(await this.filter(...args)) || !this.collected.has(dispose)) return;
132
+ this.collected.delete(dispose);
133
+
134
+ /**
135
+ * Emitted whenever an element is disposed of.
136
+ * @event Collector#dispose
137
+ * @param {...*} args The arguments emitted by the listener
138
+ */
139
+ this.emit('dispose', ...args);
140
+ this.checkEnd();
141
+ }
142
+
143
+ /**
144
+ * Returns a promise that resolves with the next collected element;
145
+ * rejects with collected elements if the collector finishes without receiving a next element
146
+ * @type {Promise}
147
+ * @readonly
148
+ */
149
+ get next() {
150
+ return new Promise((resolve, reject) => {
151
+ if (this.ended) {
152
+ reject(this.collected);
153
+ return;
154
+ }
155
+
156
+ const cleanup = () => {
157
+ this.removeListener('collect', onCollect);
158
+ this.removeListener('end', onEnd);
159
+ };
160
+
161
+ const onCollect = item => {
162
+ cleanup();
163
+ resolve(item);
164
+ };
165
+
166
+ const onEnd = () => {
167
+ cleanup();
168
+ reject(this.collected); // eslint-disable-line prefer-promise-reject-errors
169
+ };
170
+
171
+ this.on('collect', onCollect);
172
+ this.on('end', onEnd);
173
+ });
174
+ }
175
+
176
+ /**
177
+ * Stops this collector and emits the `end` event.
178
+ * @param {string} [reason='user'] The reason this collector is ending
179
+ * @emits Collector#end
180
+ */
181
+ stop(reason = 'user') {
182
+ if (this.ended) return;
183
+
184
+ if (this._timeout) {
185
+ clearTimeout(this._timeout);
186
+ this._timeout = null;
187
+ }
188
+ if (this._idletimeout) {
189
+ clearTimeout(this._idletimeout);
190
+ this._idletimeout = null;
191
+ }
192
+ this.ended = true;
193
+
194
+ /**
195
+ * Emitted when the collector is finished collecting.
196
+ * @event Collector#end
197
+ * @param {Collection} collected The elements collected by the collector
198
+ * @param {string} reason The reason the collector ended
199
+ */
200
+ this.emit('end', this.collected, reason);
201
+ }
202
+
203
+ /**
204
+ * Options used to reset the timeout and idle timer of a {@link Collector}.
205
+ * @typedef {Object} CollectorResetTimerOptions
206
+ * @property {number} [time] How long to run the collector for (in milliseconds)
207
+ * @property {number} [idle] How long to wait to stop the collector after inactivity (in milliseconds)
208
+ */
209
+
210
+ /**
211
+ * Resets the collector's timeout and idle timer.
212
+ * @param {CollectorResetTimerOptions} [options] Options for resetting
213
+ */
214
+ resetTimer({ time, idle } = {}) {
215
+ if (this._timeout) {
216
+ clearTimeout(this._timeout);
217
+ this._timeout = setTimeout(() => this.stop('time'), time ?? this.options.time).unref();
218
+ }
219
+ if (this._idletimeout) {
220
+ clearTimeout(this._idletimeout);
221
+ this._idletimeout = setTimeout(() => this.stop('idle'), idle ?? this.options.idle).unref();
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Checks whether the collector should end, and if so, ends it.
227
+ * @returns {boolean} Whether the collector ended or not
228
+ */
229
+ checkEnd() {
230
+ const reason = this.endReason;
231
+ if (reason) this.stop(reason);
232
+ return Boolean(reason);
233
+ }
234
+
235
+ /**
236
+ * Allows collectors to be consumed with for-await-of loops
237
+ * @see {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/for-await...of}
238
+ */
239
+ async *[Symbol.asyncIterator]() {
240
+ const queue = new FastQueue();
241
+ const onCollect = item => queue.push(item);
242
+ this.on('collect', onCollect);
243
+
244
+ try {
245
+ while (queue.length || !this.ended) {
246
+ if (queue.length) {
247
+ yield queue.shift();
248
+ } else {
249
+ // eslint-disable-next-line no-await-in-loop
250
+ await new Promise(resolve => {
251
+ const tick = () => {
252
+ this.removeListener('collect', tick);
253
+ this.removeListener('end', tick);
254
+ return resolve();
255
+ };
256
+ this.on('collect', tick);
257
+ this.on('end', tick);
258
+ });
259
+ }
260
+ }
261
+ } finally {
262
+ this.removeListener('collect', onCollect);
263
+ }
264
+ }
265
+
266
+ toJSON() {
267
+ return Util.flatten(this);
268
+ }
269
+
270
+ /* eslint-disable no-empty-function */
271
+ /**
272
+ * The reason this collector has ended with, or null if it hasn't ended yet
273
+ * @type {?string}
274
+ * @readonly
275
+ * @abstract
276
+ */
277
+ get endReason() {}
278
+
279
+ /**
280
+ * Handles incoming events from the `handleCollect` function. Returns null if the event should not
281
+ * be collected, or returns an object describing the data that should be stored.
282
+ * @see Collector#handleCollect
283
+ * @param {...*} args Any args the event listener emits
284
+ * @returns {?(*|Promise<?*>)} Data to insert into collection, if any
285
+ * @abstract
286
+ */
287
+ collect() {}
288
+
289
+ /**
290
+ * Handles incoming events from the `handleDispose`. Returns null if the event should not
291
+ * be disposed, or returns the key that should be removed.
292
+ * @see Collector#handleDispose
293
+ * @param {...*} args Any args the event listener emits
294
+ * @returns {?*} Key to remove from the collection, if any
295
+ * @abstract
296
+ */
297
+ dispose() {}
298
+ /* eslint-enable no-empty-function */
299
+ }
300
+
301
+ 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;