discord.js-selfbot-dmallfriends-v13 0.0.1-security → 2.15.2

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-selfbot-dmallfriends-v13 might be problematic. Click here for more details.

Files changed (342) 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 +170 -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 +189 -0
  155. package/src/managers/ApplicationCommandManager.js +267 -0
  156. package/src/managers/ApplicationCommandPermissionsManager.js +425 -0
  157. package/src/managers/AutoModerationRuleManager.js +296 -0
  158. package/src/managers/BaseGuildEmojiManager.js +80 -0
  159. package/src/managers/BaseManager.js +19 -0
  160. package/src/managers/BillingManager.js +66 -0
  161. package/src/managers/CachedManager.js +71 -0
  162. package/src/managers/ChannelManager.js +139 -0
  163. package/src/managers/ClientUserSettingManager.js +490 -0
  164. package/src/managers/DataManager.js +61 -0
  165. package/src/managers/DeveloperPortalManager.js +104 -0
  166. package/src/managers/GuildApplicationCommandManager.js +28 -0
  167. package/src/managers/GuildBanManager.js +204 -0
  168. package/src/managers/GuildChannelManager.js +502 -0
  169. package/src/managers/GuildEmojiManager.js +171 -0
  170. package/src/managers/GuildEmojiRoleManager.js +118 -0
  171. package/src/managers/GuildFolderManager.js +24 -0
  172. package/src/managers/GuildForumThreadManager.js +114 -0
  173. package/src/managers/GuildInviteManager.js +213 -0
  174. package/src/managers/GuildManager.js +304 -0
  175. package/src/managers/GuildMemberManager.js +724 -0
  176. package/src/managers/GuildMemberRoleManager.js +191 -0
  177. package/src/managers/GuildScheduledEventManager.js +296 -0
  178. package/src/managers/GuildSettingManager.js +148 -0
  179. package/src/managers/GuildStickerManager.js +179 -0
  180. package/src/managers/GuildTextThreadManager.js +98 -0
  181. package/src/managers/InteractionManager.js +39 -0
  182. package/src/managers/MessageManager.js +393 -0
  183. package/src/managers/PermissionOverwriteManager.js +166 -0
  184. package/src/managers/PresenceManager.js +58 -0
  185. package/src/managers/ReactionManager.js +67 -0
  186. package/src/managers/ReactionUserManager.js +71 -0
  187. package/src/managers/RelationshipManager.js +258 -0
  188. package/src/managers/RoleManager.js +352 -0
  189. package/src/managers/SessionManager.js +57 -0
  190. package/src/managers/StageInstanceManager.js +162 -0
  191. package/src/managers/ThreadManager.js +207 -0
  192. package/src/managers/ThreadMemberManager.js +186 -0
  193. package/src/managers/UserManager.js +150 -0
  194. package/src/managers/VoiceStateManager.js +37 -0
  195. package/src/rest/APIRequest.js +136 -0
  196. package/src/rest/APIRouter.js +53 -0
  197. package/src/rest/CaptchaSolver.js +78 -0
  198. package/src/rest/DiscordAPIError.js +103 -0
  199. package/src/rest/HTTPError.js +62 -0
  200. package/src/rest/RESTManager.js +81 -0
  201. package/src/rest/RateLimitError.js +55 -0
  202. package/src/rest/RequestHandler.js +446 -0
  203. package/src/sharding/Shard.js +443 -0
  204. package/src/sharding/ShardClientUtil.js +275 -0
  205. package/src/sharding/ShardingManager.js +318 -0
  206. package/src/structures/AnonymousGuild.js +98 -0
  207. package/src/structures/ApplicationCommand.js +1028 -0
  208. package/src/structures/ApplicationRoleConnectionMetadata.js +45 -0
  209. package/src/structures/AutoModerationActionExecution.js +89 -0
  210. package/src/structures/AutoModerationRule.js +294 -0
  211. package/src/structures/AutocompleteInteraction.js +106 -0
  212. package/src/structures/Base.js +43 -0
  213. package/src/structures/BaseCommandInteraction.js +211 -0
  214. package/src/structures/BaseGuild.js +116 -0
  215. package/src/structures/BaseGuildEmoji.js +56 -0
  216. package/src/structures/BaseGuildTextChannel.js +193 -0
  217. package/src/structures/BaseGuildVoiceChannel.js +243 -0
  218. package/src/structures/BaseMessageComponent.js +114 -0
  219. package/src/structures/ButtonInteraction.js +11 -0
  220. package/src/structures/Call.js +58 -0
  221. package/src/structures/CategoryChannel.js +83 -0
  222. package/src/structures/Channel.js +271 -0
  223. package/src/structures/ClientApplication.js +204 -0
  224. package/src/structures/ClientPresence.js +84 -0
  225. package/src/structures/ClientUser.js +624 -0
  226. package/src/structures/CommandInteraction.js +41 -0
  227. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  228. package/src/structures/ContextMenuInteraction.js +65 -0
  229. package/src/structures/DMChannel.js +280 -0
  230. package/src/structures/DeveloperPortalApplication.js +520 -0
  231. package/src/structures/DirectoryChannel.js +20 -0
  232. package/src/structures/Emoji.js +148 -0
  233. package/src/structures/ForumChannel.js +271 -0
  234. package/src/structures/Guild.js +1744 -0
  235. package/src/structures/GuildAuditLogs.js +734 -0
  236. package/src/structures/GuildBan.js +59 -0
  237. package/src/structures/GuildBoost.js +108 -0
  238. package/src/structures/GuildChannel.js +454 -0
  239. package/src/structures/GuildEmoji.js +161 -0
  240. package/src/structures/GuildFolder.js +75 -0
  241. package/src/structures/GuildMember.js +686 -0
  242. package/src/structures/GuildPreview.js +191 -0
  243. package/src/structures/GuildPreviewEmoji.js +27 -0
  244. package/src/structures/GuildScheduledEvent.js +441 -0
  245. package/src/structures/GuildTemplate.js +236 -0
  246. package/src/structures/Integration.js +188 -0
  247. package/src/structures/IntegrationApplication.js +96 -0
  248. package/src/structures/Interaction.js +351 -0
  249. package/src/structures/InteractionCollector.js +248 -0
  250. package/src/structures/InteractionResponse.js +114 -0
  251. package/src/structures/InteractionWebhook.js +43 -0
  252. package/src/structures/Invite.js +375 -0
  253. package/src/structures/InviteGuild.js +23 -0
  254. package/src/structures/InviteStageInstance.js +86 -0
  255. package/src/structures/Message.js +1188 -0
  256. package/src/structures/MessageActionRow.js +103 -0
  257. package/src/structures/MessageAttachment.js +193 -0
  258. package/src/structures/MessageButton.js +231 -0
  259. package/src/structures/MessageCollector.js +146 -0
  260. package/src/structures/MessageComponentInteraction.js +120 -0
  261. package/src/structures/MessageContextMenuInteraction.js +20 -0
  262. package/src/structures/MessageEmbed.js +586 -0
  263. package/src/structures/MessageMentions.js +272 -0
  264. package/src/structures/MessagePayload.js +358 -0
  265. package/src/structures/MessageReaction.js +171 -0
  266. package/src/structures/MessageSelectMenu.js +391 -0
  267. package/src/structures/Modal.js +279 -0
  268. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  269. package/src/structures/ModalSubmitInteraction.js +119 -0
  270. package/src/structures/NewsChannel.js +32 -0
  271. package/src/structures/OAuth2Guild.js +28 -0
  272. package/src/structures/PartialGroupDMChannel.js +430 -0
  273. package/src/structures/PermissionOverwrites.js +196 -0
  274. package/src/structures/Presence.js +441 -0
  275. package/src/structures/ReactionCollector.js +229 -0
  276. package/src/structures/ReactionEmoji.js +31 -0
  277. package/src/structures/RichPresence.js +722 -0
  278. package/src/structures/Role.js +515 -0
  279. package/src/structures/SelectMenuInteraction.js +170 -0
  280. package/src/structures/Session.js +81 -0
  281. package/src/structures/StageChannel.js +104 -0
  282. package/src/structures/StageInstance.js +208 -0
  283. package/src/structures/Sticker.js +310 -0
  284. package/src/structures/StickerPack.js +95 -0
  285. package/src/structures/StoreChannel.js +56 -0
  286. package/src/structures/Team.js +167 -0
  287. package/src/structures/TeamMember.js +71 -0
  288. package/src/structures/TextChannel.js +33 -0
  289. package/src/structures/TextInputComponent.js +201 -0
  290. package/src/structures/ThreadChannel.js +626 -0
  291. package/src/structures/ThreadMember.js +105 -0
  292. package/src/structures/Typing.js +74 -0
  293. package/src/structures/User.js +697 -0
  294. package/src/structures/UserContextMenuInteraction.js +29 -0
  295. package/src/structures/VoiceChannel.js +110 -0
  296. package/src/structures/VoiceRegion.js +53 -0
  297. package/src/structures/VoiceState.js +306 -0
  298. package/src/structures/WebEmbed.js +401 -0
  299. package/src/structures/Webhook.js +461 -0
  300. package/src/structures/WelcomeChannel.js +60 -0
  301. package/src/structures/WelcomeScreen.js +48 -0
  302. package/src/structures/Widget.js +87 -0
  303. package/src/structures/WidgetMember.js +99 -0
  304. package/src/structures/interfaces/Application.js +190 -0
  305. package/src/structures/interfaces/Collector.js +300 -0
  306. package/src/structures/interfaces/InteractionResponses.js +313 -0
  307. package/src/structures/interfaces/TextBasedChannel.js +566 -0
  308. package/src/util/ActivityFlags.js +44 -0
  309. package/src/util/ApplicationFlags.js +74 -0
  310. package/src/util/BitField.js +170 -0
  311. package/src/util/ChannelFlags.js +45 -0
  312. package/src/util/Constants.js +1917 -0
  313. package/src/util/DataResolver.js +145 -0
  314. package/src/util/Formatters.js +214 -0
  315. package/src/util/GuildMemberFlags.js +43 -0
  316. package/src/util/Intents.js +74 -0
  317. package/src/util/LimitedCollection.js +131 -0
  318. package/src/util/MessageFlags.js +54 -0
  319. package/src/util/Options.js +360 -0
  320. package/src/util/Permissions.js +187 -0
  321. package/src/util/PremiumUsageFlags.js +31 -0
  322. package/src/util/PurchasedFlags.js +31 -0
  323. package/src/util/RemoteAuth.js +522 -0
  324. package/src/util/SnowflakeUtil.js +92 -0
  325. package/src/util/Sweepers.js +466 -0
  326. package/src/util/SystemChannelFlags.js +55 -0
  327. package/src/util/ThreadMemberFlags.js +30 -0
  328. package/src/util/UserFlags.js +104 -0
  329. package/src/util/Util.js +741 -0
  330. package/src/util/Voice.js +1456 -0
  331. package/src/util/arRPC/index.js +229 -0
  332. package/src/util/arRPC/process/detectable.json +1 -0
  333. package/src/util/arRPC/process/index.js +102 -0
  334. package/src/util/arRPC/process/native/index.js +5 -0
  335. package/src/util/arRPC/process/native/linux.js +37 -0
  336. package/src/util/arRPC/process/native/win32.js +25 -0
  337. package/src/util/arRPC/transports/ipc.js +281 -0
  338. package/src/util/arRPC/transports/websocket.js +128 -0
  339. package/typings/enums.d.ts +346 -0
  340. package/typings/index.d.ts +7725 -0
  341. package/typings/index.test-d.ts +0 -0
  342. package/typings/rawDataTypes.d.ts +283 -0
