rockcord 4.0.0-dev.4

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 +48 -0
  3. package/package.json +107 -0
  4. package/src/WebSocket.js +39 -0
  5. package/src/client/BaseClient.js +86 -0
  6. package/src/client/Client.js +946 -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 +1295 -0
  71. package/src/client/voice/dispatcher/AnnexBDispatcher.js +136 -0
  72. package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
  73. package/src/client/voice/dispatcher/BaseDispatcher.js +473 -0
  74. package/src/client/voice/dispatcher/VPxDispatcher.js +58 -0
  75. package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
  76. package/src/client/voice/networking/DAVE.js +184 -0
  77. package/src/client/voice/networking/VoiceUDPClient.js +190 -0
  78. package/src/client/voice/networking/VoiceWebSocket.js +366 -0
  79. package/src/client/voice/player/MediaPlayer.js +321 -0
  80. package/src/client/voice/player/processing/AnnexBNalSplitter.js +267 -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 +329 -0
  84. package/src/client/voice/receiver/Receiver.js +115 -0
  85. package/src/client/voice/receiver/Recorder.js +197 -0
  86. package/src/client/voice/util/Function.js +122 -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 +68 -0
  91. package/src/client/voice/util/VideoFrames.js +183 -0
  92. package/src/client/voice/util/VolumeInterface.js +105 -0
  93. package/src/client/websocket/WebSocketManager.js +405 -0
  94. package/src/client/websocket/WebSocketShard.js +908 -0
  95. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  96. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  97. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  98. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  99. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  100. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  101. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  102. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  103. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  104. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  105. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  106. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  107. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  108. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  109. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -0
  110. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  111. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  112. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  113. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  114. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  115. package/src/client/websocket/handlers/GUILD_CREATE.js +52 -0
  116. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  117. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  118. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  119. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  120. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  121. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  122. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  123. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  124. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  125. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  126. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  127. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  128. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  129. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  130. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  131. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  132. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  133. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
  134. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  135. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  136. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  137. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  138. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  139. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -0
  140. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -0
  141. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  142. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  143. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  144. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  145. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  146. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  147. package/src/client/websocket/handlers/READY.js +121 -0
  148. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
  149. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
  150. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -0
  151. package/src/client/websocket/handlers/RESUMED.js +14 -0
  152. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  153. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  154. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  155. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  156. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  157. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  158. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  159. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  160. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  161. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  162. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -0
  163. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  164. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
  165. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
  166. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  167. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
  168. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
  169. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  170. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  171. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  172. package/src/client/websocket/handlers/index.js +84 -0
  173. package/src/errors/DJSError.js +61 -0
  174. package/src/errors/Messages.js +219 -0
  175. package/src/errors/index.js +4 -0
  176. package/src/index.js +218 -0
  177. package/src/managers/ApplicationCommandManager.js +264 -0
  178. package/src/managers/ApplicationCommandPermissionsManager.js +417 -0
  179. package/src/managers/AutoModerationRuleManager.js +296 -0
  180. package/src/managers/BaseGuildEmojiManager.js +80 -0
  181. package/src/managers/BaseManager.js +19 -0
  182. package/src/managers/BillingManager.js +66 -0
  183. package/src/managers/CachedManager.js +71 -0
  184. package/src/managers/ChannelManager.js +148 -0
  185. package/src/managers/ClientUserSettingManager.js +372 -0
  186. package/src/managers/DataManager.js +61 -0
  187. package/src/managers/GuildBanManager.js +250 -0
  188. package/src/managers/GuildChannelManager.js +488 -0
  189. package/src/managers/GuildEmojiManager.js +171 -0
  190. package/src/managers/GuildEmojiRoleManager.js +118 -0
  191. package/src/managers/GuildForumThreadManager.js +94 -0
  192. package/src/managers/GuildInviteManager.js +213 -0
  193. package/src/managers/GuildManager.js +338 -0
  194. package/src/managers/GuildMemberManager.js +599 -0
  195. package/src/managers/GuildMemberRoleManager.js +195 -0
  196. package/src/managers/GuildScheduledEventManager.js +314 -0
  197. package/src/managers/GuildSettingManager.js +155 -0
  198. package/src/managers/GuildStickerManager.js +179 -0
  199. package/src/managers/GuildTextThreadManager.js +98 -0
  200. package/src/managers/InteractionManager.js +39 -0
  201. package/src/managers/MessageManager.js +426 -0
  202. package/src/managers/PermissionOverwriteManager.js +164 -0
  203. package/src/managers/PresenceManager.js +71 -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 +149 -0
  216. package/src/rest/APIRouter.js +53 -0
  217. package/src/rest/DiscordAPIError.js +121 -0
  218. package/src/rest/HTTPError.js +64 -0
  219. package/src/rest/RESTManager.js +97 -0
  220. package/src/rest/RateLimitError.js +55 -0
  221. package/src/rest/RequestHandler.js +476 -0
  222. package/src/sharding/Shard.js +476 -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 +449 -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 +1638 -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 +639 -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 +1257 -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 +352 -0
  286. package/src/structures/MessageReaction.js +184 -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 +1105 -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 +624 -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 +825 -0
  333. package/src/structures/interfaces/Collector.js +301 -0
  334. package/src/structures/interfaces/InteractionResponses.js +313 -0
  335. package/src/structures/interfaces/TextBasedChannel.js +743 -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 +182 -0
  341. package/src/util/ChannelFlags.js +45 -0
  342. package/src/util/Constants.js +1927 -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 +134 -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/Redact.js +26 -0
  355. package/src/util/RemoteAuth.js +449 -0
  356. package/src/util/RoleFlags.js +37 -0
  357. package/src/util/SnowflakeUtil.js +92 -0
  358. package/src/util/Speaking.js +33 -0
  359. package/src/util/Sweepers.js +466 -0
  360. package/src/util/SystemChannelFlags.js +55 -0
  361. package/src/util/ThreadMemberFlags.js +30 -0
  362. package/src/util/UserFlags.js +104 -0
  363. package/src/util/Util.js +1079 -0
  364. package/typings/enums.d.ts +437 -0
  365. package/typings/index.d.ts +8197 -0
  366. package/typings/rawDataTypes.d.ts +403 -0
