@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,439 @@
1
+ 'use strict';
2
+
3
+ const EventEmitter = require('node:events');
4
+ const { setImmediate } = require('node:timers');
5
+ const { setTimeout: sleep } = require('node:timers/promises');
6
+ const { Collection } = require('@discordjs/collection');
7
+ const DispatchTable = require('./DispatchTable');
8
+ const WebSocketShard = require('./WebSocketShard');
9
+ const { Error } = require('../../errors');
10
+ const { Events, ShardEvents, Status, WSCodes, WSEvents } = require('../../util/Constants');
11
+ const FastQueue = require('../../util/FastQueue');
12
+ const { hasListener } = require('../../util/ListenerUtil');
13
+
14
+ const BeforeReadyWhitelist = new Set([
15
+ WSEvents.READY,
16
+ WSEvents.RESUMED,
17
+ WSEvents.GUILD_CREATE,
18
+ WSEvents.GUILD_DELETE,
19
+ WSEvents.GUILD_MEMBERS_CHUNK,
20
+ WSEvents.GUILD_MEMBER_ADD,
21
+ WSEvents.GUILD_MEMBER_REMOVE,
22
+ ]);
23
+
24
+ const UNRECOVERABLE_CLOSE_CODES = new Set([4004, 4010, 4011, 4012, 4013, 4014, 4015, 4016]);
25
+ const UNRESUMABLE_CLOSE_CODES = new Set([4007, 4009]);
26
+ const getCloseCodeLabel = code => WSCodes[code] ?? `UNKNOWN_CLOSE_CODE_${code}`;
27
+
28
+ /**
29
+ * The WebSocket manager for this client.
30
+ * <info>This class forwards raw dispatch events,
31
+ * read more about it here {@link https://discord.com/developers/docs/topics/gateway}</info>
32
+ * @extends {EventEmitter}
33
+ */
34
+ class WebSocketManager extends EventEmitter {
35
+ constructor(client) {
36
+ super();
37
+
38
+ this._listenerCountsFast = Object.create(null);
39
+ this.on('newListener', this._onNewListener.bind(this));
40
+ this.on('removeListener', this._onRemoveListener.bind(this));
41
+
42
+ /**
43
+ * The client that instantiated this WebSocketManager
44
+ * @type {Client}
45
+ * @readonly
46
+ * @name WebSocketManager#client
47
+ */
48
+ Object.defineProperty(this, 'client', { value: client });
49
+
50
+ /**
51
+ * The gateway this manager uses
52
+ * @type {?string}
53
+ */
54
+ this.gateway = null;
55
+
56
+ /**
57
+ * The amount of shards this manager handles
58
+ * @private
59
+ * @type {number}
60
+ */
61
+ this.totalShards = this.client.options.shards.length;
62
+
63
+ /**
64
+ * A collection of all shards this manager handles
65
+ * @type {Collection<number, WebSocketShard>}
66
+ */
67
+ this.shards = new Collection();
68
+
69
+ /**
70
+ * An array of shards to be connected or that need to reconnect
71
+ * @type {Set<WebSocketShard>}
72
+ * @private
73
+ * @name WebSocketManager#shardQueue
74
+ */
75
+ Object.defineProperty(this, 'shardQueue', { value: new Set(), writable: true });
76
+
77
+ /**
78
+ * An array of queued events before this WebSocketManager became ready
79
+ * @type {Object[]}
80
+ * @private
81
+ * @name WebSocketManager#packetQueue
82
+ */
83
+ Object.defineProperty(this, 'packetQueue', { value: new FastQueue() });
84
+ this._processingQueue = false;
85
+
86
+ /**
87
+ * The current status of this WebSocketManager
88
+ * @type {Status}
89
+ */
90
+ this.status = Status.IDLE;
91
+
92
+ /**
93
+ * If this manager was destroyed. It will prevent shards from reconnecting
94
+ * @type {boolean}
95
+ * @private
96
+ */
97
+ this.destroyed = false;
98
+
99
+ /**
100
+ * If this manager is currently reconnecting one or multiple shards
101
+ * @type {boolean}
102
+ * @private
103
+ */
104
+ this.reconnecting = false;
105
+ }
106
+
107
+ /**
108
+ * The average ping of all WebSocketShards
109
+ * @type {number}
110
+ * @readonly
111
+ */
112
+ get ping() {
113
+ let total = 0;
114
+ for (const shard of this.shards.values()) {
115
+ total += shard.ping;
116
+ }
117
+ return this.shards.size ? total / this.shards.size : 0;
118
+ }
119
+
120
+ _onNewListener(event) {
121
+ if (event === 'newListener' || event === 'removeListener') return;
122
+ this._listenerCountsFast[event] = (this._listenerCountsFast[event] ?? 0) + 1;
123
+ }
124
+
125
+ _onRemoveListener(event) {
126
+ if (event === 'newListener' || event === 'removeListener') return;
127
+ const current = this._listenerCountsFast[event] ?? 0;
128
+ if (current <= 1) {
129
+ delete this._listenerCountsFast[event];
130
+ } else {
131
+ this._listenerCountsFast[event] = current - 1;
132
+ }
133
+ }
134
+
135
+ hasListenerFast(event) {
136
+ return (this._listenerCountsFast[event] ?? 0) > 0;
137
+ }
138
+
139
+ /**
140
+ * Emits a debug message.
141
+ * @param {string} message The debug message
142
+ * @param {?WebSocketShard} [shard] The shard that emitted this message, if any
143
+ * @private
144
+ */
145
+ debug(message, shard) {
146
+ if (!hasListener(this.client, Events.DEBUG)) return;
147
+ this.client.emit(Events.DEBUG, `[WS => ${shard ? `Shard ${shard.id}` : 'Manager'}] ${message}`);
148
+ }
149
+
150
+ /**
151
+ * Connects this manager to the gateway.
152
+ * @private
153
+ */
154
+ async connect() {
155
+ let gatewayURL = 'wss://gateway.discord.gg';
156
+ await this.client.api.gateway
157
+ .get({ auth: false })
158
+ .then(r => (gatewayURL = r.url))
159
+ .catch(() => {});
160
+
161
+ const total = Infinity;
162
+ const remaining = Infinity;
163
+ const recommendedShards = 1;
164
+
165
+ this.debug(`Fetched Gateway Information
166
+ URL: ${gatewayURL}
167
+ Recommended Shards: ${recommendedShards}`);
168
+
169
+ this.debug(`Session Limit Information
170
+ Total: ${total}
171
+ Remaining: ${remaining}`);
172
+
173
+ this.gateway = `${gatewayURL}/`;
174
+
175
+ let { shards } = this.client.options;
176
+
177
+ if (shards === 'auto') {
178
+ this.debug(`Using the recommended shard count provided by Discord: ${recommendedShards}`);
179
+ this.totalShards = this.client.options.shardCount = recommendedShards;
180
+ shards = this.client.options.shards = Array.from({ length: recommendedShards }, (_, i) => i);
181
+ }
182
+
183
+ this.totalShards = shards.length;
184
+ this.debug(`Spawning shards: ${shards.join(', ')}`);
185
+ this.shardQueue = new Set(shards.map(id => new WebSocketShard(this, id)));
186
+
187
+ return this.createShards();
188
+ }
189
+
190
+ /**
191
+ * Handles the creation of a shard.
192
+ * @returns {Promise<boolean>}
193
+ * @private
194
+ */
195
+ async createShards() {
196
+ // If we don't have any shards to handle, return
197
+ if (!this.shardQueue.size) return false;
198
+
199
+ const [shard] = this.shardQueue;
200
+
201
+ this.shardQueue.delete(shard);
202
+
203
+ if (!shard.eventsAttached) {
204
+ shard.on(ShardEvents.ALL_READY, unavailableGuilds => {
205
+ /**
206
+ * Emitted when a shard turns ready.
207
+ * @event Client#shardReady
208
+ * @param {number} id The shard id that turned ready
209
+ * @param {?Set<Snowflake>} unavailableGuilds Set of unavailable guild ids, if any
210
+ */
211
+ this.client.emit(Events.SHARD_READY, shard.id, unavailableGuilds);
212
+
213
+ if (!this.shardQueue.size) this.reconnecting = false;
214
+ this.checkShardsReady();
215
+ });
216
+
217
+ shard.on(ShardEvents.CLOSE, event => {
218
+ if (event.code === 1_000 ? this.destroyed : UNRECOVERABLE_CLOSE_CODES.has(event.code)) {
219
+ /**
220
+ * Emitted when a shard's WebSocket disconnects and will no longer reconnect.
221
+ * @event Client#shardDisconnect
222
+ * @param {CloseEvent} event The WebSocket close event
223
+ * @param {number} id The shard id that disconnected
224
+ */
225
+ this.client.emit(Events.SHARD_DISCONNECT, event, shard.id);
226
+ this.debug(getCloseCodeLabel(event.code), shard);
227
+ return;
228
+ }
229
+
230
+ if (UNRESUMABLE_CLOSE_CODES.has(event.code)) {
231
+ // These event codes cannot be resumed
232
+ shard.sessionId = null;
233
+ }
234
+
235
+ /**
236
+ * Emitted when a shard is attempting to reconnect or re-identify.
237
+ * @event Client#shardReconnecting
238
+ * @param {number} id The shard id that is attempting to reconnect
239
+ */
240
+ this.client.emit(Events.SHARD_RECONNECTING, shard.id);
241
+
242
+ this.shardQueue.add(shard);
243
+
244
+ if (shard.sessionId) this.debug(`Session id is present, attempting an immediate reconnect...`, shard);
245
+ this.reconnect();
246
+ });
247
+
248
+ shard.on(ShardEvents.INVALID_SESSION, () => {
249
+ this.client.emit(Events.SHARD_RECONNECTING, shard.id);
250
+ });
251
+
252
+ shard.on(ShardEvents.DESTROYED, () => {
253
+ this.debug('Shard was destroyed but no WebSocket connection was present! Reconnecting...', shard);
254
+
255
+ this.client.emit(Events.SHARD_RECONNECTING, shard.id);
256
+
257
+ this.shardQueue.add(shard);
258
+ this.reconnect();
259
+ });
260
+
261
+ shard.eventsAttached = true;
262
+ }
263
+
264
+ this.shards.set(shard.id, shard);
265
+
266
+ try {
267
+ await shard.connect();
268
+ } catch (error) {
269
+ if (error?.code && UNRECOVERABLE_CLOSE_CODES.has(error.code)) {
270
+ throw new Error(getCloseCodeLabel(error.code));
271
+ // Undefined if session is invalid, error event for regular closes
272
+ } else if (!error || error.code) {
273
+ this.debug('Failed to connect to the gateway, requeueing...', shard);
274
+ this.shardQueue.add(shard);
275
+ } else {
276
+ throw error;
277
+ }
278
+ }
279
+ // If we have more shards, add a 5s delay
280
+ if (this.shardQueue.size) {
281
+ this.debug(`Shard Queue Size: ${this.shardQueue.size}; continuing in 5 seconds...`);
282
+ await sleep(5_000);
283
+ return this.createShards();
284
+ }
285
+
286
+ return true;
287
+ }
288
+
289
+ /**
290
+ * Handles reconnects for this manager.
291
+ * @private
292
+ * @returns {Promise<boolean>}
293
+ */
294
+ async reconnect() {
295
+ if (this.reconnecting || this.status !== Status.READY) return false;
296
+ this.reconnecting = true;
297
+ try {
298
+ await this.createShards();
299
+ } catch (error) {
300
+ this.debug(`Couldn't reconnect or fetch information about the gateway. ${error}`);
301
+ if (error.httpStatus !== 401) {
302
+ this.debug(`Possible network error occurred. Retrying in 5s...`);
303
+ await sleep(5_000);
304
+ this.reconnecting = false;
305
+ return this.reconnect();
306
+ }
307
+ // If we get an error at this point, it means we cannot reconnect anymore
308
+ if (hasListener(this.client, Events.INVALIDATED)) {
309
+ /**
310
+ * Emitted when the client's session becomes invalidated.
311
+ * You are expected to handle closing the process gracefully and preventing a boot loop
312
+ * if you are listening to this event.
313
+ * @event Client#invalidated
314
+ */
315
+ this.client.emit(Events.INVALIDATED);
316
+ // Destroy just the shards. This means you have to handle the cleanup yourself
317
+ this.destroy();
318
+ } else {
319
+ this.client.destroy();
320
+ }
321
+ } finally {
322
+ this.reconnecting = false;
323
+ }
324
+ return true;
325
+ }
326
+
327
+ /**
328
+ * Broadcasts a packet to every shard this manager handles.
329
+ * @param {Object} packet The packet to send
330
+ * @private
331
+ */
332
+ broadcast(packet) {
333
+ for (const shard of this.shards.values()) shard.send(packet);
334
+ }
335
+
336
+ /**
337
+ * Destroys this manager and all its shards.
338
+ * @private
339
+ */
340
+ destroy() {
341
+ if (this.destroyed) return;
342
+ this.debug(`Manager was destroyed. Called by:\n${new Error('MANAGER_DESTROYED').stack}`);
343
+ this.destroyed = true;
344
+ this.shardQueue.clear();
345
+ for (const shard of this.shards.values()) shard.destroy({ closeCode: 1_000, reset: true, emit: false, log: false });
346
+ }
347
+
348
+ _dispatchPacket(packet, shard) {
349
+ if (!packet) return;
350
+
351
+ const handler = DispatchTable[packet.t];
352
+ if (handler) {
353
+ handler(this.client, packet, shard);
354
+ } else {
355
+ /**
356
+ * Emitted whenever a packet isn't handled.
357
+ * @event Client#unhandledPacket
358
+ * @param {Object} packet The packet (t: EVENT_NAME, d: any)
359
+ * @param {Number} shard The shard that received the packet (Shard 0)
360
+ */
361
+ this.client.emit(Events.UNHANDLED_PACKET, packet, shard);
362
+ }
363
+ }
364
+
365
+ _schedulePacketQueue() {
366
+ if (this._processingQueue || this.status !== Status.READY || !this.packetQueue.length) return;
367
+ this._processingQueue = true;
368
+ setImmediate(() => {
369
+ while (this.packetQueue.length && this.status === Status.READY) {
370
+ const queued = this.packetQueue.shift();
371
+ if (!queued) break;
372
+ const { packet, shard } = queued;
373
+ this._dispatchPacket(packet, shard);
374
+ }
375
+ this._processingQueue = false;
376
+ if (this.packetQueue.length && this.status === Status.READY) {
377
+ this._schedulePacketQueue();
378
+ }
379
+ }).unref();
380
+ }
381
+
382
+ /**
383
+ * Processes a packet and queues it if this WebSocketManager is not ready.
384
+ * @param {Object} [packet] The packet to be handled
385
+ * @param {WebSocketShard} [shard] The shard that will handle this packet
386
+ * @returns {boolean}
387
+ * @private
388
+ */
389
+ handlePacket(packet, shard) {
390
+ if (packet && this.status !== Status.READY && !BeforeReadyWhitelist.has(packet.t)) {
391
+ this.packetQueue.push({ packet, shard });
392
+ return false;
393
+ }
394
+
395
+ if (packet) {
396
+ this._dispatchPacket(packet, shard);
397
+ }
398
+
399
+ if (this.status === Status.READY && this.packetQueue.length) {
400
+ this._schedulePacketQueue();
401
+ }
402
+
403
+ return true;
404
+ }
405
+
406
+ /**
407
+ * Checks whether the client is ready to be marked as ready.
408
+ * @private
409
+ */
410
+ checkShardsReady() {
411
+ if (this.status === Status.READY) return;
412
+ if (this.shards.size !== this.totalShards || this.shards.some(s => s.status !== Status.READY)) {
413
+ return;
414
+ }
415
+
416
+ this.triggerClientReady();
417
+ }
418
+
419
+ /**
420
+ * Causes the client to be marked as ready and emits the ready event.
421
+ * @private
422
+ */
423
+ triggerClientReady() {
424
+ this.status = Status.READY;
425
+
426
+ this.client.readyAt = new Date();
427
+
428
+ /**
429
+ * Emitted when the client becomes ready to start working.
430
+ * @event Client#ready
431
+ * @param {Client} client The client
432
+ */
433
+ this.client.emit(Events.CLIENT_READY, this.client);
434
+
435
+ this.handlePacket();
436
+ }
437
+ }
438
+
439
+ module.exports = WebSocketManager;