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.
- package/LICENSE +674 -0
- package/README.md +127 -5
- package/package.json +101 -6
- package/src/WebSocket.js +39 -0
- package/src/client/BaseClient.js +87 -0
- package/src/client/Client.js +1154 -0
- package/src/client/WebhookClient.js +61 -0
- package/src/client/actions/Action.js +115 -0
- package/src/client/actions/ActionsManager.js +72 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +26 -0
- package/src/client/actions/AutoModerationRuleCreate.js +27 -0
- package/src/client/actions/AutoModerationRuleDelete.js +31 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +39 -0
- package/src/client/actions/ChannelUpdate.js +34 -0
- package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
- package/src/client/actions/GuildBanAdd.js +20 -0
- package/src/client/actions/GuildBanRemove.js +25 -0
- package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
- package/src/client/actions/GuildDelete.js +65 -0
- package/src/client/actions/GuildEmojiCreate.js +20 -0
- package/src/client/actions/GuildEmojiDelete.js +21 -0
- package/src/client/actions/GuildEmojiUpdate.js +20 -0
- package/src/client/actions/GuildEmojisUpdate.js +34 -0
- package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
- package/src/client/actions/GuildMemberRemove.js +33 -0
- package/src/client/actions/GuildMemberUpdate.js +44 -0
- package/src/client/actions/GuildRoleCreate.js +25 -0
- package/src/client/actions/GuildRoleDelete.js +31 -0
- package/src/client/actions/GuildRoleUpdate.js +39 -0
- package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
- package/src/client/actions/GuildScheduledEventCreate.js +27 -0
- package/src/client/actions/GuildScheduledEventDelete.js +31 -0
- package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
- package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
- package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
- package/src/client/actions/GuildStickerCreate.js +20 -0
- package/src/client/actions/GuildStickerDelete.js +21 -0
- package/src/client/actions/GuildStickerUpdate.js +20 -0
- package/src/client/actions/GuildStickersUpdate.js +34 -0
- package/src/client/actions/GuildUpdate.js +33 -0
- package/src/client/actions/InteractionCreate.js +115 -0
- package/src/client/actions/InviteCreate.js +28 -0
- package/src/client/actions/InviteDelete.js +30 -0
- package/src/client/actions/MessageCreate.js +50 -0
- package/src/client/actions/MessageDelete.js +32 -0
- package/src/client/actions/MessageDeleteBulk.js +46 -0
- package/src/client/actions/MessageReactionAdd.js +56 -0
- package/src/client/actions/MessageReactionRemove.js +45 -0
- package/src/client/actions/MessageReactionRemoveAll.js +33 -0
- package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
- package/src/client/actions/MessageUpdate.js +26 -0
- package/src/client/actions/PresenceUpdate.js +45 -0
- package/src/client/actions/StageInstanceCreate.js +28 -0
- package/src/client/actions/StageInstanceDelete.js +33 -0
- package/src/client/actions/StageInstanceUpdate.js +30 -0
- package/src/client/actions/ThreadCreate.js +24 -0
- package/src/client/actions/ThreadDelete.js +32 -0
- package/src/client/actions/ThreadListSync.js +59 -0
- package/src/client/actions/ThreadMemberUpdate.js +30 -0
- package/src/client/actions/ThreadMembersUpdate.js +34 -0
- package/src/client/actions/TypingStart.js +29 -0
- package/src/client/actions/UserUpdate.js +35 -0
- package/src/client/actions/VoiceStateUpdate.js +57 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +51 -0
- package/src/client/websocket/WebSocketManager.js +412 -0
- package/src/client/websocket/WebSocketShard.js +908 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js +23 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
- package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
- package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
- package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +16 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
- package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
- package/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js +11 -0
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_CREATE.js +46 -0
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js +55 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
- package/src/client/websocket/handlers/INTERACTION_CREATE.js +16 -0
- package/src/client/websocket/handlers/INTERACTION_FAILURE.js +18 -0
- package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +11 -0
- package/src/client/websocket/handlers/INTERACTION_SUCCESS.js +30 -0
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_ACK.js +16 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
- package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/READY.js +170 -0
- package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +17 -0
- package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +15 -0
- package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +18 -0
- package/src/client/websocket/handlers/RESUMED.js +14 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
- package/src/client/websocket/handlers/TYPING_START.js +5 -0
- package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +12 -0
- package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +9 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/index.js +86 -0
- package/src/errors/DJSError.js +61 -0
- package/src/errors/Messages.js +227 -0
- package/src/errors/index.js +4 -0
- package/src/index.js +189 -0
- package/src/managers/ApplicationCommandManager.js +267 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +425 -0
- package/src/managers/AutoModerationRuleManager.js +296 -0
- package/src/managers/BaseGuildEmojiManager.js +80 -0
- package/src/managers/BaseManager.js +19 -0
- package/src/managers/BillingManager.js +66 -0
- package/src/managers/CachedManager.js +71 -0
- package/src/managers/ChannelManager.js +139 -0
- package/src/managers/ClientUserSettingManager.js +490 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/DeveloperPortalManager.js +104 -0
- package/src/managers/GuildApplicationCommandManager.js +28 -0
- package/src/managers/GuildBanManager.js +204 -0
- package/src/managers/GuildChannelManager.js +502 -0
- package/src/managers/GuildEmojiManager.js +171 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildFolderManager.js +24 -0
- package/src/managers/GuildForumThreadManager.js +114 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +304 -0
- package/src/managers/GuildMemberManager.js +724 -0
- package/src/managers/GuildMemberRoleManager.js +191 -0
- package/src/managers/GuildScheduledEventManager.js +296 -0
- package/src/managers/GuildSettingManager.js +148 -0
- package/src/managers/GuildStickerManager.js +179 -0
- package/src/managers/GuildTextThreadManager.js +98 -0
- package/src/managers/InteractionManager.js +39 -0
- package/src/managers/MessageManager.js +393 -0
- package/src/managers/PermissionOverwriteManager.js +166 -0
- package/src/managers/PresenceManager.js +58 -0
- package/src/managers/ReactionManager.js +67 -0
- package/src/managers/ReactionUserManager.js +71 -0
- package/src/managers/RelationshipManager.js +258 -0
- package/src/managers/RoleManager.js +352 -0
- package/src/managers/SessionManager.js +57 -0
- package/src/managers/StageInstanceManager.js +162 -0
- package/src/managers/ThreadManager.js +207 -0
- package/src/managers/ThreadMemberManager.js +186 -0
- package/src/managers/UserManager.js +150 -0
- package/src/managers/VoiceStateManager.js +37 -0
- package/src/rest/APIRequest.js +136 -0
- package/src/rest/APIRouter.js +53 -0
- package/src/rest/CaptchaSolver.js +78 -0
- package/src/rest/DiscordAPIError.js +103 -0
- package/src/rest/HTTPError.js +62 -0
- package/src/rest/RESTManager.js +81 -0
- package/src/rest/RateLimitError.js +55 -0
- package/src/rest/RequestHandler.js +446 -0
- package/src/sharding/Shard.js +443 -0
- package/src/sharding/ShardClientUtil.js +275 -0
- package/src/sharding/ShardingManager.js +318 -0
- package/src/structures/AnonymousGuild.js +98 -0
- package/src/structures/ApplicationCommand.js +1028 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +45 -0
- package/src/structures/AutoModerationActionExecution.js +89 -0
- package/src/structures/AutoModerationRule.js +294 -0
- package/src/structures/AutocompleteInteraction.js +106 -0
- package/src/structures/Base.js +43 -0
- package/src/structures/BaseCommandInteraction.js +211 -0
- package/src/structures/BaseGuild.js +116 -0
- package/src/structures/BaseGuildEmoji.js +56 -0
- package/src/structures/BaseGuildTextChannel.js +193 -0
- package/src/structures/BaseGuildVoiceChannel.js +243 -0
- package/src/structures/BaseMessageComponent.js +114 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/Call.js +58 -0
- package/src/structures/CategoryChannel.js +83 -0
- package/src/structures/Channel.js +271 -0
- package/src/structures/ClientApplication.js +204 -0
- package/src/structures/ClientPresence.js +84 -0
- package/src/structures/ClientUser.js +624 -0
- package/src/structures/CommandInteraction.js +41 -0
- package/src/structures/CommandInteractionOptionResolver.js +276 -0
- package/src/structures/ContextMenuInteraction.js +65 -0
- package/src/structures/DMChannel.js +280 -0
- package/src/structures/DeveloperPortalApplication.js +520 -0
- package/src/structures/DirectoryChannel.js +20 -0
- package/src/structures/Emoji.js +148 -0
- package/src/structures/ForumChannel.js +271 -0
- package/src/structures/Guild.js +1744 -0
- package/src/structures/GuildAuditLogs.js +734 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildBoost.js +108 -0
- package/src/structures/GuildChannel.js +454 -0
- package/src/structures/GuildEmoji.js +161 -0
- package/src/structures/GuildFolder.js +75 -0
- package/src/structures/GuildMember.js +686 -0
- package/src/structures/GuildPreview.js +191 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +441 -0
- package/src/structures/GuildTemplate.js +236 -0
- package/src/structures/Integration.js +188 -0
- package/src/structures/IntegrationApplication.js +96 -0
- package/src/structures/Interaction.js +351 -0
- package/src/structures/InteractionCollector.js +248 -0
- package/src/structures/InteractionResponse.js +114 -0
- package/src/structures/InteractionWebhook.js +43 -0
- package/src/structures/Invite.js +375 -0
- package/src/structures/InviteGuild.js +23 -0
- package/src/structures/InviteStageInstance.js +86 -0
- package/src/structures/Message.js +1188 -0
- package/src/structures/MessageActionRow.js +103 -0
- package/src/structures/MessageAttachment.js +193 -0
- package/src/structures/MessageButton.js +231 -0
- package/src/structures/MessageCollector.js +146 -0
- package/src/structures/MessageComponentInteraction.js +120 -0
- package/src/structures/MessageContextMenuInteraction.js +20 -0
- package/src/structures/MessageEmbed.js +586 -0
- package/src/structures/MessageMentions.js +272 -0
- package/src/structures/MessagePayload.js +358 -0
- package/src/structures/MessageReaction.js +171 -0
- package/src/structures/MessageSelectMenu.js +391 -0
- package/src/structures/Modal.js +279 -0
- package/src/structures/ModalSubmitFieldsResolver.js +53 -0
- package/src/structures/ModalSubmitInteraction.js +119 -0
- package/src/structures/NewsChannel.js +32 -0
- package/src/structures/OAuth2Guild.js +28 -0
- package/src/structures/PartialGroupDMChannel.js +430 -0
- package/src/structures/PermissionOverwrites.js +196 -0
- package/src/structures/Presence.js +441 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/RichPresence.js +722 -0
- package/src/structures/Role.js +515 -0
- package/src/structures/SelectMenuInteraction.js +170 -0
- package/src/structures/Session.js +81 -0
- package/src/structures/StageChannel.js +104 -0
- package/src/structures/StageInstance.js +208 -0
- package/src/structures/Sticker.js +310 -0
- package/src/structures/StickerPack.js +95 -0
- package/src/structures/StoreChannel.js +56 -0
- package/src/structures/Team.js +167 -0
- package/src/structures/TeamMember.js +71 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextInputComponent.js +201 -0
- package/src/structures/ThreadChannel.js +626 -0
- package/src/structures/ThreadMember.js +105 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/User.js +697 -0
- package/src/structures/UserContextMenuInteraction.js +29 -0
- package/src/structures/VoiceChannel.js +110 -0
- package/src/structures/VoiceRegion.js +53 -0
- package/src/structures/VoiceState.js +306 -0
- package/src/structures/WebEmbed.js +401 -0
- package/src/structures/Webhook.js +461 -0
- package/src/structures/WelcomeChannel.js +60 -0
- package/src/structures/WelcomeScreen.js +48 -0
- package/src/structures/Widget.js +87 -0
- package/src/structures/WidgetMember.js +99 -0
- package/src/structures/interfaces/Application.js +190 -0
- package/src/structures/interfaces/Collector.js +300 -0
- package/src/structures/interfaces/InteractionResponses.js +313 -0
- package/src/structures/interfaces/TextBasedChannel.js +566 -0
- package/src/util/ActivityFlags.js +44 -0
- package/src/util/ApplicationFlags.js +74 -0
- package/src/util/BitField.js +170 -0
- package/src/util/ChannelFlags.js +45 -0
- package/src/util/Constants.js +1917 -0
- package/src/util/DataResolver.js +145 -0
- package/src/util/Formatters.js +214 -0
- package/src/util/GuildMemberFlags.js +43 -0
- package/src/util/Intents.js +74 -0
- package/src/util/LimitedCollection.js +131 -0
- package/src/util/MessageFlags.js +54 -0
- package/src/util/Options.js +360 -0
- package/src/util/Permissions.js +187 -0
- package/src/util/PremiumUsageFlags.js +31 -0
- package/src/util/PurchasedFlags.js +31 -0
- package/src/util/RemoteAuth.js +522 -0
- package/src/util/SnowflakeUtil.js +92 -0
- package/src/util/Sweepers.js +466 -0
- package/src/util/SystemChannelFlags.js +55 -0
- package/src/util/ThreadMemberFlags.js +30 -0
- package/src/util/UserFlags.js +104 -0
- package/src/util/Util.js +741 -0
- package/src/util/Voice.js +1456 -0
- package/src/util/arRPC/index.js +229 -0
- package/src/util/arRPC/process/detectable.json +1 -0
- package/src/util/arRPC/process/index.js +102 -0
- package/src/util/arRPC/process/native/index.js +5 -0
- package/src/util/arRPC/process/native/linux.js +37 -0
- package/src/util/arRPC/process/native/win32.js +25 -0
- package/src/util/arRPC/transports/ipc.js +281 -0
- package/src/util/arRPC/transports/websocket.js +128 -0
- package/typings/enums.d.ts +346 -0
- package/typings/index.d.ts +7725 -0
- package/typings/index.test-d.ts +0 -0
- 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;
|