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,26 @@
1
+ 'use strict';
2
+
3
+ const sensitive =
4
+ /token|secret|password|authorization|cookie|ticket|captcha_key|captcha_rqdata|captcha_rqtoken|mfaCode|TOTPKey/i;
5
+
6
+ function redact(value, seen = new WeakSet()) {
7
+ if (value === null || typeof value !== 'object') return value;
8
+ if (seen.has(value)) return '[Circular]';
9
+ seen.add(value);
10
+ if (Array.isArray(value)) return value.map(item => redact(item, seen));
11
+ return Object.fromEntries(
12
+ Object.entries(value).map(([key, item]) => [
13
+ key,
14
+ sensitive.test(key) || (key === 'data' && value.mfa_type) ? '[REDACTED]' : redact(item, seen),
15
+ ]),
16
+ );
17
+ }
18
+
19
+ redact.path = value =>
20
+ typeof value === 'string'
21
+ ? value
22
+ .replace(/(\/webhooks\/[^/]+\/)[^/?]+/g, '$1[REDACTED]')
23
+ .replace(/([?&](?:token|authorization|code)=)[^&]+/gi, '$1[REDACTED]')
24
+ : value;
25
+
26
+ module.exports = redact;
@@ -0,0 +1,449 @@
1
+ 'use strict';
2
+
3
+ const { Buffer } = require('node:buffer');
4
+ const crypto = require('node:crypto');
5
+ const EventEmitter = require('node:events');
6
+ const { StringDecoder } = require('node:string_decoder');
7
+ const { setTimeout } = require('node:timers');
8
+ const { fetch } = require('undici');
9
+ const WebSocket = require('ws');
10
+ const { UserAgent } = require('./Constants');
11
+ const Options = require('./Options');
12
+
13
+ const defaultClientOptions = Options.createDefault();
14
+
15
+ const baseURL = 'https://discord.com/ra/';
16
+
17
+ const wsURL = 'wss://remote-auth-gateway.discord.gg/?v=2';
18
+
19
+ const receiveEvent = {
20
+ HELLO: 'hello',
21
+ NONCE_PROOF: 'nonce_proof',
22
+ PENDING_REMOTE_INIT: 'pending_remote_init',
23
+ HEARTBEAT_ACK: 'heartbeat_ack',
24
+ PENDING_TICKET: 'pending_ticket',
25
+ CANCEL: 'cancel',
26
+ PENDING_LOGIN: 'pending_login',
27
+ };
28
+
29
+ const sendEvent = {
30
+ INIT: 'init',
31
+ NONCE_PROOF: 'nonce_proof',
32
+ HEARTBEAT: 'heartbeat',
33
+ };
34
+
35
+ const Event = {
36
+ READY: 'ready',
37
+ ERROR: 'error',
38
+ CANCEL: 'cancel',
39
+ WAIT_SCAN: 'pending',
40
+ FINISH: 'finish',
41
+ CLOSED: 'closed',
42
+ DEBUG: 'debug',
43
+ };
44
+
45
+ /**
46
+ * Discord Auth QR
47
+ * @extends {EventEmitter}
48
+ * @abstract
49
+ */
50
+ class DiscordAuthWebsocket extends EventEmitter {
51
+ #ws = null;
52
+ #heartbeatTimer = null;
53
+ #expireTimer = null;
54
+ #closed = true;
55
+ #fetchController = null;
56
+ #heartbeatInterval = null;
57
+ #expire = null;
58
+ #publicKey = null;
59
+ #privateKey = null;
60
+ #ticket = null;
61
+ #fingerprint = '';
62
+ #userDecryptString = '';
63
+
64
+ /**
65
+ * Creates a new DiscordAuthWebsocket instance.
66
+ */
67
+ constructor() {
68
+ super();
69
+ this.token = '';
70
+ }
71
+
72
+ /**
73
+ * @type {string}
74
+ */
75
+ get AuthURL() {
76
+ return baseURL + this.#fingerprint;
77
+ }
78
+
79
+ /**
80
+ * @type {Date}
81
+ */
82
+ get exprire() {
83
+ return this.#expire;
84
+ }
85
+
86
+ /**
87
+ * @type {UserRaw}
88
+ */
89
+ get user() {
90
+ return DiscordAuthWebsocket.decryptUser(this.#userDecryptString);
91
+ }
92
+
93
+ #createWebSocket(url) {
94
+ this.#ws = new WebSocket(url, {
95
+ headers: {
96
+ Origin: 'https://discord.com',
97
+ 'User-Agent': UserAgent,
98
+ },
99
+ });
100
+ this.#handleWebSocket();
101
+ }
102
+
103
+ #handleWebSocket() {
104
+ const ws = this.#ws;
105
+ this.#ws.on('error', error => {
106
+ if (this.#ws !== ws) return;
107
+ /**
108
+ * WS Error
109
+ * @event DiscordAuthWebsocket#error
110
+ * @param {Error} error Error
111
+ */
112
+ this.#fail(error);
113
+ });
114
+ this.#ws.on('open', () => {
115
+ if (this.#ws !== ws) return;
116
+ /**
117
+ * Debug Event
118
+ * @event DiscordAuthWebsocket#debug
119
+ * @param {string} msg Debug msg
120
+ */
121
+ this.emit(Event.DEBUG, '[WS] Client Connected');
122
+ });
123
+ this.#ws.on('close', () => {
124
+ if (this.#ws !== ws) return;
125
+ this.emit(Event.DEBUG, '[WS] Connection closed');
126
+ this.destroy();
127
+ });
128
+ this.#ws.on('message', message => {
129
+ if (this.#ws !== ws) return;
130
+ try {
131
+ this.#handleMessage(message);
132
+ } catch (error) {
133
+ this.#fail(error);
134
+ }
135
+ });
136
+ }
137
+
138
+ #fail(error) {
139
+ if (this.listenerCount(Event.ERROR)) this.emit(Event.ERROR, error);
140
+ else this.emit(Event.DEBUG, error.message);
141
+ this.destroy();
142
+ }
143
+
144
+ #handleMessage(message) {
145
+ message = JSON.parse(message);
146
+ switch (message.op) {
147
+ case receiveEvent.HELLO: {
148
+ this.#ready(message);
149
+ break;
150
+ }
151
+
152
+ case receiveEvent.NONCE_PROOF: {
153
+ this.#receiveNonceProof(message);
154
+ break;
155
+ }
156
+
157
+ case receiveEvent.PENDING_REMOTE_INIT: {
158
+ this.#fingerprint = message.fingerprint;
159
+ /**
160
+ * Ready Event
161
+ * @event DiscordAuthWebsocket#ready
162
+ * @param {DiscordAuthWebsocket} client WS
163
+ */
164
+ this.emit(Event.READY, this);
165
+ break;
166
+ }
167
+
168
+ case receiveEvent.HEARTBEAT_ACK: {
169
+ this.emit(Event.DEBUG, `Heartbeat acknowledged.`);
170
+ this.#heartbeatAck();
171
+ break;
172
+ }
173
+
174
+ case receiveEvent.PENDING_TICKET: {
175
+ this.#pendingLogin(message);
176
+ break;
177
+ }
178
+
179
+ case receiveEvent.CANCEL: {
180
+ /**
181
+ * Cancel
182
+ * @event DiscordAuthWebsocket#cancel
183
+ * @param {DiscordAuthWebsocket} client WS
184
+ */
185
+ this.emit(Event.CANCEL, this);
186
+ this.destroy();
187
+ break;
188
+ }
189
+
190
+ case receiveEvent.PENDING_LOGIN: {
191
+ this.#ticket = message.ticket;
192
+ this.#findRealToken();
193
+ break;
194
+ }
195
+ }
196
+ }
197
+
198
+ #send(op, data) {
199
+ if (!this.#ws) return;
200
+ let payload = { op: op };
201
+ if (data !== null) payload = { ...payload, ...data };
202
+ this.#ws.send(JSON.stringify(payload));
203
+ }
204
+
205
+ #heartbeatAck() {
206
+ clearTimeout(this.#heartbeatTimer);
207
+ this.#heartbeatTimer = setTimeout(() => {
208
+ this.#send(sendEvent.HEARTBEAT);
209
+ }, this.#heartbeatInterval).unref();
210
+ }
211
+
212
+ #ready(data) {
213
+ this.emit(Event.DEBUG, 'Attempting server handshake...');
214
+ this.#expire = new Date(Date.now() + data.timeout_ms);
215
+ clearTimeout(this.#expireTimer);
216
+ this.#expireTimer = setTimeout(
217
+ () => this.#fail(new Error('Remote authentication expired')),
218
+ data.timeout_ms,
219
+ ).unref();
220
+ this.#heartbeatInterval = data.heartbeat_interval;
221
+ this.#createKey();
222
+ this.#heartbeatAck();
223
+ this.#init();
224
+ }
225
+
226
+ #createKey() {
227
+ const key = crypto.generateKeyPairSync('rsa', {
228
+ modulusLength: 2048,
229
+ publicKeyEncoding: {
230
+ type: 'spki',
231
+ format: 'pem',
232
+ },
233
+ privateKeyEncoding: {
234
+ type: 'pkcs1',
235
+ format: 'pem',
236
+ },
237
+ });
238
+ this.#privateKey = key.privateKey;
239
+ this.#publicKey = key.publicKey;
240
+ }
241
+
242
+ #encodePublicKey() {
243
+ const decoder = new StringDecoder('utf-8');
244
+ let pub_key = decoder.write(this.#publicKey);
245
+ pub_key = pub_key.split('\n').slice(1, -2).join('');
246
+ return pub_key;
247
+ }
248
+
249
+ #init() {
250
+ const public_key = this.#encodePublicKey();
251
+ this.#send(sendEvent.INIT, { encoded_public_key: public_key });
252
+ }
253
+
254
+ #receiveNonceProof(data) {
255
+ const nonce = data.encrypted_nonce;
256
+ const decrypted_nonce = this.#decryptPayload(nonce);
257
+ const proof = crypto
258
+ .createHash('sha256')
259
+ .update(decrypted_nonce)
260
+ .digest()
261
+ .toString('base64')
262
+ .replace(/\+/g, '-')
263
+ .replace(/\//g, '_')
264
+ .replace(/=+/, '')
265
+ .replace(/\s+$/, '');
266
+ this.#send(sendEvent.NONCE_PROOF, { proof: proof });
267
+ }
268
+
269
+ #decryptPayload(encrypted_payload) {
270
+ const payload = Buffer.from(encrypted_payload, 'base64');
271
+ const decoder = new StringDecoder('utf-8');
272
+ const private_key = decoder.write(this.#privateKey);
273
+ const data = crypto.privateDecrypt(
274
+ {
275
+ key: private_key,
276
+ padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
277
+ oaepHash: 'sha256',
278
+ },
279
+ payload,
280
+ );
281
+ return data;
282
+ }
283
+
284
+ #pendingLogin(data) {
285
+ const user_data = this.#decryptPayload(data.encrypted_user_payload);
286
+ this.#userDecryptString = user_data.toString();
287
+
288
+ /**
289
+ * @typedef {Object} UserRaw
290
+ * @property {Snowflake} id
291
+ * @property {string} username
292
+ * @property {number} discriminator
293
+ * @property {string} avatar
294
+ */
295
+
296
+ /**
297
+ * Emitted whenever a user is scan QR Code.
298
+ * @event DiscordAuthWebsocket#pending
299
+ * @param {UserRaw} user Discord User Raw
300
+ */
301
+ this.emit(Event.WAIT_SCAN, this.user);
302
+ }
303
+
304
+ #awaitLogin(client) {
305
+ return new Promise((resolve, reject) => {
306
+ const cleanup = () => {
307
+ this.removeListener(Event.FINISH, finish);
308
+ this.removeListener(Event.ERROR, error);
309
+ this.removeListener(Event.CANCEL, cancel);
310
+ this.removeListener(Event.CLOSED, closed);
311
+ };
312
+ const finish = token => {
313
+ cleanup();
314
+ Promise.resolve()
315
+ .then(() => client.login(token))
316
+ .then(resolve, reject);
317
+ };
318
+ const error = reason => {
319
+ cleanup();
320
+ reject(reason);
321
+ };
322
+ const cancel = () => error(new Error('Remote authentication cancelled'));
323
+ const closed = () => error(new Error('Remote authentication closed before login'));
324
+ this.once(Event.FINISH, finish);
325
+ this.once(Event.ERROR, error);
326
+ this.once(Event.CANCEL, cancel);
327
+ this.once(Event.CLOSED, closed);
328
+ });
329
+ }
330
+
331
+ /**
332
+ * Connect WS
333
+ * @param {Client} [client] DiscordJS Client
334
+ * @returns {Promise<void>}
335
+ */
336
+ connect(client) {
337
+ this.destroy();
338
+ this.#closed = false;
339
+ this.#fingerprint = '';
340
+ this.#ticket = null;
341
+ this.token = '';
342
+ const pending = client ? this.#awaitLogin(client) : Promise.resolve();
343
+ try {
344
+ this.#createWebSocket(wsURL);
345
+ } catch (error) {
346
+ this.#fail(error);
347
+ if (!client) return Promise.reject(error);
348
+ }
349
+ return pending;
350
+ }
351
+
352
+ /**
353
+ * Destroy client
354
+ * @returns {void}
355
+ */
356
+ destroy() {
357
+ if (this.#closed) return;
358
+ this.#closed = true;
359
+ clearTimeout(this.#heartbeatTimer);
360
+ clearTimeout(this.#expireTimer);
361
+ this.#fetchController?.abort();
362
+ const ws = this.#ws;
363
+ this.#ws = null;
364
+ ws?.close();
365
+ this.emit(Event.DEBUG, 'WebSocket closed.');
366
+ /**
367
+ * Emitted whenever a connection is closed.
368
+ * @event DiscordAuthWebsocket#closed
369
+ */
370
+ this.emit(Event.CLOSED);
371
+ }
372
+
373
+ /**
374
+ * Generate QR code for user to scan (Terminal)
375
+ * @returns {void}
376
+ */
377
+ generateQR() {
378
+ if (!this.#fingerprint) return;
379
+ require('qrcode').toString(this.AuthURL, { type: 'utf8', errorCorrectionLevel: 'L' }, (err, url) => {
380
+ if (err) {
381
+ //
382
+ }
383
+ console.log(url);
384
+ });
385
+ }
386
+
387
+ #findRealToken() {
388
+ const controller = new AbortController();
389
+ this.#fetchController = controller;
390
+ return fetch(`https://discord.com/api/v9/users/@me/remote-auth/login`, {
391
+ signal: controller.signal,
392
+ method: 'POST',
393
+ headers: {
394
+ Accept: '*/*',
395
+ 'Accept-Language': 'en-US',
396
+ 'Content-Type': 'application/json',
397
+ 'Sec-Fetch-Dest': 'empty',
398
+ 'Sec-Fetch-Mode': 'cors',
399
+ 'Sec-Fetch-Site': 'same-origin',
400
+ 'X-Debug-Options': 'bugReporterEnabled',
401
+ 'X-Super-Properties': `${Buffer.from(JSON.stringify(defaultClientOptions.ws.properties), 'ascii').toString(
402
+ 'base64',
403
+ )}`,
404
+ 'X-Discord-Locale': 'en-US',
405
+ 'User-Agent': UserAgent,
406
+ Referer: 'https://discord.com/channels/@me',
407
+ Connection: 'keep-alive',
408
+ Origin: 'https://discord.com',
409
+ },
410
+ body: JSON.stringify({
411
+ ticket: this.#ticket,
412
+ }),
413
+ })
414
+ .then(r => r.json())
415
+ .then(res => {
416
+ if (this.#closed || this.#fetchController !== controller) return;
417
+ if (!res.encrypted_token) throw new Error('Remote authentication did not return an encrypted token');
418
+ if (res.encrypted_token) {
419
+ this.token = this.#decryptPayload(res.encrypted_token).toString();
420
+ }
421
+ /**
422
+ * Emitted whenever a real token is found.
423
+ * @event DiscordAuthWebsocket#finish
424
+ * @param {string} token Discord Token
425
+ */
426
+ this.emit(Event.FINISH, this.token);
427
+ this.destroy();
428
+ })
429
+ .catch(error => {
430
+ if (!this.#closed && this.#fetchController === controller) this.#fail(error);
431
+ });
432
+ }
433
+
434
+ static decryptUser(payload) {
435
+ const values = payload.split(':');
436
+ const id = values[0];
437
+ const username = values[3];
438
+ const discriminator = values[1];
439
+ const avatar = values[2];
440
+ return {
441
+ id,
442
+ username,
443
+ discriminator,
444
+ avatar,
445
+ };
446
+ }
447
+ }
448
+
449
+ module.exports = DiscordAuthWebsocket;
@@ -0,0 +1,37 @@
1
+ 'use strict';
2
+
3
+ const BitField = require('./BitField');
4
+
5
+ /**
6
+ * Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.
7
+ * @extends {BitField}
8
+ */
9
+ class RoleFlags extends BitField {}
10
+
11
+ /**
12
+ * @name RoleFlags
13
+ * @kind constructor
14
+ * @memberof RoleFlags
15
+ * @param {BitFieldResolvable} [bits=0] Bit(s) to read from
16
+ */
17
+
18
+ /**
19
+ * Numeric guild member flags. All available properties:
20
+ * * `IN_PROMPT`
21
+ * @type {Object}
22
+ * @see {@link https://discord.com/developers/docs/topics/permissions#role-object-role-flags}
23
+ */
24
+ RoleFlags.FLAGS = {
25
+ IN_PROMPT: 1 << 0,
26
+ };
27
+
28
+ /**
29
+ * Data that can be resolved to give a role flag bitfield. This can be:
30
+ * * A string (see {@link RoleFlags.FLAGS})
31
+ * * A role flag
32
+ * * An instance of RoleFlags
33
+ * * An Array of RoleFlagsResolvable
34
+ * @typedef {string|number|RoleFlags|RoleFlagsResolvable[]} RoleFlagsResolvable
35
+ */
36
+
37
+ module.exports = RoleFlags;
@@ -0,0 +1,92 @@
1
+ 'use strict';
2
+
3
+ // Discord epoch (2015-01-01T00:00:00.000Z)
4
+ const EPOCH = 1_420_070_400_000;
5
+ let INCREMENT = BigInt(0);
6
+
7
+ /**
8
+ * A container for useful snowflake-related methods.
9
+ */
10
+ class SnowflakeUtil extends null {
11
+ /**
12
+ * A {@link https://docs.x.com/resources/fundamentals/x-ids Twitter snowflake},
13
+ * except the epoch is 2015-01-01T00:00:00.000Z.
14
+ *
15
+ * If we have a snowflake '266241948824764416' we can represent it as binary:
16
+ * ```
17
+ * 64 22 17 12 0
18
+ * 000000111011000111100001101001000101000000 00001 00000 000000000000
19
+ * number of milliseconds since Discord epoch worker pid increment
20
+ * ```
21
+ * @typedef {string} Snowflake
22
+ */
23
+
24
+ /**
25
+ * Generates a Discord snowflake.
26
+ * <info>This hardcodes the worker's id as 1 and the process's id as 0.</info>
27
+ * @param {number|Date} [timestamp=Date.now()] Timestamp or date of the snowflake to generate
28
+ * @returns {Snowflake} The generated snowflake
29
+ */
30
+ static generate(timestamp = Date.now()) {
31
+ if (timestamp instanceof Date) timestamp = timestamp.getTime();
32
+ if (typeof timestamp !== 'number' || isNaN(timestamp)) {
33
+ throw new TypeError(
34
+ `"timestamp" argument must be a number (received ${isNaN(timestamp) ? 'NaN' : typeof timestamp})`,
35
+ );
36
+ }
37
+ if (INCREMENT >= 4095n) INCREMENT = BigInt(0);
38
+
39
+ // Assign WorkerId as 1 and ProcessId as 0:
40
+ return ((BigInt(timestamp - EPOCH) << 22n) | (1n << 17n) | INCREMENT++).toString();
41
+ }
42
+
43
+ /**
44
+ * A deconstructed snowflake.
45
+ * @typedef {Object} DeconstructedSnowflake
46
+ * @property {number} timestamp Timestamp the snowflake was created
47
+ * @property {Date} date Date the snowflake was created
48
+ * @property {number} workerId The worker's id in the snowflake
49
+ * @property {number} processId The process's id in the snowflake
50
+ * @property {number} increment Increment in the snowflake
51
+ * @property {string} binary Binary representation of the snowflake
52
+ */
53
+
54
+ /**
55
+ * Deconstructs a Discord snowflake.
56
+ * @param {Snowflake} snowflake Snowflake to deconstruct
57
+ * @returns {DeconstructedSnowflake}
58
+ */
59
+ static deconstruct(snowflake) {
60
+ const bigIntSnowflake = BigInt(snowflake);
61
+ return {
62
+ timestamp: Number(bigIntSnowflake >> 22n) + EPOCH,
63
+ get date() {
64
+ return new Date(this.timestamp);
65
+ },
66
+ workerId: Number((bigIntSnowflake >> 17n) & 0b11111n),
67
+ processId: Number((bigIntSnowflake >> 12n) & 0b11111n),
68
+ increment: Number(bigIntSnowflake & 0b111111111111n),
69
+ binary: bigIntSnowflake.toString(2).padStart(64, '0'),
70
+ };
71
+ }
72
+
73
+ /**
74
+ * Retrieves the timestamp field's value from a Discord snowflake.
75
+ * @param {Snowflake} snowflake Snowflake to get the timestamp value from
76
+ * @returns {number}
77
+ */
78
+ static timestampFrom(snowflake) {
79
+ return Number(BigInt(snowflake) >> 22n) + EPOCH;
80
+ }
81
+
82
+ /**
83
+ * Discord's epoch value (2015-01-01T00:00:00.000Z).
84
+ * @type {number}
85
+ * @readonly
86
+ */
87
+ static get EPOCH() {
88
+ return EPOCH;
89
+ }
90
+ }
91
+
92
+ module.exports = SnowflakeUtil;
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ const BitField = require('./BitField');
4
+
5
+ /**
6
+ * Data structure that makes it easy to interact with a {@link VoiceConnection#speaking}
7
+ * and {@link guildMemberSpeaking} event bitfields.
8
+ * @extends {BitField}
9
+ */
10
+ class Speaking extends BitField {}
11
+
12
+ /**
13
+ * @name Speaking
14
+ * @kind constructor
15
+ * @memberof Speaking
16
+ * @param {BitFieldResolvable} [bits=0] Bit(s) to read from
17
+ */
18
+
19
+ /**
20
+ * Numeric speaking flags. All available properties:
21
+ * * `SPEAKING`
22
+ * * `SOUNDSHARE`
23
+ * * `PRIORITY_SPEAKING`
24
+ * @type {Object}
25
+ * @see {@link https://discord.com/developers/docs/topics/voice-connections#speaking}
26
+ */
27
+ Speaking.FLAGS = {
28
+ SPEAKING: 1 << 0,
29
+ SOUNDSHARE: 1 << 1,
30
+ PRIORITY_SPEAKING: 1 << 2,
31
+ };
32
+
33
+ module.exports = Speaking;