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,149 @@
1
+ 'use strict';
2
+
3
+ const Buffer = require('node:buffer').Buffer;
4
+ const { setTimeout } = require('node:timers');
5
+ const { FormData, Response } = require('undici');
6
+
7
+ class APIRequest {
8
+ constructor(rest, method, path, options) {
9
+ this.rest = rest;
10
+ this.client = rest.client;
11
+ this.method = method;
12
+ this.route = options.route;
13
+ this.options = options;
14
+ this.retries = 0;
15
+
16
+ this.fullUserAgent = this.client.options.http.headers['User-Agent'];
17
+
18
+ this.client.options.ws.properties.browser_user_agent = this.fullUserAgent;
19
+
20
+ let queryString = '';
21
+ if (options.query) {
22
+ const query = Object.entries(options.query)
23
+ .filter(([, value]) => value !== null && typeof value !== 'undefined')
24
+ .flatMap(([key, value]) => (Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]));
25
+ queryString = new URLSearchParams(query).toString();
26
+ }
27
+ this.path = `${path}${queryString && `?${queryString}`}`;
28
+ }
29
+
30
+ async make(captchaKey, captchaRqToken) {
31
+ const API =
32
+ this.options.versioned === false
33
+ ? this.client.options.http.api
34
+ : `${this.client.options.http.api}/v${this.client.options.http.version}`;
35
+ const url = API + this.path;
36
+
37
+ let headers = {
38
+ accept: '*/*',
39
+ 'accept-language': 'en-US',
40
+ priority: 'u=1, i',
41
+ referer: 'https://discord.com/channels/@me',
42
+ 'sec-ch-ua': '"Not:A-Brand";v="24", "Chromium";v="134"',
43
+ 'sec-ch-ua-mobile': '?0',
44
+ 'sec-ch-ua-platform': '"Windows"',
45
+ 'sec-fetch-dest': 'empty',
46
+ 'sec-fetch-mode': 'cors',
47
+ 'sec-fetch-site': 'same-origin',
48
+ 'x-discord-locale': 'en-US',
49
+ 'x-discord-timezone': Intl.DateTimeFormat().resolvedOptions().timeZone,
50
+ 'x-super-properties': `${Buffer.from(JSON.stringify(this.client.options.ws.properties), 'ascii').toString(
51
+ 'base64',
52
+ )}`,
53
+ origin: 'https://discord.com',
54
+ 'x-debug-options': 'bugReporterEnabled',
55
+ ...this.client.options.http.headers,
56
+ 'User-Agent': this.fullUserAgent,
57
+ };
58
+
59
+ if (this.options.auth !== false) headers.Authorization = this.rest.getAuth();
60
+ if (this.options.reason) headers['X-Audit-Log-Reason'] = encodeURIComponent(this.options.reason);
61
+ if (this.options.headers) headers = Object.assign(headers, this.options.headers);
62
+
63
+ // Delete all headers if undefined
64
+ for (const [key, value] of Object.entries(headers)) {
65
+ if (value === undefined) delete headers[key];
66
+ }
67
+ if (this.options.webhook === true) {
68
+ headers = {
69
+ 'User-Agent': this.client.options.http.headers['User-Agent'],
70
+ };
71
+ }
72
+
73
+ // Some options
74
+ if (this.options.DiscordContext) {
75
+ headers['X-Context-Properties'] = Buffer.from(JSON.stringify(this.options.DiscordContext), 'utf8').toString(
76
+ 'base64',
77
+ );
78
+ }
79
+
80
+ if (this.options.mfaToken) {
81
+ headers['X-Discord-Mfa-Authorization'] = this.options.mfaToken;
82
+ }
83
+
84
+ // Captcha
85
+ if (captchaKey && typeof captchaKey == 'string') headers['X-Captcha-Key'] = captchaKey;
86
+ if (captchaRqToken && typeof captchaRqToken == 'string') headers['X-Captcha-Rqtoken'] = captchaRqToken;
87
+
88
+ let body;
89
+ if (this.options.files?.length) {
90
+ body = new FormData();
91
+ for (const [index, file] of this.options.files.entries()) {
92
+ // Why undici#FormData doesn't support file stream?
93
+ // Hacky way to support file stream
94
+ if (file?.file) {
95
+ body.set(file.key ?? `files[${index}]`, {
96
+ [Symbol.toStringTag]: 'File',
97
+ name: file.name,
98
+ stream: () => file.file,
99
+ });
100
+ }
101
+ }
102
+ if (typeof this.options.data !== 'undefined') {
103
+ if (this.options.dontUsePayloadJSON) {
104
+ for (const [key, value] of Object.entries(this.options.data)) body.append(key, value);
105
+ } else {
106
+ body.append('payload_json', JSON.stringify(this.options.data));
107
+ }
108
+ }
109
+ // eslint-disable-next-line eqeqeq
110
+ } else if (this.options.data != null) {
111
+ if (this.options.usePayloadJSON) {
112
+ body = new FormData();
113
+ body.append('payload_json', JSON.stringify(this.options.data));
114
+ } else {
115
+ body = JSON.stringify(this.options.data);
116
+ headers['Content-Type'] = 'application/json';
117
+ }
118
+ }
119
+
120
+ const controller = new AbortController();
121
+ this.rest.controllers.add(controller);
122
+ const timeout = setTimeout(() => controller.abort(), this.client.options.restRequestTimeout).unref();
123
+ try {
124
+ const response = await this.rest.fetch(url, {
125
+ method: this.method.toUpperCase(), // Undici doesn't normalize "patch" into "PATCH" (which surprisingly follows the spec).
126
+ headers,
127
+ body,
128
+ signal: controller.signal,
129
+ redirect: 'follow',
130
+ dispatcher: this.rest.getDispatcher(url),
131
+ credentials: 'include',
132
+ });
133
+ // Keep the deadline active until the body is consumed, including errors and retries.
134
+ const bytes = await response.arrayBuffer();
135
+ const buffered = new Response([101, 204, 205, 304].includes(response.status) ? null : bytes, {
136
+ status: response.status,
137
+ statusText: response.statusText,
138
+ headers: response.headers,
139
+ });
140
+ Object.defineProperty(buffered, 'url', { value: response.url });
141
+ return buffered;
142
+ } finally {
143
+ clearTimeout(timeout);
144
+ this.rest.controllers.delete(controller);
145
+ }
146
+ }
147
+ }
148
+
149
+ module.exports = APIRequest;
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ const noop = () => {}; // eslint-disable-line no-empty-function
4
+ const methods = ['get', 'post', 'delete', 'patch', 'put'];
5
+ const reflectors = [
6
+ 'toString',
7
+ 'valueOf',
8
+ 'inspect',
9
+ 'constructor',
10
+ Symbol.toPrimitive,
11
+ Symbol.for('nodejs.util.inspect.custom'),
12
+ ];
13
+
14
+ function buildRoute(manager) {
15
+ const route = [''];
16
+ const handler = {
17
+ get(target, name) {
18
+ if (reflectors.includes(name)) return () => route.join('/');
19
+ if (methods.includes(name)) {
20
+ const routeBucket = [];
21
+ for (let i = 0; i < route.length; i++) {
22
+ // Reactions routes and sub-routes all share the same bucket
23
+ if (route[i - 1] === 'reactions') break;
24
+ // Literal ids should only be taken account if they are the Major id (the Channel/Guild id)
25
+ if (/\d{16,19}/g.test(route[i]) && !/channels|guilds/.test(route[i - 1])) routeBucket.push(':id');
26
+ // All other parts of the route should be considered as part of the bucket identifier
27
+ else routeBucket.push(route[i]);
28
+ }
29
+ return options =>
30
+ manager.request(
31
+ name,
32
+ route.join('/'),
33
+ Object.assign(
34
+ {
35
+ versioned: manager.versioned,
36
+ route: routeBucket.join('/'),
37
+ },
38
+ options,
39
+ ),
40
+ );
41
+ }
42
+ route.push(name);
43
+ return new Proxy(noop, handler);
44
+ },
45
+ apply(target, _, args) {
46
+ route.push(...args.filter(x => x != null)); // eslint-disable-line eqeqeq
47
+ return new Proxy(noop, handler);
48
+ },
49
+ };
50
+ return new Proxy(noop, handler);
51
+ }
52
+
53
+ module.exports = buildRoute;
@@ -0,0 +1,121 @@
1
+ 'use strict';
2
+
3
+ const redact = require('../util/Redact');
4
+
5
+ /**
6
+ * Represents an error from the Discord API.
7
+ * @extends Error
8
+ */
9
+ class DiscordAPIError extends Error {
10
+ constructor(error, status, request) {
11
+ super();
12
+ const flattened = this.constructor.flattenErrors(error.errors ?? error).join('\n');
13
+ this.name = 'DiscordAPIError';
14
+ this.message = error.message && flattened ? `${error.message}\n${flattened}` : error.message ?? flattened;
15
+
16
+ /**
17
+ * The HTTP method used for the request
18
+ * @type {string}
19
+ */
20
+ this.method = request.method;
21
+
22
+ /**
23
+ * The path of the request relative to the HTTP endpoint
24
+ * @type {string}
25
+ */
26
+ this.path = redact.path(request.path);
27
+
28
+ /**
29
+ * HTTP error code returned by Discord
30
+ * @type {number}
31
+ */
32
+ this.code = error.code;
33
+
34
+ /**
35
+ * The HTTP status code
36
+ * @type {number}
37
+ */
38
+ this.httpStatus = status;
39
+
40
+ /**
41
+ * The data associated with the request that caused this error
42
+ * @type {HTTPErrorData}
43
+ */
44
+ this.requestData = {
45
+ json: redact(request.options.data),
46
+ files: request.options.files ?? [],
47
+ headers: redact(request.options.headers),
48
+ };
49
+
50
+ /**
51
+ * The number of times this request has been retried
52
+ * @type {number}
53
+ */
54
+ this.retries = request.retries;
55
+
56
+ /**
57
+ * @typedef {Object} Captcha
58
+ * @property {Array<string>} captcha_key ['message']
59
+ * @property {string} captcha_sitekey Captcha sitekey (hcaptcha)
60
+ * @property {string} captcha_service hcaptcha
61
+ * @property {string} [captcha_rqdata]
62
+ * @property {string} [captcha_rqtoken]
63
+ */
64
+
65
+ /**
66
+ * Captcha response data if the request requires a captcha
67
+ * @type {Captcha | null}
68
+ */
69
+ this.captcha = error?.captcha_service ? error : null;
70
+ }
71
+
72
+ /**
73
+ * A special `40333` JSON error code is returned if your request is blocked by Cloudflare.
74
+ * This may be due to a malformed request or improper user agent.
75
+ * The response resembles a normal error structure:
76
+ * @type {boolean}
77
+ * @example
78
+ * {
79
+ * "message": "internal network error",
80
+ * "code": 40333
81
+ * }
82
+ */
83
+ get isBlockedByCloudflare() {
84
+ return this.code === 40333;
85
+ }
86
+
87
+ /**
88
+ * Flattens an errors object returned from the API into an array.
89
+ * @param {APIError} obj Discord errors object
90
+ * @param {string} [key] Used internally to determine key names of nested fields
91
+ * @returns {string[]}
92
+ * @private
93
+ */
94
+ static flattenErrors(obj, key = '') {
95
+ let messages = [];
96
+
97
+ for (const [k, v] of Object.entries(obj)) {
98
+ if (k === 'message') continue;
99
+ const newKey = key ? (isNaN(k) ? `${key}.${k}` : `${key}[${k}]`) : k;
100
+
101
+ if (v._errors) {
102
+ messages.push(`${newKey}: ${v._errors.map(e => e.message).join(' ')}`);
103
+ } else if (v.code ?? v.message) {
104
+ messages.push(`${v.code ? `${v.code}: ` : ''}${v.message}`.trim());
105
+ } else if (typeof v === 'string') {
106
+ messages.push(v);
107
+ } else {
108
+ messages = messages.concat(this.flattenErrors(v, newKey));
109
+ }
110
+ }
111
+
112
+ return messages;
113
+ }
114
+ }
115
+
116
+ module.exports = DiscordAPIError;
117
+
118
+ /**
119
+ * @external APIError
120
+ * @see {@link https://discord.com/developers/docs/reference#error-messages}
121
+ */
@@ -0,0 +1,64 @@
1
+ 'use strict';
2
+
3
+ const redact = require('../util/Redact');
4
+
5
+ /**
6
+ * Represents an HTTP error from a request.
7
+ * @extends Error
8
+ */
9
+ class HTTPError extends Error {
10
+ constructor(message, name, code, request) {
11
+ super(message);
12
+
13
+ /**
14
+ * The name of the error
15
+ * @type {string}
16
+ */
17
+ this.name = name;
18
+
19
+ /**
20
+ * HTTP error code returned from the request
21
+ * @type {number}
22
+ */
23
+ this.code = code ?? 500;
24
+
25
+ /**
26
+ * The HTTP method used for the request
27
+ * @type {string}
28
+ */
29
+ this.method = request.method;
30
+
31
+ /**
32
+ * The path of the request relative to the HTTP endpoint
33
+ * @type {string}
34
+ */
35
+ this.path = redact.path(request.path);
36
+
37
+ /**
38
+ * The HTTP data that was sent to Discord
39
+ * @typedef {Object} HTTPErrorData
40
+ * @property {*} json The JSON data that was sent
41
+ * @property {HTTPAttachmentData[]} files The files that were sent with this request, if any
42
+ */
43
+
44
+ /**
45
+ * The attachment data that is sent to Discord
46
+ * @typedef {Object} HTTPAttachmentData
47
+ * @property {string|Buffer|Stream} attachment The source of this attachment data
48
+ * @property {string} name The file name
49
+ * @property {Buffer|Stream} file The file buffer
50
+ */
51
+
52
+ /**
53
+ * The data associated with the request that caused this error
54
+ * @type {HTTPErrorData}
55
+ */
56
+ this.requestData = {
57
+ json: redact(request.options.data),
58
+ files: request.options.files ?? [],
59
+ headers: redact(request.options.headers),
60
+ };
61
+ }
62
+ }
63
+
64
+ module.exports = HTTPError;
@@ -0,0 +1,97 @@
1
+ 'use strict';
2
+
3
+ const { setInterval } = require('node:timers');
4
+ const { Collection } = require('@discordjs/collection');
5
+ const makeFetchCookie = require('fetch-cookie');
6
+ const { CookieJar } = require('tough-cookie');
7
+ const { fetch: fetchOriginal, buildConnector, Client, ProxyAgent } = require('undici');
8
+ const APIRequest = require('./APIRequest');
9
+ const routeBuilder = require('./APIRouter');
10
+ const RequestHandler = require('./RequestHandler');
11
+ const { Error: DiscordError } = require('../errors');
12
+ const { Endpoints, ciphers } = require('../util/Constants');
13
+ const Util = require('../util/Util');
14
+
15
+ class RESTManager {
16
+ constructor(client) {
17
+ this.client = client;
18
+ this.handlers = new Collection();
19
+ this.dispatchers = new Map();
20
+ this.controllers = new Set();
21
+ this.destroyed = false;
22
+ this.abortController = new AbortController();
23
+ this.versioned = true;
24
+ this.globalLimit = client.options.restGlobalRateLimit > 0 ? client.options.restGlobalRateLimit : Infinity;
25
+ this.globalRemaining = this.globalLimit;
26
+ this.globalReset = null;
27
+ this.globalDelay = null;
28
+ this.cookieJar = new CookieJar();
29
+ this.fetch = makeFetchCookie.default(fetchOriginal, this.cookieJar);
30
+ if (client.options.restSweepInterval > 0) {
31
+ this.sweepInterval = setInterval(() => {
32
+ this.handlers.sweep(handler => handler._inactive);
33
+ }, client.options.restSweepInterval * 1_000).unref();
34
+ }
35
+ }
36
+
37
+ get api() {
38
+ return routeBuilder(this);
39
+ }
40
+
41
+ getAuth() {
42
+ const token = this.client.token ?? this.client.accessToken;
43
+ if (token) return token?.replace(/Bot /g, '');
44
+ throw new DiscordError('TOKEN_MISSING');
45
+ }
46
+
47
+ get cdn() {
48
+ return Endpoints.CDN(this.client.options.http.cdn);
49
+ }
50
+
51
+ request(method, url, options = {}) {
52
+ if (this.destroyed) return Promise.reject(new Error('REST manager has been destroyed'));
53
+ const apiRequest = new APIRequest(this, method, url, options);
54
+ let handler = this.handlers.get(apiRequest.route);
55
+
56
+ if (!handler) {
57
+ handler = new RequestHandler(this);
58
+ this.handlers.set(apiRequest.route, handler);
59
+ }
60
+
61
+ return handler.push(apiRequest);
62
+ }
63
+
64
+ get endpoint() {
65
+ return this.client.options.http.api;
66
+ }
67
+
68
+ set endpoint(endpoint) {
69
+ this.client.options.http.api = endpoint;
70
+ }
71
+
72
+ getDispatcher(url) {
73
+ if (this.destroyed) throw new Error('REST manager has been destroyed');
74
+ const origin = new URL(url).origin;
75
+ let dispatcher = this.dispatchers.get(origin);
76
+ if (!dispatcher) {
77
+ const proxy = Util.checkUndiciProxyAgent(this.client.options.http.agent);
78
+ dispatcher = proxy
79
+ ? new ProxyAgent({ ...proxy, ciphers: ciphers.join(':') })
80
+ : new Client(origin, { connect: buildConnector({ ciphers: ciphers.join(':') }) });
81
+ this.dispatchers.set(origin, dispatcher);
82
+ }
83
+ return dispatcher;
84
+ }
85
+
86
+ destroy() {
87
+ this.destroyed = true;
88
+ this.abortController.abort();
89
+ clearInterval(this.sweepInterval);
90
+ for (const controller of this.controllers) controller.abort();
91
+ this.controllers.clear();
92
+ for (const dispatcher of this.dispatchers.values()) dispatcher.destroy().catch(() => {});
93
+ this.dispatchers.clear();
94
+ }
95
+ }
96
+
97
+ module.exports = RESTManager;
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Represents a RateLimit error from a request.
5
+ * @extends Error
6
+ */
7
+ class RateLimitError extends Error {
8
+ constructor({ timeout, limit, method, path, route, global }) {
9
+ super(`A ${global ? 'global ' : ''}rate limit was hit on route ${route}`);
10
+
11
+ /**
12
+ * The name of the error
13
+ * @type {string}
14
+ */
15
+ this.name = 'RateLimitError';
16
+
17
+ /**
18
+ * Time until this rate limit ends, in milliseconds
19
+ * @type {number}
20
+ */
21
+ this.timeout = timeout;
22
+
23
+ /**
24
+ * The HTTP method used for the request
25
+ * @type {string}
26
+ */
27
+ this.method = method;
28
+
29
+ /**
30
+ * The path of the request relative to the HTTP endpoint
31
+ * @type {string}
32
+ */
33
+ this.path = path;
34
+
35
+ /**
36
+ * The route of the request relative to the HTTP endpoint
37
+ * @type {string}
38
+ */
39
+ this.route = route;
40
+
41
+ /**
42
+ * Whether this rate limit is global
43
+ * @type {boolean}
44
+ */
45
+ this.global = global;
46
+
47
+ /**
48
+ * The maximum amount of requests of this endpoint
49
+ * @type {number}
50
+ */
51
+ this.limit = limit;
52
+ }
53
+ }
54
+
55
+ module.exports = RateLimitError;