discord.js-selfbots-v13 0.0.1-security → 3.3.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.

Potentially problematic release.


This version of discord.js-selfbots-v13 might be problematic. Click here for more details.

Files changed (343) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +127 -5
  3. package/package.json +101 -6
  4. package/src/WebSocket.js +39 -0
  5. package/src/client/BaseClient.js +87 -0
  6. package/src/client/Client.js +1154 -0
  7. package/src/client/WebhookClient.js +61 -0
  8. package/src/client/actions/Action.js +115 -0
  9. package/src/client/actions/ActionsManager.js +72 -0
  10. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  11. package/src/client/actions/AutoModerationActionExecution.js +26 -0
  12. package/src/client/actions/AutoModerationRuleCreate.js +27 -0
  13. package/src/client/actions/AutoModerationRuleDelete.js +31 -0
  14. package/src/client/actions/AutoModerationRuleUpdate.js +29 -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 +34 -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/InteractionCreate.js +115 -0
  45. package/src/client/actions/InviteCreate.js +28 -0
  46. package/src/client/actions/InviteDelete.js +30 -0
  47. package/src/client/actions/MessageCreate.js +50 -0
  48. package/src/client/actions/MessageDelete.js +32 -0
  49. package/src/client/actions/MessageDeleteBulk.js +46 -0
  50. package/src/client/actions/MessageReactionAdd.js +56 -0
  51. package/src/client/actions/MessageReactionRemove.js +45 -0
  52. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  53. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  54. package/src/client/actions/MessageUpdate.js +26 -0
  55. package/src/client/actions/PresenceUpdate.js +45 -0
  56. package/src/client/actions/StageInstanceCreate.js +28 -0
  57. package/src/client/actions/StageInstanceDelete.js +33 -0
  58. package/src/client/actions/StageInstanceUpdate.js +30 -0
  59. package/src/client/actions/ThreadCreate.js +24 -0
  60. package/src/client/actions/ThreadDelete.js +32 -0
  61. package/src/client/actions/ThreadListSync.js +59 -0
  62. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  63. package/src/client/actions/ThreadMembersUpdate.js +34 -0
  64. package/src/client/actions/TypingStart.js +29 -0
  65. package/src/client/actions/UserUpdate.js +35 -0
  66. package/src/client/actions/VoiceStateUpdate.js +57 -0
  67. package/src/client/actions/WebhooksUpdate.js +20 -0
  68. package/src/client/voice/ClientVoiceManager.js +51 -0
  69. package/src/client/websocket/WebSocketManager.js +412 -0
  70. package/src/client/websocket/WebSocketShard.js +908 -0
  71. package/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js +23 -0
  72. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  73. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  74. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  75. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  76. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  77. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  78. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  79. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  80. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  81. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  82. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  83. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  84. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  85. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  86. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +16 -0
  87. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  88. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  89. package/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js +11 -0
  90. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  91. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  92. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  93. package/src/client/websocket/handlers/GUILD_CREATE.js +46 -0
  94. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  95. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  97. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  98. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  99. package/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js +55 -0
  100. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  101. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  102. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  103. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  104. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  105. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  106. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  107. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  108. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  109. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  110. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  111. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  112. package/src/client/websocket/handlers/INTERACTION_CREATE.js +16 -0
  113. package/src/client/websocket/handlers/INTERACTION_FAILURE.js +18 -0
  114. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +11 -0
  115. package/src/client/websocket/handlers/INTERACTION_SUCCESS.js +30 -0
  116. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  117. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  118. package/src/client/websocket/handlers/MESSAGE_ACK.js +16 -0
  119. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  120. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  121. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  122. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  123. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  124. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  125. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  126. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  127. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  128. package/src/client/websocket/handlers/READY.js +172 -0
  129. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +17 -0
  130. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +15 -0
  131. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +18 -0
  132. package/src/client/websocket/handlers/RESUMED.js +14 -0
  133. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  134. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  135. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  136. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  137. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  138. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  139. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  140. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  141. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  142. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  143. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +12 -0
  144. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  145. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +9 -0
  146. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  147. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  148. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  149. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  150. package/src/client/websocket/handlers/index.js +86 -0
  151. package/src/errors/DJSError.js +61 -0
  152. package/src/errors/Messages.js +227 -0
  153. package/src/errors/index.js +4 -0
  154. package/src/index.js +190 -0
  155. package/src/main.js +1 -0
  156. package/src/managers/ApplicationCommandManager.js +267 -0
  157. package/src/managers/ApplicationCommandPermissionsManager.js +425 -0
  158. package/src/managers/AutoModerationRuleManager.js +296 -0
  159. package/src/managers/BaseGuildEmojiManager.js +80 -0
  160. package/src/managers/BaseManager.js +19 -0
  161. package/src/managers/BillingManager.js +66 -0
  162. package/src/managers/CachedManager.js +71 -0
  163. package/src/managers/ChannelManager.js +139 -0
  164. package/src/managers/ClientUserSettingManager.js +490 -0
  165. package/src/managers/DataManager.js +61 -0
  166. package/src/managers/DeveloperPortalManager.js +104 -0
  167. package/src/managers/GuildApplicationCommandManager.js +28 -0
  168. package/src/managers/GuildBanManager.js +204 -0
  169. package/src/managers/GuildChannelManager.js +502 -0
  170. package/src/managers/GuildEmojiManager.js +171 -0
  171. package/src/managers/GuildEmojiRoleManager.js +118 -0
  172. package/src/managers/GuildFolderManager.js +24 -0
  173. package/src/managers/GuildForumThreadManager.js +114 -0
  174. package/src/managers/GuildInviteManager.js +213 -0
  175. package/src/managers/GuildManager.js +304 -0
  176. package/src/managers/GuildMemberManager.js +724 -0
  177. package/src/managers/GuildMemberRoleManager.js +191 -0
  178. package/src/managers/GuildScheduledEventManager.js +296 -0
  179. package/src/managers/GuildSettingManager.js +148 -0
  180. package/src/managers/GuildStickerManager.js +179 -0
  181. package/src/managers/GuildTextThreadManager.js +98 -0
  182. package/src/managers/InteractionManager.js +39 -0
  183. package/src/managers/MessageManager.js +393 -0
  184. package/src/managers/PermissionOverwriteManager.js +166 -0
  185. package/src/managers/PresenceManager.js +58 -0
  186. package/src/managers/ReactionManager.js +67 -0
  187. package/src/managers/ReactionUserManager.js +71 -0
  188. package/src/managers/RelationshipManager.js +258 -0
  189. package/src/managers/RoleManager.js +352 -0
  190. package/src/managers/SessionManager.js +57 -0
  191. package/src/managers/StageInstanceManager.js +162 -0
  192. package/src/managers/ThreadManager.js +207 -0
  193. package/src/managers/ThreadMemberManager.js +186 -0
  194. package/src/managers/UserManager.js +150 -0
  195. package/src/managers/VoiceStateManager.js +37 -0
  196. package/src/rest/APIRequest.js +136 -0
  197. package/src/rest/APIRouter.js +53 -0
  198. package/src/rest/CaptchaSolver.js +78 -0
  199. package/src/rest/DiscordAPIError.js +103 -0
  200. package/src/rest/HTTPError.js +62 -0
  201. package/src/rest/RESTManager.js +81 -0
  202. package/src/rest/RateLimitError.js +55 -0
  203. package/src/rest/RequestHandler.js +446 -0
  204. package/src/sharding/Shard.js +443 -0
  205. package/src/sharding/ShardClientUtil.js +275 -0
  206. package/src/sharding/ShardingManager.js +318 -0
  207. package/src/structures/AnonymousGuild.js +98 -0
  208. package/src/structures/ApplicationCommand.js +1028 -0
  209. package/src/structures/ApplicationRoleConnectionMetadata.js +45 -0
  210. package/src/structures/AutoModerationActionExecution.js +89 -0
  211. package/src/structures/AutoModerationRule.js +294 -0
  212. package/src/structures/AutocompleteInteraction.js +106 -0
  213. package/src/structures/Base.js +43 -0
  214. package/src/structures/BaseCommandInteraction.js +211 -0
  215. package/src/structures/BaseGuild.js +116 -0
  216. package/src/structures/BaseGuildEmoji.js +56 -0
  217. package/src/structures/BaseGuildTextChannel.js +193 -0
  218. package/src/structures/BaseGuildVoiceChannel.js +243 -0
  219. package/src/structures/BaseMessageComponent.js +114 -0
  220. package/src/structures/ButtonInteraction.js +11 -0
  221. package/src/structures/Call.js +58 -0
  222. package/src/structures/CategoryChannel.js +83 -0
  223. package/src/structures/Channel.js +271 -0
  224. package/src/structures/ClientApplication.js +204 -0
  225. package/src/structures/ClientPresence.js +84 -0
  226. package/src/structures/ClientUser.js +624 -0
  227. package/src/structures/CommandInteraction.js +41 -0
  228. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  229. package/src/structures/ContextMenuInteraction.js +65 -0
  230. package/src/structures/DMChannel.js +280 -0
  231. package/src/structures/DeveloperPortalApplication.js +520 -0
  232. package/src/structures/DirectoryChannel.js +20 -0
  233. package/src/structures/Emoji.js +148 -0
  234. package/src/structures/ForumChannel.js +271 -0
  235. package/src/structures/Guild.js +1744 -0
  236. package/src/structures/GuildAuditLogs.js +734 -0
  237. package/src/structures/GuildBan.js +59 -0
  238. package/src/structures/GuildBoost.js +108 -0
  239. package/src/structures/GuildChannel.js +454 -0
  240. package/src/structures/GuildEmoji.js +161 -0
  241. package/src/structures/GuildFolder.js +75 -0
  242. package/src/structures/GuildMember.js +686 -0
  243. package/src/structures/GuildPreview.js +191 -0
  244. package/src/structures/GuildPreviewEmoji.js +27 -0
  245. package/src/structures/GuildScheduledEvent.js +441 -0
  246. package/src/structures/GuildTemplate.js +236 -0
  247. package/src/structures/Integration.js +188 -0
  248. package/src/structures/IntegrationApplication.js +96 -0
  249. package/src/structures/Interaction.js +351 -0
  250. package/src/structures/InteractionCollector.js +248 -0
  251. package/src/structures/InteractionResponse.js +114 -0
  252. package/src/structures/InteractionWebhook.js +43 -0
  253. package/src/structures/Invite.js +375 -0
  254. package/src/structures/InviteGuild.js +23 -0
  255. package/src/structures/InviteStageInstance.js +86 -0
  256. package/src/structures/Message.js +1188 -0
  257. package/src/structures/MessageActionRow.js +103 -0
  258. package/src/structures/MessageAttachment.js +193 -0
  259. package/src/structures/MessageButton.js +231 -0
  260. package/src/structures/MessageCollector.js +146 -0
  261. package/src/structures/MessageComponentInteraction.js +120 -0
  262. package/src/structures/MessageContextMenuInteraction.js +20 -0
  263. package/src/structures/MessageEmbed.js +586 -0
  264. package/src/structures/MessageMentions.js +272 -0
  265. package/src/structures/MessagePayload.js +358 -0
  266. package/src/structures/MessageReaction.js +171 -0
  267. package/src/structures/MessageSelectMenu.js +391 -0
  268. package/src/structures/Modal.js +279 -0
  269. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  270. package/src/structures/ModalSubmitInteraction.js +119 -0
  271. package/src/structures/NewsChannel.js +32 -0
  272. package/src/structures/OAuth2Guild.js +28 -0
  273. package/src/structures/PartialGroupDMChannel.js +430 -0
  274. package/src/structures/PermissionOverwrites.js +196 -0
  275. package/src/structures/Presence.js +441 -0
  276. package/src/structures/ReactionCollector.js +229 -0
  277. package/src/structures/ReactionEmoji.js +31 -0
  278. package/src/structures/RichPresence.js +722 -0
  279. package/src/structures/Role.js +515 -0
  280. package/src/structures/SelectMenuInteraction.js +170 -0
  281. package/src/structures/Session.js +81 -0
  282. package/src/structures/StageChannel.js +104 -0
  283. package/src/structures/StageInstance.js +208 -0
  284. package/src/structures/Sticker.js +310 -0
  285. package/src/structures/StickerPack.js +95 -0
  286. package/src/structures/StoreChannel.js +56 -0
  287. package/src/structures/Team.js +167 -0
  288. package/src/structures/TeamMember.js +71 -0
  289. package/src/structures/TextChannel.js +33 -0
  290. package/src/structures/TextInputComponent.js +201 -0
  291. package/src/structures/ThreadChannel.js +626 -0
  292. package/src/structures/ThreadMember.js +105 -0
  293. package/src/structures/Typing.js +74 -0
  294. package/src/structures/User.js +697 -0
  295. package/src/structures/UserContextMenuInteraction.js +29 -0
  296. package/src/structures/VoiceChannel.js +110 -0
  297. package/src/structures/VoiceRegion.js +53 -0
  298. package/src/structures/VoiceState.js +306 -0
  299. package/src/structures/WebEmbed.js +401 -0
  300. package/src/structures/Webhook.js +461 -0
  301. package/src/structures/WelcomeChannel.js +60 -0
  302. package/src/structures/WelcomeScreen.js +48 -0
  303. package/src/structures/Widget.js +87 -0
  304. package/src/structures/WidgetMember.js +99 -0
  305. package/src/structures/interfaces/Application.js +190 -0
  306. package/src/structures/interfaces/Collector.js +300 -0
  307. package/src/structures/interfaces/InteractionResponses.js +313 -0
  308. package/src/structures/interfaces/TextBasedChannel.js +566 -0
  309. package/src/util/ActivityFlags.js +44 -0
  310. package/src/util/ApplicationFlags.js +74 -0
  311. package/src/util/BitField.js +170 -0
  312. package/src/util/ChannelFlags.js +45 -0
  313. package/src/util/Constants.js +1917 -0
  314. package/src/util/DataResolver.js +145 -0
  315. package/src/util/Formatters.js +214 -0
  316. package/src/util/GuildMemberFlags.js +43 -0
  317. package/src/util/Intents.js +74 -0
  318. package/src/util/LimitedCollection.js +131 -0
  319. package/src/util/MessageFlags.js +54 -0
  320. package/src/util/Options.js +360 -0
  321. package/src/util/Permissions.js +187 -0
  322. package/src/util/PremiumUsageFlags.js +31 -0
  323. package/src/util/PurchasedFlags.js +31 -0
  324. package/src/util/RemoteAuth.js +522 -0
  325. package/src/util/SnowflakeUtil.js +92 -0
  326. package/src/util/Sweepers.js +466 -0
  327. package/src/util/SystemChannelFlags.js +55 -0
  328. package/src/util/ThreadMemberFlags.js +30 -0
  329. package/src/util/UserFlags.js +104 -0
  330. package/src/util/Util.js +741 -0
  331. package/src/util/Voice.js +1456 -0
  332. package/src/util/arRPC/index.js +229 -0
  333. package/src/util/arRPC/process/detectable.json +1 -0
  334. package/src/util/arRPC/process/index.js +102 -0
  335. package/src/util/arRPC/process/native/index.js +5 -0
  336. package/src/util/arRPC/process/native/linux.js +37 -0
  337. package/src/util/arRPC/process/native/win32.js +25 -0
  338. package/src/util/arRPC/transports/ipc.js +281 -0
  339. package/src/util/arRPC/transports/websocket.js +128 -0
  340. package/typings/enums.d.ts +346 -0
  341. package/typings/index.d.ts +7725 -0
  342. package/typings/index.test-d.ts +0 -0
  343. package/typings/rawDataTypes.d.ts +283 -0
