discord-sb.js 1.0.0

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 +2 -0
  3. package/package.json +91 -0
  4. package/src/WebSocket.js +39 -0
  5. package/src/client/BaseClient.js +86 -0
  6. package/src/client/Client.js +978 -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 +1249 -0
  71. package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
  72. package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
  73. package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
  74. package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
  75. package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
  76. package/src/client/voice/networking/VoiceUDPClient.js +173 -0
  77. package/src/client/voice/networking/VoiceWebSocket.js +286 -0
  78. package/src/client/voice/player/MediaPlayer.js +321 -0
  79. package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
  80. package/src/client/voice/player/processing/IvfSplitter.js +106 -0
  81. package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
  82. package/src/client/voice/receiver/PacketHandler.js +260 -0
  83. package/src/client/voice/receiver/Receiver.js +96 -0
  84. package/src/client/voice/receiver/Recorder.js +173 -0
  85. package/src/client/voice/util/Function.js +116 -0
  86. package/src/client/voice/util/PlayInterface.js +122 -0
  87. package/src/client/voice/util/Secretbox.js +64 -0
  88. package/src/client/voice/util/Silence.js +16 -0
  89. package/src/client/voice/util/Socket.js +62 -0
  90. package/src/client/voice/util/VolumeInterface.js +104 -0
  91. package/src/client/websocket/WebSocketManager.js +392 -0
  92. package/src/client/websocket/WebSocketShard.js +907 -0
  93. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  94. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  95. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  97. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  98. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  99. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  100. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  101. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  102. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  103. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  104. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  105. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  106. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  107. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -0
  108. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  109. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  110. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  111. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  112. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  113. package/src/client/websocket/handlers/GUILD_CREATE.js +52 -0
  114. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  115. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  116. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  117. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  118. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  119. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  120. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  121. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  122. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  123. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  124. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  125. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  126. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  128. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  129. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  130. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  131. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
  132. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  133. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  134. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  135. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  136. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  137. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -0
  138. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -0
  139. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  140. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  141. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  142. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  143. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  144. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  145. package/src/client/websocket/handlers/READY.js +121 -0
  146. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
  147. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
  148. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -0
  149. package/src/client/websocket/handlers/RESUMED.js +14 -0
  150. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  151. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  152. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  153. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  154. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  155. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  156. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  157. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  158. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  159. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  160. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -0
  161. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  162. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
  163. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
  164. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  165. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
  166. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
  167. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  168. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  169. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  170. package/src/client/websocket/handlers/index.js +84 -0
  171. package/src/errors/DJSError.js +61 -0
  172. package/src/errors/Messages.js +217 -0
  173. package/src/errors/index.js +4 -0
  174. package/src/index.js +172 -0
  175. package/src/managers/ApplicationCommandManager.js +264 -0
  176. package/src/managers/ApplicationCommandPermissionsManager.js +417 -0
  177. package/src/managers/AutoModerationRuleManager.js +296 -0
  178. package/src/managers/BaseGuildEmojiManager.js +80 -0
  179. package/src/managers/BaseManager.js +19 -0
  180. package/src/managers/BillingManager.js +66 -0
  181. package/src/managers/CachedManager.js +71 -0
  182. package/src/managers/ChannelManager.js +148 -0
  183. package/src/managers/ClientUserSettingManager.js +372 -0
  184. package/src/managers/DataManager.js +61 -0
  185. package/src/managers/DeveloperManager.js +254 -0
  186. package/src/managers/GuildBanManager.js +250 -0
  187. package/src/managers/GuildChannelManager.js +488 -0
  188. package/src/managers/GuildEmojiManager.js +171 -0
  189. package/src/managers/GuildEmojiRoleManager.js +118 -0
  190. package/src/managers/GuildForumThreadManager.js +108 -0
  191. package/src/managers/GuildInviteManager.js +213 -0
  192. package/src/managers/GuildManager.js +338 -0
  193. package/src/managers/GuildMemberManager.js +599 -0
  194. package/src/managers/GuildMemberRoleManager.js +195 -0
  195. package/src/managers/GuildScheduledEventManager.js +314 -0
  196. package/src/managers/GuildSettingManager.js +155 -0
  197. package/src/managers/GuildStickerManager.js +179 -0
  198. package/src/managers/GuildTextThreadManager.js +98 -0
  199. package/src/managers/InteractionManager.js +39 -0
  200. package/src/managers/MessageManager.js +423 -0
  201. package/src/managers/PermissionOverwriteManager.js +164 -0
  202. package/src/managers/PresenceManager.js +71 -0
  203. package/src/managers/QuestManager.js +353 -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 +154 -0
  216. package/src/rest/APIRouter.js +53 -0
  217. package/src/rest/DiscordAPIError.js +119 -0
  218. package/src/rest/HTTPError.js +62 -0
  219. package/src/rest/RESTManager.js +67 -0
  220. package/src/rest/RateLimitError.js +55 -0
  221. package/src/rest/RequestHandler.js +466 -0
  222. package/src/sharding/Shard.js +444 -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 +655 -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 +1791 -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 +636 -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 +1252 -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 +354 -0
  286. package/src/structures/MessageReaction.js +181 -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 +1157 -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 +640 -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 +953 -0
  333. package/src/structures/interfaces/Collector.js +300 -0
  334. package/src/structures/interfaces/InteractionResponses.js +313 -0
  335. package/src/structures/interfaces/TextBasedChannel.js +821 -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 +170 -0
  341. package/src/util/ChannelFlags.js +45 -0
  342. package/src/util/Constants.js +1914 -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 +131 -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/RemoteAuth.js +415 -0
  355. package/src/util/RoleFlags.js +37 -0
  356. package/src/util/SnowflakeUtil.js +92 -0
  357. package/src/util/Speaking.js +33 -0
  358. package/src/util/Sweepers.js +466 -0
  359. package/src/util/SystemChannelFlags.js +55 -0
  360. package/src/util/ThreadMemberFlags.js +30 -0
  361. package/src/util/UserFlags.js +104 -0
  362. package/src/util/Util.js +1048 -0
  363. package/typings/enums.d.ts +439 -0
  364. package/typings/index.d.ts +8505 -0
  365. package/typings/index.test-d.ts +0 -0
  366. package/typings/rawDataTypes.d.ts +403 -0