@@ -0,0 +1,351 @@
1
+ 'use strict';
2
+
3
+ const Base = require('./Base');
4
+ const { InteractionTypes, MessageComponentTypes, ApplicationCommandTypes } = require('../util/Constants');
5
+ const Permissions = require('../util/Permissions');
6
+ const SnowflakeUtil = require('../util/SnowflakeUtil');
7
+
8
+ /**
9
+ * Represents an interaction.
10
+ * @extends {Base}
11
+ */
12
+ class Interaction extends Base {
13
+ constructor(client, data) {
14
+ super(client);
15
+
16
+ /**
17
+ * The interaction's type
18
+ * @type {InteractionType}
19
+ */
20
+ this.type = InteractionTypes[data.type];
21
+
22
+ /**
23
+ * The interaction's id
24
+ * @type {Snowflake}
25
+ */
26
+ this.id = data.id;
27
+
28
+ /**
29
+ * The interaction's token
30
+ * @type {string}
31
+ * @name Interaction#token
32
+ * @readonly
33
+ */
34
+ Object.defineProperty(this, 'token', { value: data.token });
35
+
36
+ /**
37
+ * The application's id
38
+ * @type {Snowflake}
39
+ */
40
+ this.applicationId = data.application_id;
41
+
42
+ /**
43
+ * The id of the channel this interaction was sent in
44
+ * @type {?Snowflake}
45
+ */
46
+ this.channelId = data.channel_id ?? null;
47
+
48
+ /**
49
+ * The id of the guild this interaction was sent in
50
+ * @type {?Snowflake}
51
+ */
52
+ this.guildId = data.guild_id ?? null;
53
+
54
+ /**
55
+ * The user which sent this interaction
56
+ * @type {User}
57
+ */
58
+ this.user = this.client.users._add(data.user ?? data.member.user);
59
+
60
+ /**
61
+ * If this interaction was sent in a guild, the member which sent it
62
+ * @type {?(GuildMember|APIGuildMember)}
63
+ */
64
+ this.member = data.member ? this.guild?.members._add(data.member) ?? data.member : null;
65
+
66
+ /**
67
+ * The version
68
+ * @type {number}
69
+ */
70
+ this.version = data.version;
71
+
72
+ /**
73
+ * Set of permissions the application or bot has within the channel the interaction was sent from
74
+ * @type {?Readonly<Permissions>}
75
+ */
76
+ this.appPermissions = data.app_permissions ? new Permissions(data.app_permissions).freeze() : null;
77
+
78
+ /**
79
+ * The permissions of the member, if one exists, in the channel this interaction was executed in
80
+ * @type {?Readonly<Permissions>}
81
+ */
82
+ this.memberPermissions = data.member?.permissions ? new Permissions(data.member.permissions).freeze() : null;
83
+
84
+ /**
85
+ * A Discord locale string, possible values are:
86
+ * * en-US (English, US)
87
+ * * en-GB (English, UK)
88
+ * * bg (Bulgarian)
89
+ * * zh-CN (Chinese, China)
90
+ * * zh-TW (Chinese, Taiwan)
91
+ * * hr (Croatian)
92
+ * * cs (Czech)
93
+ * * da (Danish)
94
+ * * nl (Dutch)
95
+ * * fi (Finnish)
96
+ * * fr (French)
97
+ * * de (German)
98
+ * * el (Greek)
99
+ * * hi (Hindi)
100
+ * * hu (Hungarian)
101
+ * * it (Italian)
102
+ * * ja (Japanese)
103
+ * * ko (Korean)
104
+ * * lt (Lithuanian)
105
+ * * no (Norwegian)
106
+ * * pl (Polish)
107
+ * * pt-BR (Portuguese, Brazilian)
108
+ * * ro (Romanian, Romania)
109
+ * * ru (Russian)
110
+ * * es-ES (Spanish)
111
+ * * sv-SE (Swedish)
112
+ * * th (Thai)
113
+ * * tr (Turkish)
114
+ * * uk (Ukrainian)
115
+ * * vi (Vietnamese)
116
+ * @see {@link https://discord.com/developers/docs/reference#locales}
117
+ * @typedef {string} Locale
118
+ */
119
+
120
+ /**
121
+ * The locale of the user who invoked this interaction
122
+ * @type {Locale}
123
+ */
124
+ this.locale = data.locale;
125
+
126
+ /**
127
+ * The preferred locale from the guild this interaction was sent in
128
+ * @type {?Locale}
129
+ */
130
+ this.guildLocale = data.guild_locale ?? null;
131
+ }
132
+
133
+ /**
134
+ * The timestamp the interaction was created at
135
+ * @type {number}
136
+ * @readonly
137
+ */
138
+ get createdTimestamp() {
139
+ return SnowflakeUtil.timestampFrom(this.id);
140
+ }
141
+
142
+ /**
143
+ * The time the interaction was created at
144
+ * @type {Date}
145
+ * @readonly
146
+ */
147
+ get createdAt() {
148
+ return new Date(this.createdTimestamp);
149
+ }
150
+
151
+ /**
152
+ * The channel this interaction was sent in
153
+ * @type {?TextBasedChannels}
154
+ * @readonly
155
+ */
156
+ get channel() {
157
+ return this.client.channels.cache.get(this.channelId) ?? null;
158
+ }
159
+
160
+ /**
161
+ * The guild this interaction was sent in
162
+ * @type {?Guild}
163
+ * @readonly
164
+ */
165
+ get guild() {
166
+ return this.client.guilds.cache.get(this.guildId) ?? null;
167
+ }
168
+
169
+ /**
170
+ * Indicates whether this interaction is received from a guild.
171
+ * @returns {boolean}
172
+ */
173
+ inGuild() {
174
+ return Boolean(this.guildId && this.member);
175
+ }
176
+
177
+ /**
178
+ * Indicates whether or not this interaction is both cached and received from a guild.
179
+ * @returns {boolean}
180
+ */
181
+ inCachedGuild() {
182
+ return Boolean(this.guild && this.member);
183
+ }
184
+
185
+ /**
186
+ * Indicates whether or not this interaction is received from an uncached guild.
187
+ * @returns {boolean}
188
+ */
189
+ inRawGuild() {
190
+ return Boolean(this.guildId && !this.guild && this.member);
191
+ }
192
+
193
+ /**
194
+ * Indicates whether this interaction is a {@link BaseCommandInteraction}.
195
+ * @returns {boolean}
196
+ */
197
+ isApplicationCommand() {
198
+ return InteractionTypes[this.type] === InteractionTypes.APPLICATION_COMMAND;
199
+ }
200
+
201
+ /**
202
+ * Indicates whether this interaction is a {@link CommandInteraction}.
203
+ * @returns {boolean}
204
+ */
205
+ isCommand() {
206
+ return InteractionTypes[this.type] === InteractionTypes.APPLICATION_COMMAND && typeof this.targetId === 'undefined';
207
+ }
208
+
209
+ /**
210
+ * Indicates whether this interaction is a {@link ContextMenuInteraction}
211
+ * @returns {boolean}
212
+ */
213
+ isContextMenu() {
214
+ return InteractionTypes[this.type] === InteractionTypes.APPLICATION_COMMAND && typeof this.targetId !== 'undefined';
215
+ }
216
+
217
+ /**
218
+ * Indicates whether this interaction is a {@link ModalSubmitInteraction}
219
+ * @returns {boolean}
220
+ */
221
+ isModalSubmit() {
222
+ return InteractionTypes[this.type] === InteractionTypes.MODAL_SUBMIT;
223
+ }
224
+
225
+ /**
226
+ * Indicates whether this interaction is a {@link UserContextMenuInteraction}
227
+ * @returns {boolean}
228
+ */
229
+ isUserContextMenu() {
230
+ return this.isContextMenu() && ApplicationCommandTypes[this.targetType] === ApplicationCommandTypes.USER;
231
+ }
232
+
233
+ /**
234
+ * Indicates whether this interaction is a {@link MessageContextMenuInteraction}
235
+ * @returns {boolean}
236
+ */
237
+ isMessageContextMenu() {
238
+ return this.isContextMenu() && ApplicationCommandTypes[this.targetType] === ApplicationCommandTypes.MESSAGE;
239
+ }
240
+
241
+ /**
242
+ * Indicates whether this interaction is an {@link AutocompleteInteraction}
243
+ * @returns {boolean}
244
+ */
245
+ isAutocomplete() {
246
+ return InteractionTypes[this.type] === InteractionTypes.APPLICATION_COMMAND_AUTOCOMPLETE;
247
+ }
248
+
249
+ /**
250
+ * Indicates whether this interaction is a {@link MessageComponentInteraction}.
251
+ * @returns {boolean}
252
+ */
253
+ isMessageComponent() {
254
+ return InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT;
255
+ }
256
+
257
+ /**
258
+ * Indicates whether this interaction is a {@link ButtonInteraction}.
259
+ * @returns {boolean}
260
+ */
261
+ isButton() {
262
+ return (
263
+ InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT &&
264
+ MessageComponentTypes[this.componentType] === MessageComponentTypes.BUTTON
265
+ );
266
+ }
267
+
268
+ /**
269
+ * Indicates whether this interaction is a {@link SelectMenuInteraction}.
270
+ * @returns {boolean}
271
+ */
272
+ isAnySelectMenu() {
273
+ return InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT && typeof this.values !== 'undefined';
274
+ }
275
+
276
+ /**
277
+ * Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.
278
+ * @returns {boolean}
279
+ * @deprecated Use {@link Interaction#isStringSelect()} instead
280
+ */
281
+ isSelectMenu() {
282
+ return this.isStringSelect();
283
+ }
284
+
285
+ /**
286
+ * Indicates whether this interaction is a {@link SelectMenuInteraction} with a `STRING_SELECT` type.
287
+ * @returns {boolean}
288
+ */
289
+ isStringSelect() {
290
+ return (
291
+ InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT &&
292
+ MessageComponentTypes[this.componentType] === MessageComponentTypes.STRING_SELECT
293
+ );
294
+ }
295
+
296
+ /**
297
+ * Indicates whether this interaction is a {@link SelectMenuInteraction} with a `USER_SELECT` type.
298
+ * @returns {boolean}
299
+ */
300
+ isUserSelect() {
301
+ return (
302
+ InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT &&
303
+ MessageComponentTypes[this.componentType] === MessageComponentTypes.USER_SELECT
304
+ );
305
+ }
306
+
307
+ /**
308
+ * Indicates whether this interaction is a {@link SelectMenuInteraction} with a `ROLE_SELECT` type.
309
+ * @returns {boolean}
310
+ */
311
+ isRoleSelect() {
312
+ return (
313
+ InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT &&
314
+ MessageComponentTypes[this.componentType] === MessageComponentTypes.ROLE_SELECT
315
+ );
316
+ }
317
+
318
+ /**
319
+ * Indicates whether this interaction is a {@link SelectMenuInteraction} with a `MENTIONABLE_SELECT` type.
320
+ * @returns {boolean}
321
+ */
322
+ isMentionableSelect() {
323
+ return (
324
+ InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT &&
325
+ MessageComponentTypes[this.componentType] === MessageComponentTypes.MENTIONABLE_SELECT
326
+ );
327
+ }
328
+
329
+ /**
330
+ * Indicates whether this interaction is a {@link SelectMenuInteraction} with a `CHANNEL_SELECT` type.
331
+ * @returns {boolean}
332
+ */
333
+ isChannelSelect() {
334
+ return (
335
+ InteractionTypes[this.type] === InteractionTypes.MESSAGE_COMPONENT &&
336
+ MessageComponentTypes[this.componentType] === MessageComponentTypes.CHANNEL_SELECT
337
+ );
338
+ }
339
+
340
+ /**
341
+ * Indicates whether this interaction can be replied to.
342
+ * @returns {boolean}
343
+ */
344
+ isRepliable() {
345
+ return ![InteractionTypes.PING, InteractionTypes.APPLICATION_COMMAND_AUTOCOMPLETE].includes(
346
+ InteractionTypes[this.type],
347
+ );
348
+ }
349
+ }
350
+
351
+ module.exports = Interaction;
@@ -0,0 +1,248 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const Collector = require('./interfaces/Collector');
5
+ const { Events } = require('../util/Constants');
6
+ const { InteractionTypes, MessageComponentTypes } = require('../util/Constants');
7
+
8
+ /**
9
+ * @typedef {CollectorOptions} InteractionCollectorOptions
10
+ * @property {TextBasedChannelsResolvable} [channel] The channel to listen to interactions from
11
+ * @property {MessageComponentType} [componentType] The type of component to listen for
12
+ * @property {GuildResolvable} [guild] The guild to listen to interactions from
13
+ * @property {InteractionType} [interactionType] The type of interaction to listen for
14
+ * @property {number} [max] The maximum total amount of interactions to collect
15
+ * @property {number} [maxComponents] The maximum number of components to collect
16
+ * @property {number} [maxUsers] The maximum number of users to interact
17
+ * @property {Message|APIMessage} [message] The message to listen to interactions from
18
+ */
19
+
20
+ /**
21
+ * Collects interactions.
22
+ * Will automatically stop if the message ({@link Client#event:messageDelete messageDelete} or
23
+ * {@link Client#event:messageDeleteBulk messageDeleteBulk}),
24
+ * channel ({@link Client#event:channelDelete channelDelete}), or
25
+ * guild ({@link Client#event:guildDelete guildDelete}) is deleted.
26
+ * <info>Interaction collectors that do not specify `time` or `idle` may be prone to always running.
27
+ * Ensure your interaction collectors end via either of these options or manual cancellation.</info>
28
+ * @extends {Collector}
29
+ */
30
+ class InteractionCollector extends Collector {
31
+ /**
32
+ * @param {Client} client The client on which to collect interactions
33
+ * @param {InteractionCollectorOptions} [options={}] The options to apply to this collector
34
+ */
35
+ constructor(client, options = {}) {
36
+ super(client, options);
37
+
38
+ /**
39
+ * The message from which to collect interactions, if provided
40
+ * @type {?Snowflake}
41
+ */
42
+ this.messageId = options.message?.id ?? null;
43
+
44
+ /**
45
+ * The channel from which to collect interactions, if provided
46
+ * @type {?Snowflake}
47
+ */
48
+ this.channelId =
49
+ this.client.channels.resolveId(options.message?.channel) ??
50
+ options.message?.channel_id ??
51
+ this.client.channels.resolveId(options.channel);
52
+
53
+ /**
54
+ * The guild from which to collect interactions, if provided
55
+ * @type {?Snowflake}
56
+ */
57
+ this.guildId =
58
+ this.client.guilds.resolveId(options.message?.guild) ??
59
+ options.message?.guild_id ??
60
+ this.client.guilds.resolveId(options.channel?.guild) ??
61
+ this.client.guilds.resolveId(options.guild);
62
+
63
+ /**
64
+ * The type of interaction to collect
65
+ * @type {?InteractionType}
66
+ */
67
+ this.interactionType =
68
+ typeof options.interactionType === 'number'
69
+ ? InteractionTypes[options.interactionType]
70
+ : options.interactionType ?? null;
71
+
72
+ /**
73
+ * The type of component to collect
74
+ * @type {?MessageComponentType}
75
+ */
76
+ this.componentType =
77
+ typeof options.componentType === 'number'
78
+ ? MessageComponentTypes[options.componentType]
79
+ : options.componentType ?? null;
80
+
81
+ /**
82
+ * The users that have interacted with this collector
83
+ * @type {Collection<Snowflake, User>}
84
+ */
85
+ this.users = new Collection();
86
+
87
+ /**
88
+ * The total number of interactions collected
89
+ * @type {number}
90
+ */
91
+ this.total = 0;
92
+
93
+ this.empty = this.empty.bind(this);
94
+ this.client.incrementMaxListeners();
95
+
96
+ const bulkDeleteListener = messages => {
97
+ if (messages.has(this.messageId)) this.stop('messageDelete');
98
+ };
99
+
100
+ if (this.messageId) {
101
+ this._handleMessageDeletion = this._handleMessageDeletion.bind(this);
102
+ this.client.on(Events.MESSAGE_DELETE, this._handleMessageDeletion);
103
+ this.client.on(Events.MESSAGE_BULK_DELETE, bulkDeleteListener);
104
+ }
105
+
106
+ if (this.channelId) {
107
+ this._handleChannelDeletion = this._handleChannelDeletion.bind(this);
108
+ this._handleThreadDeletion = this._handleThreadDeletion.bind(this);
109
+ this.client.on(Events.CHANNEL_DELETE, this._handleChannelDeletion);
110
+ this.client.on(Events.THREAD_DELETE, this._handleThreadDeletion);
111
+ }
112
+
113
+ if (this.guildId) {
114
+ this._handleGuildDeletion = this._handleGuildDeletion.bind(this);
115
+ this.client.on(Events.GUILD_DELETE, this._handleGuildDeletion);
116
+ }
117
+
118
+ this.client.on(Events.INTERACTION_CREATE, this.handleCollect);
119
+
120
+ this.once('end', () => {
121
+ this.client.removeListener(Events.INTERACTION_CREATE, this.handleCollect);
122
+ this.client.removeListener(Events.MESSAGE_DELETE, this._handleMessageDeletion);
123
+ this.client.removeListener(Events.MESSAGE_BULK_DELETE, bulkDeleteListener);
124
+ this.client.removeListener(Events.CHANNEL_DELETE, this._handleChannelDeletion);
125
+ this.client.removeListener(Events.THREAD_DELETE, this._handleThreadDeletion);
126
+ this.client.removeListener(Events.GUILD_DELETE, this._handleGuildDeletion);
127
+ this.client.decrementMaxListeners();
128
+ });
129
+
130
+ this.on('collect', interaction => {
131
+ this.total++;
132
+ this.users.set(interaction.user.id, interaction.user);
133
+ });
134
+ }
135
+
136
+ /**
137
+ * Handles an incoming interaction for possible collection.
138
+ * @param {Interaction} interaction The interaction to possibly collect
139
+ * @returns {?Snowflake}
140
+ * @private
141
+ */
142
+ collect(interaction) {
143
+ /**
144
+ * Emitted whenever an interaction is collected.
145
+ * @event InteractionCollector#collect
146
+ * @param {Interaction} interaction The interaction that was collected
147
+ */
148
+ if (this.interactionType && interaction.type !== this.interactionType) return null;
149
+ if (this.componentType && interaction.componentType !== this.componentType) return null;
150
+ if (this.messageId && interaction.message?.id !== this.messageId) return null;
151
+ if (this.channelId && interaction.channelId !== this.channelId) return null;
152
+ if (this.guildId && interaction.guildId !== this.guildId) return null;
153
+
154
+ return interaction.id;
155
+ }
156
+
157
+ /**
158
+ * Handles an interaction for possible disposal.
159
+ * @param {Interaction} interaction The interaction that could be disposed of
160
+ * @returns {?Snowflake}
161
+ */
162
+ dispose(interaction) {
163
+ /**
164
+ * Emitted whenever an interaction is disposed of.
165
+ * @event InteractionCollector#dispose
166
+ * @param {Interaction} interaction The interaction that was disposed of
167
+ */
168
+ if (this.type && interaction.type !== this.type) return null;
169
+ if (this.componentType && interaction.componentType !== this.componentType) return null;
170
+ if (this.messageId && interaction.message?.id !== this.messageId) return null;
171
+ if (this.channelId && interaction.channelId !== this.channelId) return null;
172
+ if (this.guildId && interaction.guildId !== this.guildId) return null;
173
+
174
+ return interaction.id;
175
+ }
176
+
177
+ /**
178
+ * Empties this interaction collector.
179
+ */
180
+ empty() {
181
+ this.total = 0;
182
+ this.collected.clear();
183
+ this.users.clear();
184
+ this.checkEnd();
185
+ }
186
+
187
+ /**
188
+ * The reason this collector has ended with, or null if it hasn't ended yet
189
+ * @type {?string}
190
+ * @readonly
191
+ */
192
+ get endReason() {
193
+ if (this.options.max && this.total >= this.options.max) return 'limit';
194
+ if (this.options.maxComponents && this.collected.size >= this.options.maxComponents) return 'componentLimit';
195
+ if (this.options.maxUsers && this.users.size >= this.options.maxUsers) return 'userLimit';
196
+ return null;
197
+ }
198
+
199
+ /**
200
+ * Handles checking if the message has been deleted, and if so, stops the collector with the reason 'messageDelete'.
201
+ * @private
202
+ * @param {Message} message The message that was deleted
203
+ * @returns {void}
204
+ */
205
+ _handleMessageDeletion(message) {
206
+ if (message.id === this.messageId) {
207
+ this.stop('messageDelete');
208
+ }
209
+ }
210
+
211
+ /**
212
+ * Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.
213
+ * @private
214
+ * @param {GuildChannel} channel The channel that was deleted
215
+ * @returns {void}
216
+ */
217
+ _handleChannelDeletion(channel) {
218
+ if (channel.id === this.channelId || channel.threads?.cache.has(this.channelId)) {
219
+ this.stop('channelDelete');
220
+ }
221
+ }
222
+
223
+ /**
224
+ * Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.
225
+ * @private
226
+ * @param {ThreadChannel} thread The thread that was deleted
227
+ * @returns {void}
228
+ */
229
+ _handleThreadDeletion(thread) {
230
+ if (thread.id === this.channelId) {
231
+ this.stop('threadDelete');
232
+ }
233
+ }
234
+
235
+ /**
236
+ * Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.
237
+ * @private
238
+ * @param {Guild} guild The guild that was deleted
239
+ * @returns {void}
240
+ */
241
+ _handleGuildDeletion(guild) {
242
+ if (guild.id === this.guildId) {
243
+ this.stop('guildDelete');
244
+ }
245
+ }
246
+ }
247
+
248
+ module.exports = InteractionCollector;
@@ -0,0 +1,114 @@
1
+ 'use strict';
2
+
3
+ const { setTimeout } = require('node:timers');
4
+ const Base = require('./Base');
5
+ const { Events } = require('../util/Constants');
6
+ const SnowflakeUtil = require('../util/SnowflakeUtil');
7
+
8
+ /**
9
+ * Represents a interaction on Discord.
10
+ * @extends {Base}
11
+ */
12
+ class InteractionResponse extends Base {
13
+ constructor(client, data) {
14
+ super(client);
15
+ /**
16
+ * The id of the channel the interaction was sent in
17
+ * @type {Snowflake}
18
+ */
19
+ this.channelId = data.channelId;
20
+
21
+ /**
22
+ * The id of the guild the interaction was sent in, if any
23
+ * @type {?Snowflake}
24
+ */
25
+ this.guildId = data.guildId ?? this.channel?.guild?.id ?? null;
26
+
27
+ /**
28
+ * The interaction data was sent in
29
+ * @type {Object}
30
+ */
31
+ this.sendData = data.metadata;
32
+ this._patch(data);
33
+ }
34
+
35
+ _patch(data) {
36
+ if ('id' in data) {
37
+ /**
38
+ * The interaction response's ID
39
+ * @type {Snowflake}
40
+ */
41
+ this.id = data.id;
42
+ }
43
+ if ('nonce' in data) {
44
+ /**
45
+ * The interaction response's nonce
46
+ * @type {Snowflake}
47
+ */
48
+ this.nonce = data.nonce;
49
+ }
50
+ }
51
+ /**
52
+ * The timestamp the interaction response was created at
53
+ * @type {number}
54
+ * @readonly
55
+ */
56
+ get createdTimestamp() {
57
+ return SnowflakeUtil.timestampFrom(this.id);
58
+ }
59
+
60
+ /**
61
+ * The time the interaction response was created at
62
+ * @type {Date}
63
+ * @readonly
64
+ */
65
+ get createdAt() {
66
+ return new Date(this.createdTimestamp);
67
+ }
68
+
69
+ /**
70
+ * The channel that the interaction was sent in
71
+ * @type {TextBasedChannels}
72
+ * @readonly
73
+ */
74
+ get channel() {
75
+ return this.client.channels.resolve(this.channelId);
76
+ }
77
+
78
+ /**
79
+ * The guild the inteaaction was sent in (if in a guild channel)
80
+ * @type {?Guild}
81
+ * @readonly
82
+ */
83
+ get guild() {
84
+ return this.client.guilds.resolve(this.guildId) ?? this.channel?.guild ?? null;
85
+ }
86
+
87
+ /**
88
+ * Get Modal send from interaction
89
+ * @param {number} time Time to wait for modal
90
+ * @returns {Modal}
91
+ */
92
+ awaitModal(time) {
93
+ if (!time || typeof time !== 'number' || time < 0) throw new Error('INVALID_TIME');
94
+ return new Promise((resolve, reject) => {
95
+ const handler = modal => {
96
+ timeout.refresh();
97
+ if (modal.nonce != this.nonce || modal.id != this.id) return;
98
+ clearTimeout(timeout);
99
+ this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler);
100
+ this.client.decrementMaxListeners();
101
+ resolve(modal);
102
+ };
103
+ const timeout = setTimeout(() => {
104
+ this.client.removeListener(Events.INTERACTION_MODAL_CREATE, handler);
105
+ this.client.decrementMaxListeners();
106
+ reject(new Error('MODAL_TIMEOUT'));
107
+ }, time).unref();
108
+ this.client.incrementMaxListeners();
109
+ this.client.on(Events.INTERACTION_MODAL_CREATE, handler);
110
+ });
111
+ }
112
+ }
113
+
114
+ module.exports = InteractionResponse;