@@ -0,0 +1,476 @@
1
+ 'use strict';
2
+
3
+ const EventEmitter = require('node:events');
4
+ const path = require('node:path');
5
+ const process = require('node:process');
6
+ const { setTimeout } = require('node:timers');
7
+ const { setTimeout: sleep } = require('node:timers/promises');
8
+ const { Error } = require('../errors');
9
+ const Util = require('../util/Util');
10
+ let childProcess = null;
11
+ let Worker = null;
12
+
13
+ /**
14
+ * A self-contained shard created by the {@link ShardingManager}. Each one has a {@link ChildProcess} that contains
15
+ * an instance of the bot and its {@link Client}. When its child process/worker exits for any reason, the shard will
16
+ * spawn a new one to replace it as necessary.
17
+ * @extends {EventEmitter}
18
+ * @deprecated
19
+ */
20
+ class Shard extends EventEmitter {
21
+ constructor(manager, id) {
22
+ super();
23
+
24
+ if (manager.mode === 'process') childProcess = require('node:child_process');
25
+ else if (manager.mode === 'worker') Worker = require('node:worker_threads').Worker;
26
+
27
+ /**
28
+ * Manager that created the shard
29
+ * @type {ShardingManager}
30
+ */
31
+ this.manager = manager;
32
+
33
+ /**
34
+ * The shard's id in the manager
35
+ * @type {number}
36
+ */
37
+ this.id = id;
38
+
39
+ /**
40
+ * Arguments for the shard's process (only when {@link ShardingManager#mode} is `process`)
41
+ * @type {string[]}
42
+ */
43
+ this.args = manager.shardArgs ?? [];
44
+
45
+ /**
46
+ * Arguments for the shard's process executable (only when {@link ShardingManager#mode} is `process`)
47
+ * @type {string[]}
48
+ */
49
+ this.execArgv = manager.execArgv;
50
+
51
+ /**
52
+ * Environment variables for the shard's process, or workerData for the shard's worker
53
+ * @type {Object}
54
+ */
55
+ this.env = Object.assign({}, process.env, {
56
+ SHARDING_MANAGER: true,
57
+ SHARDS: this.id,
58
+ SHARD_COUNT: this.manager.totalShards,
59
+ DISCORD_TOKEN: this.manager.token,
60
+ });
61
+
62
+ /**
63
+ * Whether the shard's {@link Client} is ready
64
+ * @type {boolean}
65
+ */
66
+ this.ready = false;
67
+
68
+ /**
69
+ * Process of the shard (if {@link ShardingManager#mode} is `process`)
70
+ * @type {?ChildProcess}
71
+ */
72
+ this.process = null;
73
+
74
+ /**
75
+ * Worker of the shard (if {@link ShardingManager#mode} is `worker`)
76
+ * @type {?Worker}
77
+ */
78
+ this.worker = null;
79
+
80
+ /**
81
+ * Ongoing promises for calls to {@link Shard#eval}, mapped by the `script` they were called with
82
+ * @type {Map<string, Promise>}
83
+ * @private
84
+ */
85
+ this._evals = new Map();
86
+
87
+ /**
88
+ * Ongoing promises for calls to {@link Shard#fetchClientValue}, mapped by the `prop` they were called with
89
+ * @type {Map<string, Promise>}
90
+ * @private
91
+ */
92
+ this._fetches = new Map();
93
+
94
+ /**
95
+ * Listener function for the {@link ChildProcess}' `exit` event
96
+ * @type {Function}
97
+ * @private
98
+ */
99
+ this._exitListener = null;
100
+ }
101
+
102
+ /**
103
+ * Forks a child process or creates a worker thread for the shard.
104
+ * <warn>You should not need to call this manually.</warn>
105
+ * @param {number} [timeout=30000] The amount in milliseconds to wait until the {@link Client} has become ready
106
+ * before resolving (`-1` or `Infinity` for no wait)
107
+ * @returns {Promise<ChildProcess>}
108
+ */
109
+ spawn(timeout = 30_000) {
110
+ if (this.process) throw new Error('SHARDING_PROCESS_EXISTS', this.id);
111
+ if (this.worker) throw new Error('SHARDING_WORKER_EXISTS', this.id);
112
+
113
+ this._exitListener = this._handleExit.bind(this, undefined, timeout);
114
+
115
+ if (this.manager.mode === 'process') {
116
+ this.process = childProcess
117
+ .fork(path.resolve(this.manager.file), this.args, {
118
+ env: this.env,
119
+ execArgv: this.execArgv,
120
+ })
121
+ .on('message', this._handleMessage.bind(this))
122
+ .on('exit', this._exitListener);
123
+ } else if (this.manager.mode === 'worker') {
124
+ this.worker = new Worker(path.resolve(this.manager.file), { workerData: this.env })
125
+ .on('message', this._handleMessage.bind(this))
126
+ .on('exit', this._exitListener);
127
+ }
128
+
129
+ this._evals.clear();
130
+ this._fetches.clear();
131
+
132
+ const child = this.process ?? this.worker;
133
+
134
+ /**
135
+ * Emitted upon the creation of the shard's child process/worker.
136
+ * @event Shard#spawn
137
+ * @param {ChildProcess|Worker} process Child process/worker that was created
138
+ */
139
+ this.emit('spawn', child);
140
+
141
+ if (timeout === -1 || timeout === Infinity) return Promise.resolve(child);
142
+ return new Promise((resolve, reject) => {
143
+ const cleanup = () => {
144
+ clearTimeout(spawnTimeoutTimer);
145
+ this.off('ready', onReady);
146
+ this.off('disconnect', onDisconnect);
147
+ this.off('death', onDeath);
148
+ };
149
+
150
+ const onReady = () => {
151
+ cleanup();
152
+ resolve(child);
153
+ };
154
+
155
+ const onDisconnect = () => {
156
+ cleanup();
157
+ reject(new Error('SHARDING_READY_DISCONNECTED', this.id));
158
+ };
159
+
160
+ const onDeath = () => {
161
+ cleanup();
162
+ reject(new Error('SHARDING_READY_DIED', this.id));
163
+ };
164
+
165
+ const onTimeout = () => {
166
+ cleanup();
167
+ reject(new Error('SHARDING_READY_TIMEOUT', this.id));
168
+ };
169
+
170
+ const spawnTimeoutTimer = setTimeout(onTimeout, timeout);
171
+ this.once('ready', onReady);
172
+ this.once('disconnect', onDisconnect);
173
+ this.once('death', onDeath);
174
+ });
175
+ }
176
+
177
+ /**
178
+ * Immediately kills the shard's process/worker and does not restart it.
179
+ */
180
+ kill() {
181
+ if (this.process) {
182
+ this.process.removeListener('exit', this._exitListener);
183
+ this.process.kill();
184
+ } else {
185
+ this.worker.removeListener('exit', this._exitListener);
186
+ this.worker.terminate();
187
+ }
188
+
189
+ this._handleExit(false);
190
+ }
191
+
192
+ /**
193
+ * Options used to respawn a shard.
194
+ * @typedef {Object} ShardRespawnOptions
195
+ * @property {number} [delay=500] How long to wait between killing the process/worker and
196
+ * restarting it (in milliseconds)
197
+ * @property {number} [timeout=30000] The amount in milliseconds to wait until the {@link Client}
198
+ * has become ready before resolving (`-1` or `Infinity` for no wait)
199
+ */
200
+
201
+ /**
202
+ * Kills and restarts the shard's process/worker.
203
+ * @param {ShardRespawnOptions} [options] Options for respawning the shard
204
+ * @returns {Promise<ChildProcess>}
205
+ */
206
+ async respawn({ delay = 500, timeout = 30_000 } = {}) {
207
+ this.kill();
208
+ if (delay > 0) await sleep(delay);
209
+ return this.spawn(timeout);
210
+ }
211
+
212
+ /**
213
+ * Sends a message to the shard's process/worker.
214
+ * @param {*} message Message to send to the shard
215
+ * @returns {Promise<Shard>}
216
+ */
217
+ send(message) {
218
+ return new Promise((resolve, reject) => {
219
+ if (this.process) {
220
+ this.process.send(message, err => {
221
+ if (err) reject(err);
222
+ else resolve(this);
223
+ });
224
+ } else {
225
+ this.worker.postMessage(message);
226
+ resolve(this);
227
+ }
228
+ });
229
+ }
230
+
231
+ /**
232
+ * Fetches a client property value of the shard.
233
+ * @param {string} prop Name of the client property to get, using periods for nesting
234
+ * @returns {Promise<*>}
235
+ * @example
236
+ * shard.fetchClientValue('guilds.cache.size')
237
+ * .then(count => console.log(`${count} guilds in shard ${shard.id}`))
238
+ * .catch(console.error);
239
+ */
240
+ async fetchClientValue(prop) {
241
+ // Shard is dead (maybe respawning), don't cache anything and error immediately
242
+ if (!this.process && !this.worker) throw new Error('SHARDING_NO_CHILD_EXISTS', this.id);
243
+
244
+ // Cached promise from previous call
245
+ if (this._fetches.has(prop)) return this._fetches.get(prop);
246
+
247
+ const promise = new Promise((resolve, reject) => {
248
+ const child = this.process ?? this.worker;
249
+
250
+ let settled = false;
251
+ const cleanup = () => {
252
+ child.removeListener('message', listener);
253
+ child.removeListener('exit', onExit);
254
+ this.removeListener('death', onExit);
255
+ this.decrementMaxListeners(child);
256
+ this._fetches.delete(prop);
257
+ };
258
+ const onExit = () => {
259
+ if (settled) return;
260
+ settled = true;
261
+ cleanup();
262
+ reject(new Error('SHARDING_NO_CHILD_EXISTS', this.id));
263
+ };
264
+ const listener = message => {
265
+ if (message?._fetchProp !== prop) return;
266
+ if (settled) return;
267
+ settled = true;
268
+ cleanup();
269
+ if (!message._error) resolve(message._result);
270
+ else reject(Util.makeError(message._error));
271
+ };
272
+
273
+ this.incrementMaxListeners(child);
274
+ child.on('message', listener);
275
+ child.once('exit', onExit);
276
+ this.once('death', onExit);
277
+
278
+ this.send({ _fetchProp: prop }).catch(err => {
279
+ if (settled) return;
280
+ settled = true;
281
+ cleanup();
282
+ reject(err);
283
+ });
284
+ });
285
+
286
+ this._fetches.set(prop, promise);
287
+ return promise;
288
+ }
289
+
290
+ /**
291
+ * Evaluates a script or function on the shard, in the context of the {@link Client}.
292
+ * @param {string|Function} script JavaScript to run on the shard
293
+ * @param {*} [context] The context for the eval
294
+ * @returns {Promise<*>} Result of the script execution
295
+ */
296
+ async eval(script, context) {
297
+ // Stringify the script if it's a Function
298
+ const _eval = typeof script === 'function' ? `(${script})(this, ${JSON.stringify(context)})` : script;
299
+
300
+ // Shard is dead (maybe respawning), don't cache anything and error immediately
301
+ if (!this.process && !this.worker) throw new Error('SHARDING_NO_CHILD_EXISTS', this.id);
302
+
303
+ // Cached promise from previous call
304
+ if (this._evals.has(_eval)) return this._evals.get(_eval);
305
+
306
+ const promise = new Promise((resolve, reject) => {
307
+ const child = this.process ?? this.worker;
308
+
309
+ let settled = false;
310
+ const cleanup = () => {
311
+ child.removeListener('message', listener);
312
+ child.removeListener('exit', onExit);
313
+ this.removeListener('death', onExit);
314
+ this.decrementMaxListeners(child);
315
+ this._evals.delete(_eval);
316
+ };
317
+ const onExit = () => {
318
+ if (settled) return;
319
+ settled = true;
320
+ cleanup();
321
+ reject(new Error('SHARDING_NO_CHILD_EXISTS', this.id));
322
+ };
323
+ const listener = message => {
324
+ if (message?._eval !== _eval) return;
325
+ if (settled) return;
326
+ settled = true;
327
+ cleanup();
328
+ if (!message._error) resolve(message._result);
329
+ else reject(Util.makeError(message._error));
330
+ };
331
+
332
+ this.incrementMaxListeners(child);
333
+ child.on('message', listener);
334
+ child.once('exit', onExit);
335
+ this.once('death', onExit);
336
+
337
+ this.send({ _eval }).catch(err => {
338
+ if (settled) return;
339
+ settled = true;
340
+ cleanup();
341
+ reject(err);
342
+ });
343
+ });
344
+
345
+ this._evals.set(_eval, promise);
346
+ return promise;
347
+ }
348
+
349
+ /**
350
+ * Handles a message received from the child process/worker.
351
+ * @param {*} message Message received
352
+ * @private
353
+ */
354
+ _handleMessage(message) {
355
+ if (message) {
356
+ // Shard is ready
357
+ if (message._ready) {
358
+ this.ready = true;
359
+ /**
360
+ * Emitted upon the shard's {@link Client#event:shardReady} event.
361
+ * @event Shard#ready
362
+ */
363
+ this.emit('ready');
364
+ return;
365
+ }
366
+
367
+ // Shard has disconnected
368
+ if (message._disconnect) {
369
+ this.ready = false;
370
+ /**
371
+ * Emitted upon the shard's {@link Client#event:shardDisconnect} event.
372
+ * @event Shard#disconnect
373
+ */
374
+ this.emit('disconnect');
375
+ return;
376
+ }
377
+
378
+ // Shard is attempting to reconnect
379
+ if (message._reconnecting) {
380
+ this.ready = false;
381
+ /**
382
+ * Emitted upon the shard's {@link Client#event:shardReconnecting} event.
383
+ * @event Shard#reconnecting
384
+ */
385
+ this.emit('reconnecting');
386
+ return;
387
+ }
388
+
389
+ // Shard is requesting a property fetch
390
+ if (message._sFetchProp) {
391
+ const resp = { _sFetchProp: message._sFetchProp, _sFetchPropShard: message._sFetchPropShard };
392
+ this.manager.fetchClientValues(message._sFetchProp, message._sFetchPropShard).then(
393
+ results => this.send({ ...resp, _result: results }),
394
+ err => this.send({ ...resp, _error: Util.makePlainError(err) }),
395
+ );
396
+ return;
397
+ }
398
+
399
+ // Shard is requesting an eval broadcast
400
+ if (message._sEval) {
401
+ const resp = { _sEval: message._sEval, _sEvalShard: message._sEvalShard };
402
+ this.manager._performOnShards('eval', [message._sEval], message._sEvalShard).then(
403
+ results => this.send({ ...resp, _result: results }),
404
+ err => this.send({ ...resp, _error: Util.makePlainError(err) }),
405
+ );
406
+ return;
407
+ }
408
+
409
+ // Shard is requesting a respawn of all shards
410
+ if (message._sRespawnAll) {
411
+ const { shardDelay, respawnDelay, timeout } = message._sRespawnAll;
412
+ this.manager.respawnAll({ shardDelay, respawnDelay, timeout }).catch(() => {
413
+ // Do nothing
414
+ });
415
+ return;
416
+ }
417
+ }
418
+
419
+ /**
420
+ * Emitted upon receiving a message from the child process/worker.
421
+ * @event Shard#message
422
+ * @param {*} message Message that was received
423
+ */
424
+ this.emit('message', message);
425
+ }
426
+
427
+ /**
428
+ * Handles the shard's process/worker exiting.
429
+ * @param {boolean} [respawn=this.manager.respawn] Whether to spawn the shard again
430
+ * @param {number} [timeout] The amount in milliseconds to wait until the {@link Client}
431
+ * has become ready (`-1` or `Infinity` for no wait)
432
+ * @private
433
+ */
434
+ _handleExit(respawn = this.manager.respawn, timeout) {
435
+ /**
436
+ * Emitted upon the shard's child process/worker exiting.
437
+ * @event Shard#death
438
+ * @param {ChildProcess|Worker} process Child process/worker that exited
439
+ */
440
+ this.emit('death', this.process ?? this.worker);
441
+
442
+ this.ready = false;
443
+ this.process = null;
444
+ this.worker = null;
445
+ this._evals.clear();
446
+ this._fetches.clear();
447
+
448
+ if (respawn) this.spawn(timeout).catch(err => this.emit('error', err));
449
+ }
450
+
451
+ /**
452
+ * Increments max listeners by one for a given emitter, if they are not zero.
453
+ * @param {EventEmitter|process} emitter The emitter that emits the events.
454
+ * @private
455
+ */
456
+ incrementMaxListeners(emitter) {
457
+ const maxListeners = emitter.getMaxListeners();
458
+ if (maxListeners !== 0) {
459
+ emitter.setMaxListeners(maxListeners + 1);
460
+ }
461
+ }
462
+
463
+ /**
464
+ * Decrements max listeners by one for a given emitter, if they are not zero.
465
+ * @param {EventEmitter|process} emitter The emitter that emits the events.
466
+ * @private
467
+ */
468
+ decrementMaxListeners(emitter) {
469
+ const maxListeners = emitter.getMaxListeners();
470
+ if (maxListeners !== 0) {
471
+ emitter.setMaxListeners(maxListeners - 1);
472
+ }
473
+ }
474
+ }
475
+
476
+ module.exports = Shard;