djs-selfbot-v13 3.2.2 → 3.7.1
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.
- package/README.md +37 -36
- package/package.json +89 -85
- package/src/WebSocket.js +39 -39
- package/src/client/BaseClient.js +86 -86
- package/src/client/Client.js +934 -836
- package/src/client/WebhookClient.js +61 -61
- package/src/client/actions/Action.js +116 -120
- package/src/client/actions/ActionsManager.js +80 -78
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -34
- package/src/client/actions/AutoModerationActionExecution.js +27 -27
- package/src/client/actions/AutoModerationRuleCreate.js +28 -28
- package/src/client/actions/AutoModerationRuleDelete.js +32 -32
- package/src/client/actions/AutoModerationRuleUpdate.js +30 -30
- package/src/client/actions/ChannelCreate.js +23 -23
- package/src/client/actions/ChannelDelete.js +39 -39
- package/src/client/actions/ChannelUpdate.js +43 -43
- package/src/client/actions/GuildAuditLogEntryCreate.js +29 -29
- package/src/client/actions/GuildBanAdd.js +20 -20
- package/src/client/actions/GuildBanRemove.js +25 -25
- package/src/client/actions/GuildChannelsPositionUpdate.js +21 -21
- package/src/client/actions/GuildDelete.js +65 -65
- package/src/client/actions/GuildEmojiCreate.js +20 -20
- package/src/client/actions/GuildEmojiDelete.js +21 -21
- package/src/client/actions/GuildEmojiUpdate.js +20 -20
- package/src/client/actions/GuildEmojisUpdate.js +34 -34
- package/src/client/actions/GuildIntegrationsUpdate.js +19 -19
- package/src/client/actions/GuildMemberRemove.js +33 -32
- package/src/client/actions/GuildMemberUpdate.js +44 -43
- package/src/client/actions/GuildRoleCreate.js +25 -25
- package/src/client/actions/GuildRoleDelete.js +31 -31
- package/src/client/actions/GuildRoleUpdate.js +39 -39
- package/src/client/actions/GuildRolesPositionUpdate.js +21 -21
- package/src/client/actions/GuildScheduledEventCreate.js +27 -27
- package/src/client/actions/GuildScheduledEventDelete.js +31 -31
- package/src/client/actions/GuildScheduledEventUpdate.js +30 -30
- package/src/client/actions/GuildScheduledEventUserAdd.js +32 -32
- package/src/client/actions/GuildScheduledEventUserRemove.js +32 -32
- package/src/client/actions/GuildStickerCreate.js +20 -20
- package/src/client/actions/GuildStickerDelete.js +21 -21
- package/src/client/actions/GuildStickerUpdate.js +20 -20
- package/src/client/actions/GuildStickersUpdate.js +34 -34
- package/src/client/actions/GuildUpdate.js +33 -33
- package/src/client/actions/InviteCreate.js +28 -28
- package/src/client/actions/InviteDelete.js +30 -30
- package/src/client/actions/MessageCreate.js +50 -46
- package/src/client/actions/MessageDelete.js +32 -32
- package/src/client/actions/MessageDeleteBulk.js +46 -46
- package/src/client/actions/MessagePollVoteAdd.js +33 -0
- package/src/client/actions/MessagePollVoteRemove.js +33 -0
- package/src/client/actions/MessageReactionAdd.js +68 -56
- package/src/client/actions/MessageReactionRemove.js +50 -45
- package/src/client/actions/MessageReactionRemoveAll.js +33 -33
- package/src/client/actions/MessageReactionRemoveEmoji.js +28 -28
- package/src/client/actions/MessageUpdate.js +26 -26
- package/src/client/actions/PresenceUpdate.js +50 -46
- package/src/client/actions/StageInstanceCreate.js +28 -28
- package/src/client/actions/StageInstanceDelete.js +33 -33
- package/src/client/actions/StageInstanceUpdate.js +30 -30
- package/src/client/actions/ThreadCreate.js +24 -24
- package/src/client/actions/ThreadDelete.js +32 -32
- package/src/client/actions/ThreadListSync.js +59 -59
- package/src/client/actions/ThreadMemberUpdate.js +30 -30
- package/src/client/actions/ThreadMembersUpdate.js +34 -34
- package/src/client/actions/TypingStart.js +29 -29
- package/src/client/actions/UserUpdate.js +35 -35
- package/src/client/actions/VoiceStateUpdate.js +50 -57
- package/src/client/actions/WebhooksUpdate.js +20 -20
- package/src/client/voice/ClientVoiceManager.js +151 -51
- package/src/client/voice/VoiceConnection.js +1249 -0
- package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
- package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
- package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
- package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
- package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
- package/src/client/voice/networking/VoiceUDPClient.js +173 -0
- package/src/client/voice/networking/VoiceWebSocket.js +286 -0
- package/src/client/voice/player/MediaPlayer.js +321 -0
- package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
- package/src/client/voice/player/processing/IvfSplitter.js +106 -0
- package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
- package/src/client/voice/receiver/PacketHandler.js +260 -0
- package/src/client/voice/receiver/Receiver.js +96 -0
- package/src/client/voice/receiver/Recorder.js +173 -0
- package/src/client/voice/util/Function.js +116 -0
- package/src/client/voice/util/PlayInterface.js +122 -0
- package/src/client/voice/util/Secretbox.js +64 -0
- package/src/client/voice/util/Silence.js +16 -0
- package/src/client/voice/util/Socket.js +62 -0
- package/src/client/voice/util/VolumeInterface.js +104 -0
- package/src/client/websocket/WebSocketManager.js +392 -392
- package/src/client/websocket/WebSocketShard.js +907 -906
- package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -18
- package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -20
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -20
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -5
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -5
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -5
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -5
- package/src/client/websocket/handlers/CALL_CREATE.js +14 -14
- package/src/client/websocket/handlers/CALL_DELETE.js +11 -11
- package/src/client/websocket/handlers/CALL_UPDATE.js +11 -11
- package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -5
- package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -5
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -22
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -19
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -16
- package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -16
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -5
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -5
- package/src/client/websocket/handlers/GUILD_CREATE.js +52 -52
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -5
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -39
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -19
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -5
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -5
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -5
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -5
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -5
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -5
- package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -12
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -5
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -22
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -12
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -5
- package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -16
- package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -5
- package/src/client/websocket/handlers/READY.js +121 -120
- package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -19
- package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -17
- package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -41
- package/src/client/websocket/handlers/RESUMED.js +14 -14
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -5
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -5
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -5
- package/src/client/websocket/handlers/THREAD_CREATE.js +5 -5
- package/src/client/websocket/handlers/THREAD_DELETE.js +5 -5
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -5
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -5
- package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -16
- package/src/client/websocket/handlers/TYPING_START.js +5 -5
- package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -6
- package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -5
- package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -78
- package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -5
- package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -12
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -6
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -5
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -5
- package/src/client/websocket/handlers/index.js +84 -83
- package/src/errors/DJSError.js +61 -61
- package/src/errors/Messages.js +217 -183
- package/src/errors/index.js +4 -4
- package/src/index.js +172 -159
- package/src/managers/ApplicationCommandManager.js +264 -264
- package/src/managers/ApplicationCommandPermissionsManager.js +417 -417
- package/src/managers/AutoModerationRuleManager.js +296 -296
- package/src/managers/BaseGuildEmojiManager.js +80 -80
- package/src/managers/BaseManager.js +19 -19
- package/src/managers/BillingManager.js +66 -66
- package/src/managers/CachedManager.js +71 -71
- package/src/managers/ChannelManager.js +148 -138
- package/src/managers/ClientUserSettingManager.js +372 -372
- package/src/managers/DataManager.js +61 -61
- package/src/managers/GuildBanManager.js +250 -250
- package/src/managers/GuildChannelManager.js +488 -488
- package/src/managers/GuildEmojiManager.js +171 -171
- package/src/managers/GuildEmojiRoleManager.js +118 -118
- package/src/managers/GuildForumThreadManager.js +108 -108
- package/src/managers/GuildInviteManager.js +213 -213
- package/src/managers/GuildManager.js +338 -304
- package/src/managers/GuildMemberManager.js +599 -597
- package/src/managers/GuildMemberRoleManager.js +195 -191
- package/src/managers/GuildScheduledEventManager.js +314 -296
- package/src/managers/GuildSettingManager.js +155 -155
- package/src/managers/GuildStickerManager.js +179 -179
- package/src/managers/GuildTextThreadManager.js +98 -98
- package/src/managers/InteractionManager.js +39 -39
- package/src/managers/MessageManager.js +423 -391
- package/src/managers/PermissionOverwriteManager.js +164 -166
- package/src/managers/PresenceManager.js +71 -58
- package/src/managers/ReactionManager.js +67 -67
- package/src/managers/ReactionUserManager.js +73 -71
- package/src/managers/RelationshipManager.js +278 -265
- package/src/managers/RoleManager.js +448 -352
- package/src/managers/SessionManager.js +66 -0
- package/src/managers/StageInstanceManager.js +162 -162
- package/src/managers/ThreadManager.js +175 -174
- package/src/managers/ThreadMemberManager.js +186 -186
- package/src/managers/UserManager.js +136 -146
- package/src/managers/UserNoteManager.js +53 -53
- package/src/managers/VoiceStateManager.js +59 -37
- package/src/rest/APIRequest.js +154 -160
- package/src/rest/APIRouter.js +53 -53
- package/src/rest/DiscordAPIError.js +119 -104
- package/src/rest/HTTPError.js +62 -62
- package/src/rest/RESTManager.js +67 -62
- package/src/rest/RateLimitError.js +55 -55
- package/src/rest/RequestHandler.js +466 -444
- package/src/sharding/Shard.js +444 -443
- package/src/sharding/ShardClientUtil.js +279 -275
- package/src/sharding/ShardingManager.js +319 -318
- package/src/structures/AnonymousGuild.js +98 -98
- package/src/structures/ApplicationCommand.js +593 -593
- package/src/structures/ApplicationRoleConnectionMetadata.js +48 -48
- package/src/structures/AutoModerationActionExecution.js +89 -89
- package/src/structures/AutoModerationRule.js +294 -294
- package/src/structures/AutocompleteInteraction.js +107 -107
- package/src/structures/Base.js +43 -43
- package/src/structures/BaseCommandInteraction.js +211 -211
- package/src/structures/BaseGuild.js +116 -116
- package/src/structures/BaseGuildEmoji.js +56 -56
- package/src/structures/BaseGuildTextChannel.js +191 -191
- package/src/structures/BaseGuildVoiceChannel.js +241 -241
- package/src/structures/BaseMessageComponent.js +181 -114
- package/src/structures/ButtonInteraction.js +11 -11
- package/src/structures/CallState.js +63 -63
- package/src/structures/CategoryChannel.js +85 -85
- package/src/structures/Channel.js +284 -270
- package/src/structures/ClientPresence.js +77 -85
- package/src/structures/ClientUser.js +479 -448
- package/src/structures/CommandInteraction.js +41 -41
- package/src/structures/CommandInteractionOptionResolver.js +276 -276
- package/src/structures/ContainerComponent.js +68 -0
- package/src/structures/ContextMenuInteraction.js +65 -65
- package/src/structures/DMChannel.js +219 -217
- package/src/structures/DirectoryChannel.js +20 -20
- package/src/structures/Emoji.js +148 -148
- package/src/structures/FileComponent.js +49 -0
- package/src/structures/ForumChannel.js +31 -261
- package/src/structures/GroupDMChannel.js +394 -387
- package/src/structures/Guild.js +1643 -1608
- package/src/structures/GuildAuditLogs.js +746 -729
- package/src/structures/GuildBan.js +59 -59
- package/src/structures/GuildBoost.js +108 -108
- package/src/structures/GuildChannel.js +470 -468
- package/src/structures/GuildEmoji.js +161 -161
- package/src/structures/GuildMember.js +636 -568
- package/src/structures/GuildPreview.js +191 -191
- package/src/structures/GuildPreviewEmoji.js +27 -27
- package/src/structures/GuildScheduledEvent.js +536 -441
- package/src/structures/GuildTemplate.js +236 -236
- package/src/structures/Integration.js +188 -188
- package/src/structures/IntegrationApplication.js +96 -96
- package/src/structures/Interaction.js +290 -290
- package/src/structures/InteractionCollector.js +248 -248
- package/src/structures/InteractionWebhook.js +43 -43
- package/src/structures/Invite.js +358 -358
- package/src/structures/InviteGuild.js +23 -23
- package/src/structures/InviteStageInstance.js +86 -86
- package/src/structures/MediaChannel.js +11 -0
- package/src/structures/MediaGalleryComponent.js +41 -0
- package/src/structures/MediaGalleryItem.js +47 -0
- package/src/structures/Message.js +1252 -1227
- package/src/structures/MessageActionRow.js +105 -103
- package/src/structures/MessageAttachment.js +216 -204
- package/src/structures/MessageButton.js +166 -165
- package/src/structures/MessageCollector.js +146 -146
- package/src/structures/MessageComponentInteraction.js +120 -120
- package/src/structures/MessageContextMenuInteraction.js +20 -20
- package/src/structures/MessageEmbed.js +596 -586
- package/src/structures/MessageMentions.js +273 -273
- package/src/structures/MessagePayload.js +354 -318
- package/src/structures/MessageReaction.js +181 -171
- package/src/structures/MessageSelectMenu.js +141 -140
- package/src/structures/Modal.js +161 -161
- package/src/structures/ModalSubmitFieldsResolver.js +53 -53
- package/src/structures/ModalSubmitInteraction.js +119 -119
- package/src/structures/NewsChannel.js +32 -32
- package/src/structures/OAuth2Guild.js +28 -28
- package/src/structures/PermissionOverwrites.js +198 -196
- package/src/structures/Poll.js +108 -0
- package/src/structures/PollAnswer.js +88 -0
- package/src/structures/Presence.js +1105 -1101
- package/src/structures/ReactionCollector.js +229 -229
- package/src/structures/ReactionEmoji.js +31 -31
- package/src/structures/Role.js +590 -531
- package/src/structures/SectionComponent.js +48 -0
- package/src/structures/SelectMenuInteraction.js +21 -21
- package/src/structures/SeparatorComponent.js +48 -0
- package/src/structures/Session.js +81 -0
- package/src/structures/StageChannel.js +104 -104
- package/src/structures/StageInstance.js +208 -208
- package/src/structures/Sticker.js +310 -310
- package/src/structures/StickerPack.js +95 -95
- package/src/structures/StoreChannel.js +56 -56
- package/src/structures/Team.js +118 -118
- package/src/structures/TeamMember.js +80 -71
- package/src/structures/TextChannel.js +33 -33
- package/src/structures/TextDisplayComponent.js +40 -0
- package/src/structures/TextInputComponent.js +132 -131
- package/src/structures/ThreadChannel.js +605 -607
- package/src/structures/ThreadMember.js +105 -105
- package/src/structures/ThreadOnlyChannel.js +249 -0
- package/src/structures/ThumbnailComponent.js +57 -0
- package/src/structures/Typing.js +74 -74
- package/src/structures/UnfurledMediaItem.js +29 -0
- package/src/structures/User.js +640 -543
- package/src/structures/UserContextMenuInteraction.js +29 -29
- package/src/structures/VoiceChannel.js +110 -110
- package/src/structures/VoiceChannelEffect.js +69 -0
- package/src/structures/VoiceRegion.js +53 -53
- package/src/structures/VoiceState.js +354 -341
- package/src/structures/WebEmbed.js +373 -373
- package/src/structures/Webhook.js +478 -467
- package/src/structures/WelcomeChannel.js +60 -60
- package/src/structures/WelcomeScreen.js +48 -48
- package/src/structures/Widget.js +87 -87
- package/src/structures/WidgetMember.js +99 -99
- package/src/structures/interfaces/Application.js +825 -313
- package/src/structures/interfaces/Collector.js +300 -300
- package/src/structures/interfaces/InteractionResponses.js +313 -313
- package/src/structures/interfaces/TextBasedChannel.js +759 -719
- package/src/util/APITypes.js +59 -0
- package/src/util/ActivityFlags.js +44 -44
- package/src/util/ApplicationFlags.js +76 -76
- package/src/util/AttachmentFlags.js +38 -38
- package/src/util/BitField.js +170 -170
- package/src/util/ChannelFlags.js +45 -45
- package/src/util/Constants.js +1914 -1773
- package/src/util/DataResolver.js +146 -145
- package/src/util/Formatters.js +228 -228
- package/src/util/GuildMemberFlags.js +43 -43
- package/src/util/Intents.js +74 -74
- package/src/util/InviteFlags.js +34 -29
- package/src/util/LimitedCollection.js +131 -131
- package/src/util/MessageFlags.js +63 -54
- package/src/util/Options.js +358 -336
- package/src/util/Permissions.js +202 -202
- package/src/util/PremiumUsageFlags.js +31 -31
- package/src/util/PurchasedFlags.js +33 -33
- package/src/util/RemoteAuth.js +382 -379
- package/src/util/RoleFlags.js +37 -37
- package/src/util/SnowflakeUtil.js +92 -92
- package/src/util/Speaking.js +33 -0
- package/src/util/Sweepers.js +466 -466
- package/src/util/SystemChannelFlags.js +55 -55
- package/src/util/ThreadMemberFlags.js +30 -30
- package/src/util/UserFlags.js +104 -104
- package/src/util/Util.js +1048 -889
- package/typings/enums.d.ts +439 -297
- package/typings/index.d.ts +8247 -7432
- package/typings/rawDataTypes.d.ts +403 -342
- package/src/structures/MessagePoll.js +0 -238
package/src/structures/Modal.js
CHANGED
|
@@ -1,161 +1,161 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const BaseMessageComponent = require('./BaseMessageComponent');
|
|
4
|
-
const { InteractionTypes } = require('../util/Constants');
|
|
5
|
-
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
|
6
|
-
const Util = require('../util/Util');
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Represents a modal (form) to be shown in response to an interaction
|
|
10
|
-
*/
|
|
11
|
-
class Modal {
|
|
12
|
-
/**
|
|
13
|
-
* @param {Object} data Modal to clone or raw data
|
|
14
|
-
* @param {Client} client The client constructing this Modal, if provided
|
|
15
|
-
*/
|
|
16
|
-
constructor(data = {}, client = null) {
|
|
17
|
-
/**
|
|
18
|
-
* A list of MessageActionRows in the modal
|
|
19
|
-
* @type {MessageActionRow[]}
|
|
20
|
-
*/
|
|
21
|
-
this.components = data.components?.map(c => BaseMessageComponent.create(c, client)) ?? [];
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* A unique string to be sent in the interaction when submitted
|
|
25
|
-
* @type {?string}
|
|
26
|
-
*/
|
|
27
|
-
this.customId = data.custom_id;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* The title to be displayed on this modal
|
|
31
|
-
* @type {?string}
|
|
32
|
-
*/
|
|
33
|
-
this.title = data.title;
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Timestamp (Discord epoch) of when this modal was created
|
|
37
|
-
* @type {Snowflake}
|
|
38
|
-
*/
|
|
39
|
-
this.nonce = data.nonce;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* ID slash / button / menu when modal is displayed
|
|
43
|
-
* @type {Snowflake}
|
|
44
|
-
*/
|
|
45
|
-
this.id = data.id;
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Application sending the modal
|
|
49
|
-
* @type {Snowflake}
|
|
50
|
-
*/
|
|
51
|
-
this.applicationId = data.application.id;
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* The id of the channel the message was sent in
|
|
55
|
-
* @type {Snowflake}
|
|
56
|
-
*/
|
|
57
|
-
this.channelId = data.channel_id;
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Whether this interaction has already been replied to
|
|
61
|
-
* @type {boolean}
|
|
62
|
-
*/
|
|
63
|
-
this.replied = false;
|
|
64
|
-
|
|
65
|
-
Object.defineProperty(this, 'client', {
|
|
66
|
-
value: client,
|
|
67
|
-
writable: false,
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* The id of the guild the message was sent in, if any
|
|
73
|
-
* @type {?Snowflake}
|
|
74
|
-
* @readonly
|
|
75
|
-
*/
|
|
76
|
-
get guildId() {
|
|
77
|
-
return this.client.channels.cache.get(this.channelId)?.guildId || null;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* The channel that the message was sent in
|
|
82
|
-
* @type {TextBasedChannels}
|
|
83
|
-
* @readonly
|
|
84
|
-
*/
|
|
85
|
-
get channel() {
|
|
86
|
-
return this.client.channels.resolve(this.channelId);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* The guild the message was sent in (if in a guild channel)
|
|
91
|
-
* @type {?Guild}
|
|
92
|
-
* @readonly
|
|
93
|
-
*/
|
|
94
|
-
get guild() {
|
|
95
|
-
return this.client.guilds.resolve(this.guildId) ?? this.channel?.guild ?? null;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
toJSON() {
|
|
99
|
-
return {
|
|
100
|
-
components: this.components.map(c => c.toJSON()),
|
|
101
|
-
custom_id: this.customId,
|
|
102
|
-
title: this.title,
|
|
103
|
-
id: this.id,
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Reply to this modal with data. (Event only)
|
|
109
|
-
* @returns {Promise<Message|Modal>}
|
|
110
|
-
* @example
|
|
111
|
-
* client.on('interactionModalCreate', modal => {
|
|
112
|
-
* // Modal > ActionRow > TextInput
|
|
113
|
-
* modal.components[0].components[0].setValue('1+1');
|
|
114
|
-
* modal.components[1].components[0].setValue('hello');
|
|
115
|
-
* modal.reply();
|
|
116
|
-
* })
|
|
117
|
-
*/
|
|
118
|
-
reply() {
|
|
119
|
-
if (!this.applicationId || !this.client || !this.channelId || this.replied) throw new Error('Modal cannot reply');
|
|
120
|
-
// Get Object
|
|
121
|
-
const dataFinal = this.toJSON();
|
|
122
|
-
dataFinal.components = dataFinal.components
|
|
123
|
-
.map(c => {
|
|
124
|
-
c.components[0] = {
|
|
125
|
-
type: c.components[0].type,
|
|
126
|
-
value: c.components[0].value,
|
|
127
|
-
custom_id: c.components[0].custom_id,
|
|
128
|
-
};
|
|
129
|
-
return c;
|
|
130
|
-
})
|
|
131
|
-
.filter(c => typeof c.components[0].value == 'string');
|
|
132
|
-
delete dataFinal.title;
|
|
133
|
-
const nonce = SnowflakeUtil.generate();
|
|
134
|
-
const postData = {
|
|
135
|
-
type: InteractionTypes.MODAL_SUBMIT, // Modal
|
|
136
|
-
application_id: this.applicationId,
|
|
137
|
-
guild_id: this.guildId,
|
|
138
|
-
channel_id: this.channelId,
|
|
139
|
-
data: dataFinal,
|
|
140
|
-
nonce,
|
|
141
|
-
session_id: this.client.sessionId,
|
|
142
|
-
};
|
|
143
|
-
this.client.api.interactions.post({
|
|
144
|
-
data: postData,
|
|
145
|
-
});
|
|
146
|
-
this.replied = true;
|
|
147
|
-
return Util.createPromiseInteraction(this.client, nonce, 5_000, true, this);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// TypeScript
|
|
151
|
-
/**
|
|
152
|
-
* Check data
|
|
153
|
-
* @type {boolean}
|
|
154
|
-
* @readonly
|
|
155
|
-
*/
|
|
156
|
-
get isMessage() {
|
|
157
|
-
return false;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
module.exports = Modal;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const BaseMessageComponent = require('./BaseMessageComponent');
|
|
4
|
+
const { InteractionTypes } = require('../util/Constants');
|
|
5
|
+
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
|
6
|
+
const Util = require('../util/Util');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Represents a modal (form) to be shown in response to an interaction
|
|
10
|
+
*/
|
|
11
|
+
class Modal {
|
|
12
|
+
/**
|
|
13
|
+
* @param {Object} data Modal to clone or raw data
|
|
14
|
+
* @param {Client} client The client constructing this Modal, if provided
|
|
15
|
+
*/
|
|
16
|
+
constructor(data = {}, client = null) {
|
|
17
|
+
/**
|
|
18
|
+
* A list of MessageActionRows in the modal
|
|
19
|
+
* @type {MessageActionRow[]}
|
|
20
|
+
*/
|
|
21
|
+
this.components = data.components?.map(c => BaseMessageComponent.create(c, client)) ?? [];
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* A unique string to be sent in the interaction when submitted
|
|
25
|
+
* @type {?string}
|
|
26
|
+
*/
|
|
27
|
+
this.customId = data.custom_id;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The title to be displayed on this modal
|
|
31
|
+
* @type {?string}
|
|
32
|
+
*/
|
|
33
|
+
this.title = data.title;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Timestamp (Discord epoch) of when this modal was created
|
|
37
|
+
* @type {Snowflake}
|
|
38
|
+
*/
|
|
39
|
+
this.nonce = data.nonce;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* ID slash / button / menu when modal is displayed
|
|
43
|
+
* @type {Snowflake}
|
|
44
|
+
*/
|
|
45
|
+
this.id = data.id;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Application sending the modal
|
|
49
|
+
* @type {Snowflake}
|
|
50
|
+
*/
|
|
51
|
+
this.applicationId = data.application.id;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The id of the channel the message was sent in
|
|
55
|
+
* @type {Snowflake}
|
|
56
|
+
*/
|
|
57
|
+
this.channelId = data.channel_id;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Whether this interaction has already been replied to
|
|
61
|
+
* @type {boolean}
|
|
62
|
+
*/
|
|
63
|
+
this.replied = false;
|
|
64
|
+
|
|
65
|
+
Object.defineProperty(this, 'client', {
|
|
66
|
+
value: client,
|
|
67
|
+
writable: false,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The id of the guild the message was sent in, if any
|
|
73
|
+
* @type {?Snowflake}
|
|
74
|
+
* @readonly
|
|
75
|
+
*/
|
|
76
|
+
get guildId() {
|
|
77
|
+
return this.client.channels.cache.get(this.channelId)?.guildId || null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The channel that the message was sent in
|
|
82
|
+
* @type {TextBasedChannels}
|
|
83
|
+
* @readonly
|
|
84
|
+
*/
|
|
85
|
+
get channel() {
|
|
86
|
+
return this.client.channels.resolve(this.channelId);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* The guild the message was sent in (if in a guild channel)
|
|
91
|
+
* @type {?Guild}
|
|
92
|
+
* @readonly
|
|
93
|
+
*/
|
|
94
|
+
get guild() {
|
|
95
|
+
return this.client.guilds.resolve(this.guildId) ?? this.channel?.guild ?? null;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
toJSON() {
|
|
99
|
+
return {
|
|
100
|
+
components: this.components.map(c => c.toJSON()),
|
|
101
|
+
custom_id: this.customId,
|
|
102
|
+
title: this.title,
|
|
103
|
+
id: this.id,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Reply to this modal with data. (Event only)
|
|
109
|
+
* @returns {Promise<Message|Modal>}
|
|
110
|
+
* @example
|
|
111
|
+
* client.on('interactionModalCreate', modal => {
|
|
112
|
+
* // Modal > ActionRow > TextInput
|
|
113
|
+
* modal.components[0].components[0].setValue('1+1');
|
|
114
|
+
* modal.components[1].components[0].setValue('hello');
|
|
115
|
+
* modal.reply();
|
|
116
|
+
* })
|
|
117
|
+
*/
|
|
118
|
+
reply() {
|
|
119
|
+
if (!this.applicationId || !this.client || !this.channelId || this.replied) throw new Error('Modal cannot reply');
|
|
120
|
+
// Get Object
|
|
121
|
+
const dataFinal = this.toJSON();
|
|
122
|
+
dataFinal.components = dataFinal.components
|
|
123
|
+
.map(c => {
|
|
124
|
+
c.components[0] = {
|
|
125
|
+
type: c.components[0].type,
|
|
126
|
+
value: c.components[0].value,
|
|
127
|
+
custom_id: c.components[0].custom_id,
|
|
128
|
+
};
|
|
129
|
+
return c;
|
|
130
|
+
})
|
|
131
|
+
.filter(c => typeof c.components[0].value == 'string');
|
|
132
|
+
delete dataFinal.title;
|
|
133
|
+
const nonce = SnowflakeUtil.generate();
|
|
134
|
+
const postData = {
|
|
135
|
+
type: InteractionTypes.MODAL_SUBMIT, // Modal
|
|
136
|
+
application_id: this.applicationId,
|
|
137
|
+
guild_id: this.guildId,
|
|
138
|
+
channel_id: this.channelId,
|
|
139
|
+
data: dataFinal,
|
|
140
|
+
nonce,
|
|
141
|
+
session_id: this.client.sessionId,
|
|
142
|
+
};
|
|
143
|
+
this.client.api.interactions.post({
|
|
144
|
+
data: postData,
|
|
145
|
+
});
|
|
146
|
+
this.replied = true;
|
|
147
|
+
return Util.createPromiseInteraction(this.client, nonce, 5_000, true, this);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// TypeScript
|
|
151
|
+
/**
|
|
152
|
+
* Check data
|
|
153
|
+
* @type {boolean}
|
|
154
|
+
* @readonly
|
|
155
|
+
*/
|
|
156
|
+
get isMessage() {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
module.exports = Modal;
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { TypeError } = require('../errors');
|
|
4
|
-
const { MessageComponentTypes } = require('../util/Constants');
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* A resolver for modal submit interaction text inputs.
|
|
8
|
-
*/
|
|
9
|
-
class ModalSubmitFieldsResolver {
|
|
10
|
-
constructor(components) {
|
|
11
|
-
/**
|
|
12
|
-
* The components within the modal
|
|
13
|
-
* @type {PartialModalActionRow[]} The components in the modal
|
|
14
|
-
*/
|
|
15
|
-
this.components = components;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* The extracted fields from the modal
|
|
20
|
-
* @type {PartialInputTextData[]} The fields in the modal
|
|
21
|
-
* @private
|
|
22
|
-
*/
|
|
23
|
-
get _fields() {
|
|
24
|
-
return this.components.reduce((previous, next) => previous.concat(next.components), []);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Gets a field given a custom id from a component
|
|
29
|
-
* @param {string} customId The custom id of the component
|
|
30
|
-
* @returns {?PartialInputTextData}
|
|
31
|
-
*/
|
|
32
|
-
getField(customId) {
|
|
33
|
-
const field = this._fields.find(f => f.customId === customId);
|
|
34
|
-
if (!field) throw new TypeError('MODAL_SUBMIT_INTERACTION_FIELD_NOT_FOUND', customId);
|
|
35
|
-
return field;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Gets the value of a text input component given a custom id
|
|
40
|
-
* @param {string} customId The custom id of the text input component
|
|
41
|
-
* @returns {?string}
|
|
42
|
-
*/
|
|
43
|
-
getTextInputValue(customId) {
|
|
44
|
-
const field = this.getField(customId);
|
|
45
|
-
const expectedType = MessageComponentTypes[MessageComponentTypes.TEXT_INPUT];
|
|
46
|
-
if (field.type !== expectedType) {
|
|
47
|
-
throw new TypeError('MODAL_SUBMIT_INTERACTION_FIELD_TYPE', customId, field.type, expectedType);
|
|
48
|
-
}
|
|
49
|
-
return field.value;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
module.exports = ModalSubmitFieldsResolver;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { TypeError } = require('../errors');
|
|
4
|
+
const { MessageComponentTypes } = require('../util/Constants');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A resolver for modal submit interaction text inputs.
|
|
8
|
+
*/
|
|
9
|
+
class ModalSubmitFieldsResolver {
|
|
10
|
+
constructor(components) {
|
|
11
|
+
/**
|
|
12
|
+
* The components within the modal
|
|
13
|
+
* @type {PartialModalActionRow[]} The components in the modal
|
|
14
|
+
*/
|
|
15
|
+
this.components = components;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The extracted fields from the modal
|
|
20
|
+
* @type {PartialInputTextData[]} The fields in the modal
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
get _fields() {
|
|
24
|
+
return this.components.reduce((previous, next) => previous.concat(next.components), []);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Gets a field given a custom id from a component
|
|
29
|
+
* @param {string} customId The custom id of the component
|
|
30
|
+
* @returns {?PartialInputTextData}
|
|
31
|
+
*/
|
|
32
|
+
getField(customId) {
|
|
33
|
+
const field = this._fields.find(f => f.customId === customId);
|
|
34
|
+
if (!field) throw new TypeError('MODAL_SUBMIT_INTERACTION_FIELD_NOT_FOUND', customId);
|
|
35
|
+
return field;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Gets the value of a text input component given a custom id
|
|
40
|
+
* @param {string} customId The custom id of the text input component
|
|
41
|
+
* @returns {?string}
|
|
42
|
+
*/
|
|
43
|
+
getTextInputValue(customId) {
|
|
44
|
+
const field = this.getField(customId);
|
|
45
|
+
const expectedType = MessageComponentTypes[MessageComponentTypes.TEXT_INPUT];
|
|
46
|
+
if (field.type !== expectedType) {
|
|
47
|
+
throw new TypeError('MODAL_SUBMIT_INTERACTION_FIELD_TYPE', customId, field.type, expectedType);
|
|
48
|
+
}
|
|
49
|
+
return field.value;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
module.exports = ModalSubmitFieldsResolver;
|
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const Interaction = require('./Interaction');
|
|
4
|
-
const InteractionWebhook = require('./InteractionWebhook');
|
|
5
|
-
const ModalSubmitFieldsResolver = require('./ModalSubmitFieldsResolver');
|
|
6
|
-
const InteractionResponses = require('./interfaces/InteractionResponses');
|
|
7
|
-
const { MessageComponentTypes } = require('../util/Constants');
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Represents a modal submit interaction.
|
|
11
|
-
* @extends {Interaction}
|
|
12
|
-
* @implements {InteractionResponses}
|
|
13
|
-
*/
|
|
14
|
-
class ModalSubmitInteraction extends Interaction {
|
|
15
|
-
constructor(client, data) {
|
|
16
|
-
super(client, data);
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* The custom id of the modal.
|
|
20
|
-
* @type {string}
|
|
21
|
-
*/
|
|
22
|
-
this.customId = data.data.custom_id;
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @typedef {Object} PartialTextInputData
|
|
26
|
-
* @property {string} [customId] A unique string to be sent in the interaction when submitted
|
|
27
|
-
* @property {MessageComponentType} [type] The type of this component
|
|
28
|
-
* @property {string} [value] Value of this text input component
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* @typedef {Object} PartialModalActionRow
|
|
33
|
-
* @property {MessageComponentType} [type] The type of this component
|
|
34
|
-
* @property {PartialTextInputData[]} [components] Partial text input components
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* The inputs within the modal
|
|
39
|
-
* @type {PartialModalActionRow[]}
|
|
40
|
-
*/
|
|
41
|
-
this.components =
|
|
42
|
-
data.data.components?.map(c => ({
|
|
43
|
-
type: MessageComponentTypes[c.type],
|
|
44
|
-
components: ModalSubmitInteraction.transformComponent(c),
|
|
45
|
-
})) ?? [];
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* The message associated with this interaction
|
|
49
|
-
* @type {Message|APIMessage|null}
|
|
50
|
-
*/
|
|
51
|
-
this.message = data.message ? this.channel?.messages._add(data.message) ?? data.message : null;
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* The fields within the modal
|
|
55
|
-
* @type {ModalSubmitFieldsResolver}
|
|
56
|
-
*/
|
|
57
|
-
this.fields = new ModalSubmitFieldsResolver(this.components);
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Whether the reply to this interaction has been deferred
|
|
61
|
-
* @type {boolean}
|
|
62
|
-
*/
|
|
63
|
-
this.deferred = false;
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Whether the reply to this interaction is ephemeral
|
|
67
|
-
* @type {?boolean}
|
|
68
|
-
*/
|
|
69
|
-
this.ephemeral = null;
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Whether this interaction has already been replied to
|
|
73
|
-
* @type {boolean}
|
|
74
|
-
*/
|
|
75
|
-
this.replied = false;
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* An associated interaction webhook, can be used to further interact with this interaction
|
|
79
|
-
* @type {InteractionWebhook}
|
|
80
|
-
*/
|
|
81
|
-
this.webhook = new InteractionWebhook(this.client, this.applicationId, this.token);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Transforms component data to discord.js-compatible data
|
|
86
|
-
* @param {*} rawComponent The data to transform
|
|
87
|
-
* @returns {PartialTextInputData[]}
|
|
88
|
-
*/
|
|
89
|
-
static transformComponent(rawComponent) {
|
|
90
|
-
return rawComponent.components.map(c => ({
|
|
91
|
-
value: c.value,
|
|
92
|
-
type: MessageComponentTypes[c.type],
|
|
93
|
-
customId: c.custom_id,
|
|
94
|
-
}));
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Whether this is from a {@link MessageComponentInteraction}.
|
|
99
|
-
* @returns {boolean}
|
|
100
|
-
*/
|
|
101
|
-
isFromMessage() {
|
|
102
|
-
return Boolean(this.message);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// These are here only for documentation purposes - they are implemented by InteractionResponses
|
|
106
|
-
/* eslint-disable no-empty-function */
|
|
107
|
-
deferReply() {}
|
|
108
|
-
reply() {}
|
|
109
|
-
fetchReply() {}
|
|
110
|
-
editReply() {}
|
|
111
|
-
deleteReply() {}
|
|
112
|
-
followUp() {}
|
|
113
|
-
update() {}
|
|
114
|
-
deferUpdate() {}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
InteractionResponses.applyToClass(ModalSubmitInteraction, ['showModal', 'awaitModalSubmit']);
|
|
118
|
-
|
|
119
|
-
module.exports = ModalSubmitInteraction;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Interaction = require('./Interaction');
|
|
4
|
+
const InteractionWebhook = require('./InteractionWebhook');
|
|
5
|
+
const ModalSubmitFieldsResolver = require('./ModalSubmitFieldsResolver');
|
|
6
|
+
const InteractionResponses = require('./interfaces/InteractionResponses');
|
|
7
|
+
const { MessageComponentTypes } = require('../util/Constants');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Represents a modal submit interaction.
|
|
11
|
+
* @extends {Interaction}
|
|
12
|
+
* @implements {InteractionResponses}
|
|
13
|
+
*/
|
|
14
|
+
class ModalSubmitInteraction extends Interaction {
|
|
15
|
+
constructor(client, data) {
|
|
16
|
+
super(client, data);
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The custom id of the modal.
|
|
20
|
+
* @type {string}
|
|
21
|
+
*/
|
|
22
|
+
this.customId = data.data.custom_id;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @typedef {Object} PartialTextInputData
|
|
26
|
+
* @property {string} [customId] A unique string to be sent in the interaction when submitted
|
|
27
|
+
* @property {MessageComponentType} [type] The type of this component
|
|
28
|
+
* @property {string} [value] Value of this text input component
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @typedef {Object} PartialModalActionRow
|
|
33
|
+
* @property {MessageComponentType} [type] The type of this component
|
|
34
|
+
* @property {PartialTextInputData[]} [components] Partial text input components
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The inputs within the modal
|
|
39
|
+
* @type {PartialModalActionRow[]}
|
|
40
|
+
*/
|
|
41
|
+
this.components =
|
|
42
|
+
data.data.components?.map(c => ({
|
|
43
|
+
type: MessageComponentTypes[c.type],
|
|
44
|
+
components: ModalSubmitInteraction.transformComponent(c),
|
|
45
|
+
})) ?? [];
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The message associated with this interaction
|
|
49
|
+
* @type {Message|APIMessage|null}
|
|
50
|
+
*/
|
|
51
|
+
this.message = data.message ? this.channel?.messages._add(data.message) ?? data.message : null;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The fields within the modal
|
|
55
|
+
* @type {ModalSubmitFieldsResolver}
|
|
56
|
+
*/
|
|
57
|
+
this.fields = new ModalSubmitFieldsResolver(this.components);
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Whether the reply to this interaction has been deferred
|
|
61
|
+
* @type {boolean}
|
|
62
|
+
*/
|
|
63
|
+
this.deferred = false;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Whether the reply to this interaction is ephemeral
|
|
67
|
+
* @type {?boolean}
|
|
68
|
+
*/
|
|
69
|
+
this.ephemeral = null;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Whether this interaction has already been replied to
|
|
73
|
+
* @type {boolean}
|
|
74
|
+
*/
|
|
75
|
+
this.replied = false;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* An associated interaction webhook, can be used to further interact with this interaction
|
|
79
|
+
* @type {InteractionWebhook}
|
|
80
|
+
*/
|
|
81
|
+
this.webhook = new InteractionWebhook(this.client, this.applicationId, this.token);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Transforms component data to discord.js-compatible data
|
|
86
|
+
* @param {*} rawComponent The data to transform
|
|
87
|
+
* @returns {PartialTextInputData[]}
|
|
88
|
+
*/
|
|
89
|
+
static transformComponent(rawComponent) {
|
|
90
|
+
return rawComponent.components.map(c => ({
|
|
91
|
+
value: c.value,
|
|
92
|
+
type: MessageComponentTypes[c.type],
|
|
93
|
+
customId: c.custom_id,
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Whether this is from a {@link MessageComponentInteraction}.
|
|
99
|
+
* @returns {boolean}
|
|
100
|
+
*/
|
|
101
|
+
isFromMessage() {
|
|
102
|
+
return Boolean(this.message);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// These are here only for documentation purposes - they are implemented by InteractionResponses
|
|
106
|
+
/* eslint-disable no-empty-function */
|
|
107
|
+
deferReply() {}
|
|
108
|
+
reply() {}
|
|
109
|
+
fetchReply() {}
|
|
110
|
+
editReply() {}
|
|
111
|
+
deleteReply() {}
|
|
112
|
+
followUp() {}
|
|
113
|
+
update() {}
|
|
114
|
+
deferUpdate() {}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
InteractionResponses.applyToClass(ModalSubmitInteraction, ['showModal', 'awaitModalSubmit']);
|
|
118
|
+
|
|
119
|
+
module.exports = ModalSubmitInteraction;
|