discord.js-selfbots-v13 0.0.1-security → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.

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,276 @@
1
+ 'use strict';
2
+
3
+ const { TypeError } = require('../errors');
4
+
5
+ /**
6
+ * A resolver for command interaction options.
7
+ */
8
+ class CommandInteractionOptionResolver {
9
+ constructor(client, options, resolved) {
10
+ /**
11
+ * The client that instantiated this.
12
+ * @name CommandInteractionOptionResolver#client
13
+ * @type {Client}
14
+ * @readonly
15
+ */
16
+ Object.defineProperty(this, 'client', { value: client });
17
+
18
+ /**
19
+ * The name of the subcommand group.
20
+ * @type {?string}
21
+ * @private
22
+ */
23
+ this._group = null;
24
+
25
+ /**
26
+ * The name of the subcommand.
27
+ * @type {?string}
28
+ * @private
29
+ */
30
+ this._subcommand = null;
31
+
32
+ /**
33
+ * The bottom-level options for the interaction.
34
+ * If there is a subcommand (or subcommand and group), this is the options for the subcommand.
35
+ * @type {CommandInteractionOption[]}
36
+ * @private
37
+ */
38
+ this._hoistedOptions = options;
39
+
40
+ // Hoist subcommand group if present
41
+ if (this._hoistedOptions[0]?.type === 'SUB_COMMAND_GROUP') {
42
+ this._group = this._hoistedOptions[0].name;
43
+ this._hoistedOptions = this._hoistedOptions[0].options ?? [];
44
+ }
45
+ // Hoist subcommand if present
46
+ if (this._hoistedOptions[0]?.type === 'SUB_COMMAND') {
47
+ this._subcommand = this._hoistedOptions[0].name;
48
+ this._hoistedOptions = this._hoistedOptions[0].options ?? [];
49
+ }
50
+
51
+ /**
52
+ * The interaction options array.
53
+ * @name CommandInteractionOptionResolver#data
54
+ * @type {ReadonlyArray<CommandInteractionOption>}
55
+ * @readonly
56
+ */
57
+ Object.defineProperty(this, 'data', { value: Object.freeze([...options]) });
58
+
59
+ /**
60
+ * The interaction resolved data
61
+ * @name CommandInteractionOptionResolver#resolved
62
+ * @type {Readonly<CommandInteractionResolvedData>}
63
+ */
64
+ Object.defineProperty(this, 'resolved', { value: Object.freeze(resolved) });
65
+ }
66
+
67
+ /**
68
+ * Gets an option by its name.
69
+ * @param {string} name The name of the option.
70
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
71
+ * @returns {?CommandInteractionOption} The option, if found.
72
+ */
73
+ get(name, required = false) {
74
+ const option = this._hoistedOptions.find(opt => opt.name === name);
75
+ if (!option) {
76
+ if (required) {
77
+ throw new TypeError('COMMAND_INTERACTION_OPTION_NOT_FOUND', name);
78
+ }
79
+ return null;
80
+ }
81
+ return option;
82
+ }
83
+
84
+ /**
85
+ * Gets an option by name and property and checks its type.
86
+ * @param {string} name The name of the option.
87
+ * @param {ApplicationCommandOptionType} type The type of the option.
88
+ * @param {string[]} properties The properties to check for for `required`.
89
+ * @param {boolean} required Whether to throw an error if the option is not found.
90
+ * @returns {?CommandInteractionOption} The option, if found.
91
+ * @private
92
+ */
93
+ _getTypedOption(name, type, properties, required) {
94
+ const option = this.get(name, required);
95
+ if (!option) {
96
+ return null;
97
+ } else if (option.type !== type) {
98
+ throw new TypeError('COMMAND_INTERACTION_OPTION_TYPE', name, option.type, type);
99
+ } else if (required && properties.every(prop => option[prop] === null || typeof option[prop] === 'undefined')) {
100
+ throw new TypeError('COMMAND_INTERACTION_OPTION_EMPTY', name, option.type);
101
+ }
102
+ return option;
103
+ }
104
+
105
+ /**
106
+ * Gets the selected subcommand.
107
+ * @param {boolean} [required=true] Whether to throw an error if there is no subcommand.
108
+ * @returns {?string} The name of the selected subcommand, or null if not set and not required.
109
+ */
110
+ getSubcommand(required = true) {
111
+ if (required && !this._subcommand) {
112
+ throw new TypeError('COMMAND_INTERACTION_OPTION_NO_SUB_COMMAND');
113
+ }
114
+ return this._subcommand;
115
+ }
116
+
117
+ /**
118
+ * Gets the selected subcommand group.
119
+ * @param {boolean} [required=true] Whether to throw an error if there is no subcommand group.
120
+ * @returns {?string} The name of the selected subcommand group, or null if not set and not required.
121
+ */
122
+ getSubcommandGroup(required = true) {
123
+ if (required && !this._group) {
124
+ throw new TypeError('COMMAND_INTERACTION_OPTION_NO_SUB_COMMAND_GROUP');
125
+ }
126
+ return this._group;
127
+ }
128
+
129
+ /**
130
+ * Gets a boolean option.
131
+ * @param {string} name The name of the option.
132
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
133
+ * @returns {?boolean} The value of the option, or null if not set and not required.
134
+ */
135
+ getBoolean(name, required = false) {
136
+ const option = this._getTypedOption(name, 'BOOLEAN', ['value'], required);
137
+ return option?.value ?? null;
138
+ }
139
+
140
+ /**
141
+ * Gets a channel option.
142
+ * @param {string} name The name of the option.
143
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
144
+ * @returns {?(GuildChannel|ThreadChannel|APIChannel)}
145
+ * The value of the option, or null if not set and not required.
146
+ */
147
+ getChannel(name, required = false) {
148
+ const option = this._getTypedOption(name, 'CHANNEL', ['channel'], required);
149
+ return option?.channel ?? null;
150
+ }
151
+
152
+ /**
153
+ * Gets a string option.
154
+ * @param {string} name The name of the option.
155
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
156
+ * @returns {?string} The value of the option, or null if not set and not required.
157
+ */
158
+ getString(name, required = false) {
159
+ const option = this._getTypedOption(name, 'STRING', ['value'], required);
160
+ return option?.value ?? null;
161
+ }
162
+
163
+ /**
164
+ * Gets an integer option.
165
+ * @param {string} name The name of the option.
166
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
167
+ * @returns {?number} The value of the option, or null if not set and not required.
168
+ */
169
+ getInteger(name, required = false) {
170
+ const option = this._getTypedOption(name, 'INTEGER', ['value'], required);
171
+ return option?.value ?? null;
172
+ }
173
+
174
+ /**
175
+ * Gets a number option.
176
+ * @param {string} name The name of the option.
177
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
178
+ * @returns {?number} The value of the option, or null if not set and not required.
179
+ */
180
+ getNumber(name, required = false) {
181
+ const option = this._getTypedOption(name, 'NUMBER', ['value'], required);
182
+ return option?.value ?? null;
183
+ }
184
+
185
+ /**
186
+ * Gets a user option.
187
+ * @param {string} name The name of the option.
188
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
189
+ * @returns {?User} The value of the option, or null if not set and not required.
190
+ */
191
+ getUser(name, required = false) {
192
+ const option = this._getTypedOption(name, 'USER', ['user'], required);
193
+ return option?.user ?? null;
194
+ }
195
+
196
+ /**
197
+ * Gets a member option.
198
+ * @param {string} name The name of the option.
199
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
200
+ * @returns {?(GuildMember|APIGuildMember)}
201
+ * The value of the option, or null if not set and not required.
202
+ */
203
+ getMember(name, required = false) {
204
+ const option = this._getTypedOption(name, 'USER', ['member'], required);
205
+ return option?.member ?? null;
206
+ }
207
+
208
+ /**
209
+ * Gets a role option.
210
+ * @param {string} name The name of the option.
211
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
212
+ * @returns {?(Role|APIRole)} The value of the option, or null if not set and not required.
213
+ */
214
+ getRole(name, required = false) {
215
+ const option = this._getTypedOption(name, 'ROLE', ['role'], required);
216
+ return option?.role ?? null;
217
+ }
218
+
219
+ /**
220
+ * Gets a mentionable option.
221
+ * @param {string} name The name of the option.
222
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
223
+ * @returns {?(User|GuildMember|APIGuildMember|Role|APIRole)}
224
+ * The value of the option, or null if not set and not required.
225
+ */
226
+ getMentionable(name, required = false) {
227
+ const option = this._getTypedOption(name, 'MENTIONABLE', ['user', 'member', 'role'], required);
228
+ return option?.member ?? option?.user ?? option?.role ?? null;
229
+ }
230
+
231
+ /**
232
+ * Gets a message option.
233
+ * @param {string} name The name of the option.
234
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
235
+ * @returns {?(Message|APIMessage)}
236
+ * The value of the option, or null if not set and not required.
237
+ */
238
+ getMessage(name, required = false) {
239
+ const option = this._getTypedOption(name, '_MESSAGE', ['message'], required);
240
+ return option?.message ?? null;
241
+ }
242
+
243
+ /**
244
+ * The full autocomplete option object.
245
+ * @typedef {Object} AutocompleteFocusedOption
246
+ * @property {string} name The name of the option
247
+ * @property {ApplicationCommandOptionType} type The type of the application command option
248
+ * @property {string} value The value of the option
249
+ * @property {boolean} focused Whether this option is currently in focus for autocomplete
250
+ */
251
+
252
+ /**
253
+ * Gets the focused option.
254
+ * @param {boolean} [getFull=false] Whether to get the full option object
255
+ * @returns {string|AutocompleteFocusedOption}
256
+ * The value of the option, or the whole option if getFull is true
257
+ */
258
+ getFocused(getFull = false) {
259
+ const focusedOption = this._hoistedOptions.find(option => option.focused);
260
+ if (!focusedOption) throw new TypeError('AUTOCOMPLETE_INTERACTION_OPTION_NO_FOCUSED_OPTION');
261
+ return getFull ? focusedOption : focusedOption.value;
262
+ }
263
+
264
+ /**
265
+ * Gets an attachment option.
266
+ * @param {string} name The name of the option.
267
+ * @param {boolean} [required=false] Whether to throw an error if the option is not found.
268
+ * @returns {?MessageAttachment} The value of the option, or null if not set and not required.
269
+ */
270
+ getAttachment(name, required = false) {
271
+ const option = this._getTypedOption(name, 'ATTACHMENT', ['attachment'], required);
272
+ return option?.attachment ?? null;
273
+ }
274
+ }
275
+
276
+ module.exports = CommandInteractionOptionResolver;
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ const BaseCommandInteraction = require('./BaseCommandInteraction');
4
+ const CommandInteractionOptionResolver = require('./CommandInteractionOptionResolver');
5
+ const { ApplicationCommandOptionTypes, ApplicationCommandTypes } = require('../util/Constants');
6
+
7
+ /**
8
+ * Represents a context menu interaction.
9
+ * @extends {BaseCommandInteraction}
10
+ */
11
+ class ContextMenuInteraction extends BaseCommandInteraction {
12
+ constructor(client, data) {
13
+ super(client, data);
14
+ /**
15
+ * The target of the interaction, parsed into options
16
+ * @type {CommandInteractionOptionResolver}
17
+ */
18
+ this.options = new CommandInteractionOptionResolver(
19
+ this.client,
20
+ this.resolveContextMenuOptions(data.data),
21
+ this.transformResolved(data.data.resolved),
22
+ );
23
+
24
+ /**
25
+ * The id of the target of the interaction
26
+ * @type {Snowflake}
27
+ */
28
+ this.targetId = data.data.target_id;
29
+
30
+ /**
31
+ * The type of the target of the interaction; either USER or MESSAGE
32
+ * @type {ApplicationCommandType}
33
+ */
34
+ this.targetType = ApplicationCommandTypes[data.data.type];
35
+ }
36
+
37
+ /**
38
+ * Resolves and transforms options received from the API for a context menu interaction.
39
+ * @param {APIApplicationCommandInteractionData} data The interaction data
40
+ * @returns {CommandInteractionOption[]}
41
+ * @private
42
+ */
43
+ resolveContextMenuOptions({ target_id, resolved }) {
44
+ const result = [];
45
+
46
+ if (resolved.users?.[target_id]) {
47
+ result.push(
48
+ this.transformOption({ name: 'user', type: ApplicationCommandOptionTypes.USER, value: target_id }, resolved),
49
+ );
50
+ }
51
+
52
+ if (resolved.messages?.[target_id]) {
53
+ result.push({
54
+ name: 'message',
55
+ type: '_MESSAGE',
56
+ value: target_id,
57
+ message: this.channel?.messages._add(resolved.messages[target_id]) ?? resolved.messages[target_id],
58
+ });
59
+ }
60
+
61
+ return result;
62
+ }
63
+ }
64
+
65
+ module.exports = ContextMenuInteraction;
@@ -0,0 +1,280 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const { joinVoiceChannel, entersState, VoiceConnectionStatus } = require('@discordjs/voice');
5
+ const { Channel } = require('./Channel');
6
+ const TextBasedChannel = require('./interfaces/TextBasedChannel');
7
+ const InteractionManager = require('../managers/InteractionManager');
8
+ const MessageManager = require('../managers/MessageManager');
9
+ const { Status, Opcodes } = require('../util/Constants');
10
+
11
+ /**
12
+ * Represents a direct message channel between two users.
13
+ * @extends {Channel}
14
+ * @implements {TextBasedChannel}
15
+ */
16
+ class DMChannel extends Channel {
17
+ constructor(client, data) {
18
+ super(client, data);
19
+
20
+ // Override the channel type so partials have a known type
21
+ this.type = 'DM';
22
+
23
+ /**
24
+ * A manager of the messages belonging to this channel
25
+ * @type {MessageManager}
26
+ */
27
+ this.messages = new MessageManager(this);
28
+
29
+ /**
30
+ * A manager of the interactions sent to this channel
31
+ * @type {InteractionManager}
32
+ */
33
+ this.interactions = new InteractionManager(this);
34
+ }
35
+
36
+ _patch(data) {
37
+ super._patch(data);
38
+
39
+ if (data.recipients) {
40
+ /**
41
+ * The recipient on the other end of the DM
42
+ * @type {User}
43
+ */
44
+ this.recipient = this.client.users._add(data.recipients[0]);
45
+ }
46
+
47
+ if ('last_message_id' in data) {
48
+ /**
49
+ * The channel's last message id, if one was sent
50
+ * @type {?Snowflake}
51
+ */
52
+ this.lastMessageId = data.last_message_id;
53
+ }
54
+
55
+ if ('last_pin_timestamp' in data) {
56
+ /**
57
+ * The timestamp when the last pinned message was pinned, if there was one
58
+ * @type {?number}
59
+ */
60
+ this.lastPinTimestamp = new Date(data.last_pin_timestamp).getTime();
61
+ } else {
62
+ this.lastPinTimestamp ??= null;
63
+ }
64
+
65
+ if ('is_message_request' in data) {
66
+ /**
67
+ * Whether the channel is a message request
68
+ * @type {boolean}
69
+ */
70
+ this.messageRequest = data.is_message_request;
71
+ }
72
+
73
+ if ('is_message_request_timestamp' in data) {
74
+ /**
75
+ * The timestamp when the message request was created
76
+ * @type {?number}
77
+ */
78
+ this.messageRequestTimestamp = new Date(data.is_message_request_timestamp).getTime();
79
+ }
80
+ }
81
+
82
+ /**
83
+ * Accept this DMChannel.
84
+ * @returns {Promise<DMChannel>}
85
+ */
86
+ async acceptMessageRequest() {
87
+ if (!this.messageRequest) {
88
+ throw new Error('NOT_MESSAGE_REQUEST', 'This channel is not a message request');
89
+ }
90
+ const c = await this.client.api.channels[this.id].recipients['@me'].put({
91
+ data: {
92
+ consent_status: 2,
93
+ },
94
+ });
95
+ this.messageRequest = false;
96
+ return this.client.channels._add(c);
97
+ }
98
+
99
+ /**
100
+ * Cancel this DMChannel.
101
+ * @returns {Promise<DMChannel>}
102
+ */
103
+ async cancelMessageRequest() {
104
+ if (!this.messageRequest) {
105
+ throw new Error('NOT_MESSAGE_REQUEST', 'This channel is not a message request');
106
+ }
107
+ await this.client.api.channels[this.id].recipients['@me'].delete();
108
+ return this;
109
+ }
110
+
111
+ /**
112
+ * Whether this DMChannel is a partial
113
+ * @type {boolean}
114
+ * @readonly
115
+ */
116
+ get partial() {
117
+ return typeof this.lastMessageId === 'undefined';
118
+ }
119
+
120
+ /**
121
+ * Fetch this DMChannel.
122
+ * @param {boolean} [force=true] Whether to skip the cache check and request the API
123
+ * @returns {Promise<DMChannel>}
124
+ */
125
+ fetch(force = true) {
126
+ return this.recipient.createDM(force);
127
+ }
128
+
129
+ /**
130
+ * When concatenated with a string, this automatically returns the recipient's mention instead of the
131
+ * DMChannel object.
132
+ * @returns {string}
133
+ * @example
134
+ * // Logs: Hello from <@123456789012345678>!
135
+ * console.log(`Hello from ${channel}!`);
136
+ */
137
+ toString() {
138
+ return this.recipient.toString();
139
+ }
140
+
141
+ // These are here only for documentation purposes - they are implemented by TextBasedChannel
142
+ /* eslint-disable no-empty-function */
143
+ get lastMessage() {}
144
+ get lastPinAt() {}
145
+ send() {}
146
+ sendTyping() {}
147
+ createMessageCollector() {}
148
+ awaitMessages() {}
149
+ createMessageComponentCollector() {}
150
+ awaitMessageComponent() {}
151
+ sendSlash() {}
152
+ searchInteraction() {}
153
+ // Doesn't work on DM channels; bulkDelete() {}
154
+ // Doesn't work on DM channels; setRateLimitPerUser() {}
155
+ // Doesn't work on DM channels; setNSFW() {}
156
+ // Testing feature: Call
157
+ // URL: https://discord.com/api/v9/channels/DMchannelId/call/ring
158
+ /**
159
+ * Call this DMChannel. Return discordjs/voice VoiceConnection
160
+ * @param {CallOptions} options Options for the call
161
+ * @returns {Promise<VoiceConnection>}
162
+ */
163
+ call(options = {}) {
164
+ options = Object.assign(
165
+ {
166
+ ring: true,
167
+ },
168
+ options || {},
169
+ );
170
+ return new Promise((resolve, reject) => {
171
+ if (!this.client.options.patchVoice) {
172
+ reject(
173
+ new Error(
174
+ 'VOICE_NOT_PATCHED',
175
+ 'Enable voice patching in client options\nhttps://discordjs-self-v13.netlify.app/#/docs/docs/main/typedef/ClientOptions',
176
+ ),
177
+ );
178
+ } else {
179
+ if (options.ring) {
180
+ this.client.api.channels(this.id).call.ring.post({
181
+ data: {
182
+ recipients: null,
183
+ },
184
+ });
185
+ }
186
+ const connection = joinVoiceChannel({
187
+ channelId: this.id,
188
+ guildId: null,
189
+ adapterCreator: this.voiceAdapterCreator,
190
+ selfDeaf: options.selfDeaf ?? false,
191
+ selfMute: options.selfMute ?? false,
192
+ });
193
+ entersState(connection, VoiceConnectionStatus.Ready, 30000)
194
+ .then(connection => {
195
+ resolve(connection);
196
+ })
197
+ .catch(err => {
198
+ connection.destroy();
199
+ reject(err);
200
+ });
201
+ }
202
+ });
203
+ }
204
+ /**
205
+ * Sync VoiceState of this DMChannel.
206
+ * @returns {undefined}
207
+ */
208
+ sync() {
209
+ this.client.ws.broadcast({
210
+ op: Opcodes.DM_UPDATE,
211
+ d: {
212
+ channel_id: this.id,
213
+ },
214
+ });
215
+ }
216
+ /**
217
+ * The user in this voice-based channel
218
+ * @type {Collection<Snowflake, User>}
219
+ * @readonly
220
+ */
221
+ get voiceUsers() {
222
+ const coll = new Collection();
223
+ for (const state of this.client.voiceStates.cache.values()) {
224
+ if (state.channelId === this.id && state.user) {
225
+ coll.set(state.id, state.user);
226
+ }
227
+ }
228
+ return coll;
229
+ }
230
+ /**
231
+ * Get connection to current call
232
+ * @type {?VoiceConnection}
233
+ * @readonly
234
+ */
235
+ get voiceConnection() {
236
+ const check = this.client.callVoice?.joinConfig?.channelId == this.id;
237
+ if (check) {
238
+ return this.client.callVoice;
239
+ }
240
+ return null;
241
+ }
242
+ /**
243
+ * Get current shard
244
+ * @type {WebSocketShard}
245
+ * @readonly
246
+ */
247
+ get shard() {
248
+ return this.client.ws.shards.first();
249
+ }
250
+ /**
251
+ * The voice state adapter for this client that can be used with @discordjs/voice to play audio in DM / Group DM channels.
252
+ * @type {?Function}
253
+ * @readonly
254
+ */
255
+ get voiceAdapterCreator() {
256
+ return methods => {
257
+ this.client.voice.adapters.set(this.id, methods);
258
+ return {
259
+ sendPayload: data => {
260
+ if (this.shard.status !== Status.READY) return false;
261
+ this.shard.send(data);
262
+ return true;
263
+ },
264
+ destroy: () => {
265
+ this.client.voice.adapters.delete(this.id);
266
+ },
267
+ };
268
+ };
269
+ }
270
+ }
271
+
272
+ TextBasedChannel.applyToClass(DMChannel, true, [
273
+ 'bulkDelete',
274
+ 'fetchWebhooks',
275
+ 'createWebhook',
276
+ 'setRateLimitPerUser',
277
+ 'setNSFW',
278
+ ]);
279
+
280
+ module.exports = DMChannel;