@@ -0,0 +1,154 @@
1
+ 'use strict';
2
+
3
+ const Buffer = require('node:buffer').Buffer;
4
+ const { setTimeout } = require('node:timers');
5
+ const { FormData, buildConnector, Client, ProxyAgent } = require('undici');
6
+ const { ciphers } = require('../util/Constants');
7
+ const Util = require('../util/Util');
8
+
9
+ let agent = null;
10
+
11
+ class APIRequest {
12
+ constructor(rest, method, path, options) {
13
+ this.rest = rest;
14
+ this.client = rest.client;
15
+ this.method = method;
16
+ this.route = options.route;
17
+ this.options = options;
18
+ this.retries = 0;
19
+
20
+ this.fullUserAgent = this.client.options.http.headers['User-Agent'];
21
+
22
+ this.client.options.ws.properties.browser_user_agent = this.fullUserAgent;
23
+
24
+ let queryString = '';
25
+ if (options.query) {
26
+ const query = Object.entries(options.query)
27
+ .filter(([, value]) => value !== null && typeof value !== 'undefined')
28
+ .flatMap(([key, value]) => (Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]));
29
+ queryString = new URLSearchParams(query).toString();
30
+ }
31
+ this.path = `${path}${queryString && `?${queryString}`}`;
32
+ }
33
+
34
+ make(captchaKey, captchaRqToken) {
35
+ if (!agent) {
36
+ const r_ = Util.checkUndiciProxyAgent(this.client.options.http.agent);
37
+ if (!r_) {
38
+ agent = new Client('https://discord.com', {
39
+ connect: buildConnector({ ciphers: ciphers.join(':') }),
40
+ });
41
+ } else {
42
+ agent = new ProxyAgent({
43
+ ...r_,
44
+ ciphers: ciphers.join(':'),
45
+ });
46
+ }
47
+ }
48
+
49
+ const API =
50
+ this.options.versioned === false
51
+ ? this.client.options.http.api
52
+ : `${this.client.options.http.api}/v${this.client.options.http.version}`;
53
+ const url = API + this.path;
54
+
55
+ let headers = {
56
+ accept: '*/*',
57
+ 'accept-language': 'en-US',
58
+ priority: 'u=1, i',
59
+ referer: 'https://discord.com/channels/@me',
60
+ 'sec-ch-ua': '"Not:A-Brand";v="24", "Chromium";v="134"',
61
+ 'sec-ch-ua-mobile': '?0',
62
+ 'sec-ch-ua-platform': '"Windows"',
63
+ 'sec-fetch-dest': 'empty',
64
+ 'sec-fetch-mode': 'cors',
65
+ 'sec-fetch-site': 'same-origin',
66
+ 'x-discord-locale': 'en-US',
67
+ 'x-discord-timezone': Intl.DateTimeFormat().resolvedOptions().timeZone,
68
+ 'x-super-properties': `${Buffer.from(JSON.stringify(this.client.options.ws.properties), 'ascii').toString(
69
+ 'base64',
70
+ )}`,
71
+ origin: 'https://discord.com',
72
+ 'x-debug-options': 'bugReporterEnabled',
73
+ ...this.client.options.http.headers,
74
+ 'User-Agent': this.fullUserAgent,
75
+ };
76
+
77
+ if (this.options.auth !== false) headers.Authorization = this.rest.getAuth();
78
+ if (this.options.reason) headers['X-Audit-Log-Reason'] = encodeURIComponent(this.options.reason);
79
+ if (this.options.headers) headers = Object.assign(headers, this.options.headers);
80
+
81
+ // Delete all headers if undefined
82
+ for (const [key, value] of Object.entries(headers)) {
83
+ if (value === undefined) delete headers[key];
84
+ }
85
+ if (this.options.webhook === true) {
86
+ headers = {
87
+ 'User-Agent': this.client.options.http.headers['User-Agent'],
88
+ };
89
+ }
90
+
91
+ // Some options
92
+ if (this.options.DiscordContext) {
93
+ headers['X-Context-Properties'] = Buffer.from(JSON.stringify(this.options.DiscordContext), 'utf8').toString(
94
+ 'base64',
95
+ );
96
+ }
97
+
98
+ if (this.options.mfaToken) {
99
+ headers['X-Discord-Mfa-Authorization'] = this.options.mfaToken;
100
+ }
101
+
102
+ // Captcha
103
+ if (captchaKey && typeof captchaKey == 'string') headers['X-Captcha-Key'] = captchaKey;
104
+ if (captchaRqToken && typeof captchaRqToken == 'string') headers['X-Captcha-Rqtoken'] = captchaRqToken;
105
+
106
+ let body;
107
+ if (this.options.files?.length) {
108
+ body = new FormData();
109
+ for (const [index, file] of this.options.files.entries()) {
110
+ // Why undici#FormData doesn't support file stream?
111
+ // Hacky way to support file stream
112
+ if (file?.file) {
113
+ body.set(file.key ?? `files[${index}]`, {
114
+ [Symbol.toStringTag]: 'File',
115
+ name: file.name,
116
+ stream: () => file.file,
117
+ });
118
+ }
119
+ }
120
+ if (typeof this.options.data !== 'undefined') {
121
+ if (this.options.dontUsePayloadJSON) {
122
+ for (const [key, value] of Object.entries(this.options.data)) body.append(key, value);
123
+ } else {
124
+ body.append('payload_json', JSON.stringify(this.options.data));
125
+ }
126
+ }
127
+ // eslint-disable-next-line eqeqeq
128
+ } else if (this.options.data != null) {
129
+ if (this.options.usePayloadJSON) {
130
+ body = new FormData();
131
+ body.append('payload_json', JSON.stringify(this.options.data));
132
+ } else {
133
+ body = JSON.stringify(this.options.data);
134
+ headers['Content-Type'] = 'application/json';
135
+ }
136
+ }
137
+
138
+ const controller = new AbortController();
139
+ const timeout = setTimeout(() => controller.abort(), this.client.options.restRequestTimeout).unref();
140
+ return this.rest
141
+ .fetch(url, {
142
+ method: this.method.toUpperCase(), // Undici doesn't normalize "patch" into "PATCH" (which surprisingly follows the spec).
143
+ headers,
144
+ body,
145
+ signal: controller.signal,
146
+ redirect: 'follow',
147
+ dispatcher: agent,
148
+ credentials: 'include',
149
+ })
150
+ .finally(() => clearTimeout(timeout));
151
+ }
152
+ }
153
+
154
+ 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,119 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Represents an error from the Discord API.
5
+ * @extends Error
6
+ */
7
+ class DiscordAPIError extends Error {
8
+ constructor(error, status, request) {
9
+ super();
10
+ const flattened = this.constructor.flattenErrors(error.errors ?? error).join('\n');
11
+ this.name = 'DiscordAPIError';
12
+ this.message = error.message && flattened ? `${error.message}\n${flattened}` : error.message ?? flattened;
13
+
14
+ /**
15
+ * The HTTP method used for the request
16
+ * @type {string}
17
+ */
18
+ this.method = request.method;
19
+
20
+ /**
21
+ * The path of the request relative to the HTTP endpoint
22
+ * @type {string}
23
+ */
24
+ this.path = request.path;
25
+
26
+ /**
27
+ * HTTP error code returned by Discord
28
+ * @type {number}
29
+ */
30
+ this.code = error.code;
31
+
32
+ /**
33
+ * The HTTP status code
34
+ * @type {number}
35
+ */
36
+ this.httpStatus = status;
37
+
38
+ /**
39
+ * The data associated with the request that caused this error
40
+ * @type {HTTPErrorData}
41
+ */
42
+ this.requestData = {
43
+ json: request.options.data,
44
+ files: request.options.files ?? [],
45
+ headers: request.options.headers,
46
+ };
47
+
48
+ /**
49
+ * The number of times this request has been retried
50
+ * @type {number}
51
+ */
52
+ this.retries = request.retries;
53
+
54
+ /**
55
+ * @typedef {Object} Captcha
56
+ * @property {Array<string>} captcha_key ['message']
57
+ * @property {string} captcha_sitekey Captcha sitekey (hcaptcha)
58
+ * @property {string} captcha_service hcaptcha
59
+ * @property {string} [captcha_rqdata]
60
+ * @property {string} [captcha_rqtoken]
61
+ */
62
+
63
+ /**
64
+ * Captcha response data if the request requires a captcha
65
+ * @type {Captcha | null}
66
+ */
67
+ this.captcha = error?.captcha_service ? error : null;
68
+ }
69
+
70
+ /**
71
+ * A special `40333` JSON error code is returned if your request is blocked by Cloudflare.
72
+ * This may be due to a malformed request or improper user agent.
73
+ * The response resembles a normal error structure:
74
+ * @type {boolean}
75
+ * @example
76
+ * {
77
+ * "message": "internal network error",
78
+ * "code": 40333
79
+ * }
80
+ */
81
+ get isBlockedByCloudflare() {
82
+ return this.code === 40333;
83
+ }
84
+
85
+ /**
86
+ * Flattens an errors object returned from the API into an array.
87
+ * @param {APIError} obj Discord errors object
88
+ * @param {string} [key] Used internally to determine key names of nested fields
89
+ * @returns {string[]}
90
+ * @private
91
+ */
92
+ static flattenErrors(obj, key = '') {
93
+ let messages = [];
94
+
95
+ for (const [k, v] of Object.entries(obj)) {
96
+ if (k === 'message') continue;
97
+ const newKey = key ? (isNaN(k) ? `${key}.${k}` : `${key}[${k}]`) : k;
98
+
99
+ if (v._errors) {
100
+ messages.push(`${newKey}: ${v._errors.map(e => e.message).join(' ')}`);
101
+ } else if (v.code ?? v.message) {
102
+ messages.push(`${v.code ? `${v.code}: ` : ''}${v.message}`.trim());
103
+ } else if (typeof v === 'string') {
104
+ messages.push(v);
105
+ } else {
106
+ messages = messages.concat(this.flattenErrors(v, newKey));
107
+ }
108
+ }
109
+
110
+ return messages;
111
+ }
112
+ }
113
+
114
+ module.exports = DiscordAPIError;
115
+
116
+ /**
117
+ * @external APIError
118
+ * @see {@link https://discord.com/developers/docs/reference#error-messages}
119
+ */
@@ -0,0 +1,62 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Represents an HTTP error from a request.
5
+ * @extends Error
6
+ */
7
+ class HTTPError extends Error {
8
+ constructor(message, name, code, request) {
9
+ super(message);
10
+
11
+ /**
12
+ * The name of the error
13
+ * @type {string}
14
+ */
15
+ this.name = name;
16
+
17
+ /**
18
+ * HTTP error code returned from the request
19
+ * @type {number}
20
+ */
21
+ this.code = code ?? 500;
22
+
23
+ /**
24
+ * The HTTP method used for the request
25
+ * @type {string}
26
+ */
27
+ this.method = request.method;
28
+
29
+ /**
30
+ * The path of the request relative to the HTTP endpoint
31
+ * @type {string}
32
+ */
33
+ this.path = request.path;
34
+
35
+ /**
36
+ * The HTTP data that was sent to Discord
37
+ * @typedef {Object} HTTPErrorData
38
+ * @property {*} json The JSON data that was sent
39
+ * @property {HTTPAttachmentData[]} files The files that were sent with this request, if any
40
+ */
41
+
42
+ /**
43
+ * The attachment data that is sent to Discord
44
+ * @typedef {Object} HTTPAttachmentData
45
+ * @property {string|Buffer|Stream} attachment The source of this attachment data
46
+ * @property {string} name The file name
47
+ * @property {Buffer|Stream} file The file buffer
48
+ */
49
+
50
+ /**
51
+ * The data associated with the request that caused this error
52
+ * @type {HTTPErrorData}
53
+ */
54
+ this.requestData = {
55
+ json: request.options.data,
56
+ files: request.options.files ?? [],
57
+ headers: request.options.headers,
58
+ };
59
+ }
60
+ }
61
+
62
+ module.exports = HTTPError;
@@ -0,0 +1,67 @@
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 } = require('undici');
8
+ const APIRequest = require('./APIRequest');
9
+ const routeBuilder = require('./APIRouter');
10
+ const RequestHandler = require('./RequestHandler');
11
+ const { Error } = require('../errors');
12
+ const { Endpoints } = require('../util/Constants');
13
+
14
+ class RESTManager {
15
+ constructor(client) {
16
+ this.client = client;
17
+ this.handlers = new Collection();
18
+ this.versioned = true;
19
+ this.globalLimit = client.options.restGlobalRateLimit > 0 ? client.options.restGlobalRateLimit : Infinity;
20
+ this.globalRemaining = this.globalLimit;
21
+ this.globalReset = null;
22
+ this.globalDelay = null;
23
+ this.cookieJar = new CookieJar();
24
+ this.fetch = makeFetchCookie.default(fetchOriginal, this.cookieJar);
25
+ if (client.options.restSweepInterval > 0) {
26
+ this.sweepInterval = setInterval(() => {
27
+ this.handlers.sweep(handler => handler._inactive);
28
+ }, client.options.restSweepInterval * 1_000).unref();
29
+ }
30
+ }
31
+
32
+ get api() {
33
+ return routeBuilder(this);
34
+ }
35
+
36
+ getAuth() {
37
+ const token = this.client.token ?? this.client.accessToken;
38
+ if (token) return token?.replace(/Bot /g, '');
39
+ throw new Error('TOKEN_MISSING');
40
+ }
41
+
42
+ get cdn() {
43
+ return Endpoints.CDN(this.client.options.http.cdn);
44
+ }
45
+
46
+ request(method, url, options = {}) {
47
+ const apiRequest = new APIRequest(this, method, url, options);
48
+ let handler = this.handlers.get(apiRequest.route);
49
+
50
+ if (!handler) {
51
+ handler = new RequestHandler(this);
52
+ this.handlers.set(apiRequest.route, handler);
53
+ }
54
+
55
+ return handler.push(apiRequest);
56
+ }
57
+
58
+ get endpoint() {
59
+ return this.client.options.http.api;
60
+ }
61
+
62
+ set endpoint(endpoint) {
63
+ this.client.options.http.api = endpoint;
64
+ }
65
+ }
66
+
67
+ 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;