@@ -0,0 +1,150 @@
1
+ 'use strict';
2
+
3
+ const CachedManager = require('./CachedManager');
4
+ const { Error } = require('../errors');
5
+ const { GuildMember } = require('../structures/GuildMember');
6
+ const { Message } = require('../structures/Message');
7
+ const ThreadMember = require('../structures/ThreadMember');
8
+ const User = require('../structures/User');
9
+
10
+ /**
11
+ * Manages API methods for users and stores their cache.
12
+ * @extends {CachedManager}
13
+ */
14
+ class UserManager extends CachedManager {
15
+ constructor(client, iterable) {
16
+ super(client, User, iterable);
17
+ }
18
+
19
+ /**
20
+ * The cache of this manager
21
+ * @type {Collection<Snowflake, User>}
22
+ * @name UserManager#cache
23
+ */
24
+
25
+ /**
26
+ * Data that resolves to give a User object. This can be:
27
+ * * A User object
28
+ * * A Snowflake
29
+ * * A Message object (resolves to the message author)
30
+ * * A GuildMember object
31
+ * * A ThreadMember object
32
+ * @typedef {User|Snowflake|Message|GuildMember|ThreadMember} UserResolvable
33
+ */
34
+
35
+ /**
36
+ * The DM between the client's user and a user
37
+ * @param {Snowflake} userId The user id
38
+ * @returns {?DMChannel}
39
+ * @private
40
+ */
41
+ dmChannel(userId) {
42
+ return this.client.channels.cache.find(c => c.type === 'DM' && c.recipient.id === userId) ?? null;
43
+ }
44
+
45
+ /**
46
+ * Creates a {@link DMChannel} between the client and a user.
47
+ * @param {UserResolvable} user The UserResolvable to identify
48
+ * @param {BaseFetchOptions} [options] Additional options for this fetch
49
+ * @returns {Promise<DMChannel>}
50
+ */
51
+ async createDM(user, { cache = true, force = false } = {}) {
52
+ const id = this.resolveId(user);
53
+
54
+ if (!force) {
55
+ const dmChannel = this.dmChannel(id);
56
+ if (dmChannel && !dmChannel.partial) return dmChannel;
57
+ }
58
+
59
+ const data = await this.client.api.users(this.client.user.id).channels.post({
60
+ data: {
61
+ recipients: [id],
62
+ },
63
+ headers: {
64
+ 'X-Context-Properties': 'e30=', // {}
65
+ },
66
+ });
67
+ const dm_channel = await this.client.channels._add(data, null, { cache });
68
+ await dm_channel.sync();
69
+ return dm_channel;
70
+ }
71
+
72
+ /**
73
+ * Deletes a {@link DMChannel} (if one exists) between the client and a user. Resolves with the channel if successful.
74
+ * @param {UserResolvable} user The UserResolvable to identify
75
+ * @returns {Promise<DMChannel>}
76
+ */
77
+ async deleteDM(user) {
78
+ const id = this.resolveId(user);
79
+ const dmChannel = this.dmChannel(id);
80
+ if (!dmChannel) throw new Error('USER_NO_DM_CHANNEL');
81
+ await this.client.api.channels(dmChannel.id).delete();
82
+ this.client.channels._remove(dmChannel.id);
83
+ return dmChannel;
84
+ }
85
+
86
+ /**
87
+ * Obtains a user from Discord, or the user cache if it's already available.
88
+ * @param {UserResolvable} user The user to fetch
89
+ * @param {BaseFetchOptions} [options] Additional options for this fetch
90
+ * @param {?Snowflake} [options.guildId] The guild ID to fetch the member for
91
+ * @returns {Promise<User>}
92
+ */
93
+ async fetch(user, { cache = true, force = false, guildId = null } = {}) {
94
+ const id = this.resolveId(user);
95
+ if (!force) {
96
+ const existing = this.cache.get(id);
97
+ if (existing && !existing.partial) return existing;
98
+ }
99
+
100
+ const data = await this.client.api.users(id).get();
101
+ const userObject = this._add(data, cache);
102
+ await userObject.getProfile(guildId ?? null).catch(() => {});
103
+ return userObject;
104
+ }
105
+
106
+ /**
107
+ * Fetches a user's flags.
108
+ * @param {UserResolvable} user The UserResolvable to identify
109
+ * @param {BaseFetchOptions} [options] Additional options for this fetch
110
+ * @returns {Promise<UserFlags>}
111
+ */
112
+ async fetchFlags(user, options) {
113
+ return (await this.fetch(user, options)).flags;
114
+ }
115
+
116
+ /**
117
+ * Sends a message to a user.
118
+ * @param {UserResolvable} user The UserResolvable to identify
119
+ * @param {string|MessagePayload|MessageOptions} options The options to provide
120
+ * @returns {Promise<Message>}
121
+ */
122
+ async send(user, options) {
123
+ return (await this.createDM(user)).send(options);
124
+ }
125
+
126
+ /**
127
+ * Resolves a {@link UserResolvable} to a {@link User} object.
128
+ * @param {UserResolvable} user The UserResolvable to identify
129
+ * @returns {?User}
130
+ */
131
+ resolve(user) {
132
+ if (user instanceof GuildMember || user instanceof ThreadMember) return user.user;
133
+ if (user instanceof Message) return user.author;
134
+ return super.resolve(user);
135
+ }
136
+
137
+ /**
138
+ * Resolves a {@link UserResolvable} to a {@link User} id.
139
+ * @param {UserResolvable} user The UserResolvable to identify
140
+ * @returns {?Snowflake}
141
+ */
142
+ resolveId(user) {
143
+ if (user instanceof ThreadMember) return user.id;
144
+ if (user instanceof GuildMember) return user.user.id;
145
+ if (user instanceof Message) return user.author.id;
146
+ return super.resolveId(user);
147
+ }
148
+ }
149
+
150
+ module.exports = UserManager;
@@ -0,0 +1,37 @@
1
+ 'use strict';
2
+
3
+ const CachedManager = require('./CachedManager');
4
+ const VoiceState = require('../structures/VoiceState');
5
+
6
+ /**
7
+ * Manages API methods for VoiceStates and stores their cache.
8
+ * @extends {CachedManager}
9
+ */
10
+ class VoiceStateManager extends CachedManager {
11
+ constructor(guild, iterable) {
12
+ super(guild.client, VoiceState, iterable);
13
+
14
+ /**
15
+ * The guild this manager belongs to
16
+ * @type {Guild}
17
+ */
18
+ this.guild = guild;
19
+ }
20
+
21
+ /**
22
+ * The cache of this manager
23
+ * @type {Collection<Snowflake, VoiceState>}
24
+ * @name VoiceStateManager#cache
25
+ */
26
+
27
+ _add(data, cache = true) {
28
+ const existing = this.cache.get(data.user_id);
29
+ if (existing) return existing._patch(data);
30
+
31
+ const entry = new this.holds(this.guild, data);
32
+ if (cache) this.cache.set(data.user_id, entry);
33
+ return entry;
34
+ }
35
+ }
36
+
37
+ module.exports = VoiceStateManager;
@@ -0,0 +1,136 @@
1
+ 'use strict';
2
+
3
+ const Buffer = require('node:buffer').Buffer;
4
+ const https = require('node:https');
5
+ const { setTimeout } = require('node:timers');
6
+ const FormData = require('form-data');
7
+ const fetch = require('node-fetch');
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
+ 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
+ make(captchaKey = undefined, captchaRqtoken = undefined) {
31
+ if (agent === null) {
32
+ if (typeof this.client.options.proxy === 'string' && this.client.options.proxy.length > 0) {
33
+ const proxy = require('proxy-agent');
34
+ agent = new proxy(this.client.options.proxy);
35
+ } else if (this.client.options.http.agent instanceof https.Agent) {
36
+ agent = this.client.options.http.agent;
37
+ agent.keepAlive = true;
38
+ } else {
39
+ agent = new https.Agent({ ...this.client.options.http.agent, keepAlive: true });
40
+ }
41
+ }
42
+
43
+ const API =
44
+ this.options.versioned === false
45
+ ? this.client.options.http.api
46
+ : `${this.client.options.http.api}/v${this.client.options.http.version}`;
47
+ const url = API + this.path;
48
+
49
+ let headers = {
50
+ ...this.client.options.http.headers,
51
+ accept: '*/*',
52
+ 'accept-language': 'en-US',
53
+ 'sec-ch-ua': `"Not?A_Brand";v="8", "Chromium";v="${
54
+ /Chrome\/(\d+)/.exec(this.client.options.http.headers['User-Agent'])[1]
55
+ }"`,
56
+ 'sec-ch-ua-mobile': '?0',
57
+ 'sec-ch-ua-platform': '"Windows"',
58
+ 'sec-fetch-dest': 'empty',
59
+ 'sec-fetch-mode': 'cors',
60
+ 'sec-fetch-site': 'same-origin',
61
+ 'x-debug-options': 'bugReporterEnabled',
62
+ 'x-discord-locale': 'en-US',
63
+ 'x-discord-timezone': 'Asia/Saigon',
64
+ 'x-super-properties': `${Buffer.from(
65
+ this.client.options.jsonTransformer(this.client.options.ws.properties),
66
+ 'ascii',
67
+ ).toString('base64')}`,
68
+ Referer: 'https://discord.com/channels/@me',
69
+ origin: 'https://discord.com',
70
+ 'Referrer-Policy': 'strict-origin-when-cross-origin',
71
+ };
72
+
73
+ if (this.options.auth !== false) headers.Authorization = this.rest.getAuth();
74
+ if (this.options.reason) headers['X-Audit-Log-Reason'] = encodeURIComponent(this.options.reason);
75
+ if (this.options.headers) headers = Object.assign(headers, this.options.headers);
76
+ // Delete all headers if undefined
77
+ for (const [key, value] of Object.entries(headers)) {
78
+ if (value === undefined) delete headers[key];
79
+ }
80
+ if (this.options.webhook === true) {
81
+ headers = {
82
+ 'User-Agent': this.client.options.http.headers['User-Agent'],
83
+ };
84
+ }
85
+
86
+ let body;
87
+ if (this.options.files?.length) {
88
+ body = new FormData();
89
+ for (const [index, file] of this.options.files.entries()) {
90
+ if (file?.file) body.append(file.key ?? `files[${index}]`, file.file, file.name);
91
+ }
92
+ if (typeof this.options.data !== 'undefined') {
93
+ if (this.options.dontUsePayloadJSON) {
94
+ for (const [key, value] of Object.entries(this.options.data)) body.append(key, value);
95
+ } else {
96
+ body.append('payload_json', JSON.stringify(this.options.data));
97
+ }
98
+ } else if (typeof this.options.body !== 'undefined') {
99
+ if (this.options.dontUsePayloadJSON) {
100
+ for (const [key, value] of Object.entries(this.options.body)) body.append(key, value);
101
+ } else {
102
+ body.append('payload_json', JSON.stringify(this.options.body));
103
+ }
104
+ }
105
+ headers = Object.assign(headers, body.getHeaders());
106
+ // eslint-disable-next-line eqeqeq
107
+ } else if (this.options.data != null) {
108
+ headers['Content-Type'] = 'application/json';
109
+ if (captchaKey && typeof captchaKey == 'string') {
110
+ if (!this.options.data) this.options.data = {};
111
+ // Delete cookie (https://t.me/DMDGOBugsAndFeatures/626) Wtf Unknown Message Error ???
112
+ headers.Cookie = undefined;
113
+ this.options.data.captcha_key = captchaKey;
114
+ if (captchaRqtoken) this.options.data.captcha_rqtoken = captchaRqtoken;
115
+ }
116
+ body = this.options.data ? JSON.stringify(this.options.data) : undefined;
117
+ } else if (this.options.body != null) {
118
+ body = new FormData();
119
+ body.append('payload_json', JSON.stringify(this.options.body));
120
+ headers = Object.assign(headers, body.getHeaders());
121
+ }
122
+
123
+ const controller = new AbortController();
124
+ const timeout = setTimeout(() => controller.abort(), this.client.options.restRequestTimeout).unref();
125
+
126
+ return fetch(url, {
127
+ method: this.method,
128
+ headers,
129
+ agent,
130
+ body,
131
+ signal: controller.signal,
132
+ }).finally(() => clearTimeout(timeout));
133
+ }
134
+ }
135
+
136
+ 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,78 @@
1
+ 'use strict';
2
+
3
+ module.exports = class CaptchaSolver {
4
+ constructor(service, key, defaultCaptchaSolver) {
5
+ this.service = 'custom';
6
+ this.solver = undefined;
7
+ this.defaultCaptchaSolver = defaultCaptchaSolver;
8
+ this.key = null;
9
+ this._setup(service, key);
10
+ }
11
+ _missingModule(name) {
12
+ return new Error(`${name} module not found, please install it with \`npm i ${name}\``);
13
+ }
14
+ _setup(service, key) {
15
+ switch (service) {
16
+ case '2captcha': {
17
+ if (!key || typeof key !== 'string') throw new Error('2captcha key is not provided');
18
+ try {
19
+ const lib = require('2captcha');
20
+ this.service = '2captcha';
21
+ this.key = key;
22
+ this.solver = new lib.Solver(key);
23
+ this.solve = (data, userAgent) =>
24
+ new Promise((resolve, reject) => {
25
+ const siteKey = data.captcha_sitekey;
26
+ const postD = data.captcha_rqdata
27
+ ? {
28
+ data: data.captcha_rqdata,
29
+ userAgent,
30
+ }
31
+ : undefined;
32
+ this.solver
33
+ .hcaptcha(siteKey, 'https://discord.com/channels/@me', postD)
34
+ .then(res => {
35
+ resolve(res.data);
36
+ })
37
+ .catch(reject);
38
+ });
39
+ break;
40
+ } catch (e) {
41
+ throw this._missingModule('2captcha');
42
+ }
43
+ }
44
+ case 'capmonster': {
45
+ if (!key || typeof key !== 'string') throw new Error('Capmonster key is not provided');
46
+ try {
47
+ const { HCaptchaTask } = require('node-capmonster');
48
+ this.service = 'capmonster';
49
+ this.key = key;
50
+ const client = new HCaptchaTask(this.key);
51
+ this.solve = (captchaData, userAgent) =>
52
+ new Promise((resolve, reject) => {
53
+ if (userAgent) client.setUserAgent(userAgent);
54
+ client
55
+ .createWithTask(
56
+ client.task({
57
+ websiteURL: 'https://discord.com/channels/@me',
58
+ websiteKey: captchaData.captcha_sitekey,
59
+ isInvisible: !!captchaData.captcha_rqdata,
60
+ data: captchaData.captcha_rqdata,
61
+ }),
62
+ )
63
+ .then(id => client.joinTaskResult(id))
64
+ .then(result => resolve(result.gRecaptchaResponse))
65
+ .catch(reject);
66
+ });
67
+ } catch (e) {
68
+ throw this._missingModule('node-capmonster');
69
+ }
70
+ break;
71
+ }
72
+ default: {
73
+ this.solve = this.defaultCaptchaSolver;
74
+ }
75
+ }
76
+ }
77
+ solve() {}
78
+ };
@@ -0,0 +1,103 @@
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 | string}
29
+ */
30
+ this.code = error.code;
31
+
32
+ /**
33
+ * The HTTP status code
34
+ * @type {number}
35
+ */
36
+ this.httpStatus = status;
37
+
38
+ /**
39
+ * @typedef {Object} Captcha
40
+ * @property {Array<string>} captcha_key ['message']
41
+ * @property {string} captcha_sitekey Captcha sitekey (hcaptcha)
42
+ * @property {string} captcha_service hcaptcha
43
+ * @property {string} [captcha_rqdata]
44
+ * @property {string} [captcha_rqtoken]
45
+ */
46
+
47
+ /**
48
+ * Captcha response data if the request requires a captcha
49
+ * @type {Captcha | null}
50
+ */
51
+ this.captcha = error?.captcha_service ? error : null;
52
+
53
+ /**
54
+ * The data associated with the request that caused this error
55
+ * @type {HTTPErrorData}
56
+ */
57
+ this.requestData = {
58
+ json: request.options.data,
59
+ files: request.options.files ?? [],
60
+ };
61
+
62
+ /**
63
+ * The number of times this request has been retried
64
+ * @type {number}
65
+ */
66
+ this.retries = request.retries;
67
+ }
68
+
69
+ /**
70
+ * Flattens an errors object returned from the API into an array.
71
+ * @param {APIError} obj Discord errors object
72
+ * @param {string} [key] Used internally to determine key names of nested fields
73
+ * @returns {string[]}
74
+ * @private
75
+ */
76
+ static flattenErrors(obj, key = '') {
77
+ let messages = [];
78
+
79
+ for (const [k, v] of Object.entries(obj)) {
80
+ if (k === 'message') continue;
81
+ const newKey = key ? (isNaN(k) ? `${key}.${k}` : `${key}[${k}]`) : k;
82
+
83
+ if (v._errors) {
84
+ messages.push(`${newKey}: ${v._errors.map(e => e.message).join(' ')}`);
85
+ } else if (v.code ?? v.message) {
86
+ messages.push(`${v.code ? `${v.code}: ` : ''}${v.message}`.trim());
87
+ } else if (typeof v === 'string') {
88
+ messages.push(v);
89
+ } else {
90
+ messages = messages.concat(this.flattenErrors(v, newKey));
91
+ }
92
+ }
93
+
94
+ return messages;
95
+ }
96
+ }
97
+
98
+ module.exports = DiscordAPIError;
99
+
100
+ /**
101
+ * @external APIError
102
+ * @see {@link https://discord.com/developers/docs/reference#error-messages}
103
+ */
@@ -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,81 @@
1
+ 'use strict';
2
+
3
+ const { setInterval } = require('node:timers');
4
+ const { Collection } = require('@discordjs/collection');
5
+ const APIRequest = require('./APIRequest');
6
+ const routeBuilder = require('./APIRouter');
7
+ const CaptchaSolver = require('./CaptchaSolver');
8
+ const RequestHandler = require('./RequestHandler');
9
+ const { Error } = require('../errors');
10
+ const { Endpoints } = require('../util/Constants');
11
+
12
+ class RESTManager {
13
+ constructor(client) {
14
+ this.client = client;
15
+ this.handlers = new Collection();
16
+ this.versioned = true;
17
+ this.globalLimit = client.options.restGlobalRateLimit > 0 ? client.options.restGlobalRateLimit : Infinity;
18
+ this.globalRemaining = this.globalLimit;
19
+ this.globalReset = null;
20
+ this.globalDelay = null;
21
+ if (client.options.restSweepInterval > 0) {
22
+ this.sweepInterval = setInterval(() => {
23
+ this.handlers.sweep(handler => handler._inactive);
24
+ }, client.options.restSweepInterval * 1_000).unref();
25
+ }
26
+ this.captchaService = null;
27
+ this.setup();
28
+ }
29
+
30
+ setup() {
31
+ this.captchaService = new CaptchaSolver(
32
+ this.client.options.captchaService,
33
+ this.client.options.captchaKey,
34
+ this.client.options.captchaSolver,
35
+ );
36
+ }
37
+
38
+ get api() {
39
+ return routeBuilder(this);
40
+ }
41
+
42
+ getAuth() {
43
+ if ((this.client.token && this.client.user && this.client.user.bot) || this.client.accessToken) {
44
+ return `Bot ${this.client.token}`;
45
+ } else if (this.client.token) {
46
+ return this.client.token;
47
+ }
48
+ /*
49
+ // v13.7
50
+ const token = this.client.token ?? this.client.accessToken;
51
+ if (token) return `Bot ${token}`;
52
+ */
53
+ throw new Error('TOKEN_MISSING');
54
+ }
55
+
56
+ get cdn() {
57
+ return Endpoints.CDN(this.client.options.http.cdn);
58
+ }
59
+
60
+ request(method, url, options = {}) {
61
+ const apiRequest = new APIRequest(this, method, url, options);
62
+ let handler = this.handlers.get(apiRequest.route);
63
+
64
+ if (!handler) {
65
+ handler = new RequestHandler(this);
66
+ this.handlers.set(apiRequest.route, handler);
67
+ }
68
+
69
+ return handler.push(apiRequest);
70
+ }
71
+
72
+ get endpoint() {
73
+ return this.client.options.http.api;
74
+ }
75
+
76
+ set endpoint(endpoint) {
77
+ this.client.options.http.api = endpoint;
78
+ }
79
+ }
80
+
81
+ module.exports = RESTManager;