discord-sb-v13 0.0.1-security → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of discord-sb-v13 might be problematic. Click here for more details.
- package/LICENSE +674 -0
- package/README.md +119 -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 +172 -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 +190 -0
- package/src/main.js +42 -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,279 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const { setTimeout } = require('node:timers');
|
4
|
+
const BaseMessageComponent = require('./BaseMessageComponent');
|
5
|
+
const User = require('./User');
|
6
|
+
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
7
|
+
const Util = require('../util/Util');
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Represents a modal (form) to be shown in response to an interaction
|
11
|
+
*/
|
12
|
+
class Modal {
|
13
|
+
/**
|
14
|
+
* @typedef {Object} ModalOptions
|
15
|
+
* @property {string} [customId] A unique string to be sent in the interaction when clicked
|
16
|
+
* @property {string} [title] The title to be displayed on this modal
|
17
|
+
* @property {Array<(MessageActionRow|MessageActionRowOptions)>} [components]
|
18
|
+
* Action rows containing interactive components for the modal (text input components)
|
19
|
+
*/
|
20
|
+
|
21
|
+
/**
|
22
|
+
* @param {Modal|ModalOptions} data Modal to clone or raw data
|
23
|
+
* @param {Client} client The client constructing this Modal, if provided
|
24
|
+
*/
|
25
|
+
constructor(data = {}, client = null) {
|
26
|
+
/**
|
27
|
+
* A list of MessageActionRows in the modal
|
28
|
+
* @type {MessageActionRow[]}
|
29
|
+
*/
|
30
|
+
this.components = data.components?.map(c => BaseMessageComponent.create(c, client)) ?? [];
|
31
|
+
|
32
|
+
/**
|
33
|
+
* A unique string to be sent in the interaction when submitted
|
34
|
+
* @type {?string}
|
35
|
+
*/
|
36
|
+
this.customId = data.custom_id ?? data.customId ?? null;
|
37
|
+
|
38
|
+
/**
|
39
|
+
* The title to be displayed on this modal
|
40
|
+
* @type {?string}
|
41
|
+
*/
|
42
|
+
this.title = data.title ?? null;
|
43
|
+
|
44
|
+
/**
|
45
|
+
* Timestamp (Discord epoch) of when this modal was created
|
46
|
+
* @type {?Snowflake}
|
47
|
+
*/
|
48
|
+
this.nonce = data.nonce ?? null;
|
49
|
+
|
50
|
+
/**
|
51
|
+
* ID slash / button / menu when modal is displayed
|
52
|
+
* @type {?Snowflake}
|
53
|
+
*/
|
54
|
+
this.id = data.id ?? null;
|
55
|
+
|
56
|
+
/**
|
57
|
+
* Application sending the modal
|
58
|
+
* @type {?Object}
|
59
|
+
*/
|
60
|
+
this.application = data.application
|
61
|
+
? {
|
62
|
+
...data.application,
|
63
|
+
bot: data.application.bot ? new User(client, data.application.bot, data.application) : null,
|
64
|
+
}
|
65
|
+
: null;
|
66
|
+
|
67
|
+
this.client = client;
|
68
|
+
}
|
69
|
+
|
70
|
+
/**
|
71
|
+
* Get Interaction Response
|
72
|
+
* @type {?InteractionResponse}
|
73
|
+
* @readonly
|
74
|
+
*/
|
75
|
+
get sendFromInteraction() {
|
76
|
+
if (this.id && this.nonce && this.client) {
|
77
|
+
const cache = this.client._interactionCache.get(this.nonce);
|
78
|
+
const channel = cache.guildId
|
79
|
+
? this.client.guilds.cache.get(cache.guildId)?.channels.cache.get(cache.channelId)
|
80
|
+
: this.client.channels.cache.get(cache.channelId);
|
81
|
+
return channel.interactions.cache.get(this.id);
|
82
|
+
}
|
83
|
+
return null;
|
84
|
+
}
|
85
|
+
|
86
|
+
/**
|
87
|
+
* Adds components to the modal.
|
88
|
+
* @param {...MessageActionRowResolvable[]} components The components to add
|
89
|
+
* @returns {Modal}
|
90
|
+
*/
|
91
|
+
addComponents(...components) {
|
92
|
+
this.components.push(...components.flat(Infinity).map(c => BaseMessageComponent.create(c)));
|
93
|
+
return this;
|
94
|
+
}
|
95
|
+
|
96
|
+
/**
|
97
|
+
* Sets the components of the modal.
|
98
|
+
* @param {...MessageActionRowResolvable[]} components The components to set
|
99
|
+
* @returns {Modal}
|
100
|
+
*/
|
101
|
+
setComponents(...components) {
|
102
|
+
this.spliceComponents(0, this.components.length, components);
|
103
|
+
return this;
|
104
|
+
}
|
105
|
+
|
106
|
+
/**
|
107
|
+
* Sets the custom id for this modal
|
108
|
+
* @param {string} customId A unique string to be sent in the interaction when submitted
|
109
|
+
* @returns {Modal}
|
110
|
+
*/
|
111
|
+
setCustomId(customId) {
|
112
|
+
this.customId = Util.verifyString(customId, RangeError, 'MODAL_CUSTOM_ID');
|
113
|
+
return this;
|
114
|
+
}
|
115
|
+
|
116
|
+
/**
|
117
|
+
* Removes, replaces, and inserts components in the modal.
|
118
|
+
* @param {number} index The index to start at
|
119
|
+
* @param {number} deleteCount The number of components to remove
|
120
|
+
* @param {...MessageActionRowResolvable[]} [components] The replacing components
|
121
|
+
* @returns {Modal}
|
122
|
+
*/
|
123
|
+
spliceComponents(index, deleteCount, ...components) {
|
124
|
+
this.components.splice(index, deleteCount, ...components.flat(Infinity).map(c => BaseMessageComponent.create(c)));
|
125
|
+
return this;
|
126
|
+
}
|
127
|
+
|
128
|
+
/**
|
129
|
+
* Sets the title of this modal
|
130
|
+
* @param {string} title The title to be displayed on this modal
|
131
|
+
* @returns {Modal}
|
132
|
+
*/
|
133
|
+
setTitle(title) {
|
134
|
+
this.title = Util.verifyString(title, RangeError, 'MODAL_TITLE');
|
135
|
+
return this;
|
136
|
+
}
|
137
|
+
|
138
|
+
toJSON() {
|
139
|
+
return {
|
140
|
+
components: this.components.map(c => c.toJSON()),
|
141
|
+
custom_id: this.customId,
|
142
|
+
title: this.title,
|
143
|
+
id: this.id,
|
144
|
+
};
|
145
|
+
}
|
146
|
+
|
147
|
+
/**
|
148
|
+
* @typedef {Object} TextInputComponentReplyData
|
149
|
+
* @property {string} [customId] TextInputComponent custom id
|
150
|
+
* @property {string} [value] TextInputComponent value
|
151
|
+
*/
|
152
|
+
|
153
|
+
/**
|
154
|
+
* @typedef {Object} ModalReplyData
|
155
|
+
* @property {?GuildResolvable} [guild] Guild to send the modal to
|
156
|
+
* @property {?TextChannelResolvable} [channel] User to send the modal to
|
157
|
+
* @property {?TextInputComponentReplyData[]} [data] Reply data
|
158
|
+
*/
|
159
|
+
|
160
|
+
/**
|
161
|
+
* Reply to this modal with data. (Event only)
|
162
|
+
* @param {ModalReplyData} data Data to send with the modal
|
163
|
+
* @returns {Promise<InteractionResponse>}
|
164
|
+
* @example
|
165
|
+
* client.on('interactionModalCreate', modal => {
|
166
|
+
* // 1.
|
167
|
+
* modal.reply({
|
168
|
+
* data: [
|
169
|
+
* {
|
170
|
+
* customId: 'code',
|
171
|
+
* value: '1+1'
|
172
|
+
* }, {
|
173
|
+
* customId: 'message',
|
174
|
+
* value: 'hello'
|
175
|
+
* }
|
176
|
+
* ],
|
177
|
+
* channel: 'id', // optional
|
178
|
+
* guild: 'id', // optional
|
179
|
+
* })
|
180
|
+
* // or 2.
|
181
|
+
* modal.components[0].components[0].setValue('1+1');
|
182
|
+
* modal.components[1].components[0].setValue('hello');
|
183
|
+
* modal.reply();
|
184
|
+
* })
|
185
|
+
*/
|
186
|
+
async reply(data = {}) {
|
187
|
+
if (!this.application) throw new Error('Modal cannot reply (Missing Application)');
|
188
|
+
const data_cache = this.sendFromInteraction;
|
189
|
+
const guild = this.client.guilds.resolveId(data?.guild) || data_cache.guildId || null;
|
190
|
+
const channel = this.client.channels.resolveId(data?.channel) || data_cache.channelId;
|
191
|
+
if (!channel) throw new Error('Modal cannot reply (Missing data)');
|
192
|
+
// Add data to components
|
193
|
+
// this.components = [ MessageActionRow.components = [ TextInputComponent ] ]
|
194
|
+
// 5 MessageActionRow / Modal, 1 TextInputComponent / 1 MessageActionRow
|
195
|
+
if (Array.isArray(data?.data) && data?.data?.length > 0) {
|
196
|
+
for (let i = 0; i < this.components.length; i++) {
|
197
|
+
const value = data.data.find(d => d.customId == this.components[i].components[0].customId);
|
198
|
+
if (this.components[i].components[0].required == true && !value) {
|
199
|
+
throw new Error(
|
200
|
+
'MODAL_REQUIRED_FIELD_MISSING\n' +
|
201
|
+
`Required fieldId ${this.components[i].components[0].customId} missing value`,
|
202
|
+
);
|
203
|
+
}
|
204
|
+
if (value) {
|
205
|
+
if (value?.value?.includes('\n') && this.components[i].components[0].style == 'SHORT') {
|
206
|
+
throw new Error(
|
207
|
+
'MODAL_REPLY_DATA_INVALID\n' +
|
208
|
+
`value must be a single line, got multiple lines [Custom ID: ${value.customId}]`,
|
209
|
+
);
|
210
|
+
}
|
211
|
+
this.components[i].components[0].setValue(value.value);
|
212
|
+
}
|
213
|
+
}
|
214
|
+
}
|
215
|
+
// Get Object
|
216
|
+
const dataFinal = this.toJSON();
|
217
|
+
dataFinal.components = dataFinal.components
|
218
|
+
.map(c => {
|
219
|
+
delete c.components[0].max_length;
|
220
|
+
delete c.components[0].min_length;
|
221
|
+
delete c.components[0].required;
|
222
|
+
delete c.components[0].placeholder;
|
223
|
+
delete c.components[0].label;
|
224
|
+
delete c.components[0].style;
|
225
|
+
return c;
|
226
|
+
})
|
227
|
+
.filter(c => c.components[0].value && c.components[0].value !== '');
|
228
|
+
delete dataFinal.title;
|
229
|
+
const nonce = SnowflakeUtil.generate();
|
230
|
+
const postData = {
|
231
|
+
type: 5, // Modal
|
232
|
+
application_id: this.application.id,
|
233
|
+
guild_id: guild || null,
|
234
|
+
channel_id: channel,
|
235
|
+
data: dataFinal,
|
236
|
+
nonce,
|
237
|
+
session_id: this.client.session_id,
|
238
|
+
};
|
239
|
+
await this.client.api.interactions.post({
|
240
|
+
data: postData,
|
241
|
+
});
|
242
|
+
this.client._interactionCache.set(nonce, {
|
243
|
+
channelId: channel,
|
244
|
+
guildId: guild,
|
245
|
+
metadata: postData,
|
246
|
+
});
|
247
|
+
return new Promise((resolve, reject) => {
|
248
|
+
const handler = data => {
|
249
|
+
timeout.refresh();
|
250
|
+
if (data.metadata.nonce !== nonce) return;
|
251
|
+
clearTimeout(timeout);
|
252
|
+
this.client.removeListener('interactionResponse', handler);
|
253
|
+
this.client.decrementMaxListeners();
|
254
|
+
if (data.status) {
|
255
|
+
resolve(data.metadata);
|
256
|
+
} else {
|
257
|
+
reject(
|
258
|
+
new Error('INTERACTION_ERROR', {
|
259
|
+
cause: data,
|
260
|
+
}),
|
261
|
+
);
|
262
|
+
}
|
263
|
+
};
|
264
|
+
const timeout = setTimeout(() => {
|
265
|
+
this.client.removeListener('interactionResponse', handler);
|
266
|
+
this.client.decrementMaxListeners();
|
267
|
+
reject(
|
268
|
+
new Error('INTERACTION_TIMEOUT', {
|
269
|
+
cause: postData,
|
270
|
+
}),
|
271
|
+
);
|
272
|
+
}, this.client.options.interactionTimeout).unref();
|
273
|
+
this.client.incrementMaxListeners();
|
274
|
+
this.client.on('interactionResponse', handler);
|
275
|
+
});
|
276
|
+
}
|
277
|
+
}
|
278
|
+
|
279
|
+
module.exports = Modal;
|
@@ -0,0 +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;
|
@@ -0,0 +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;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const BaseGuildTextChannel = require('./BaseGuildTextChannel');
|
4
|
+
const { Error } = require('../errors');
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Represents a guild news channel on Discord.
|
8
|
+
* @extends {BaseGuildTextChannel}
|
9
|
+
*/
|
10
|
+
class NewsChannel extends BaseGuildTextChannel {
|
11
|
+
/**
|
12
|
+
* Adds the target to this channel's followers.
|
13
|
+
* <info>If you need the created webhook id, use {@link GuildChannelManager#addFollower}.</info>
|
14
|
+
* @param {TextChannelResolvable} channel The channel where the webhook should be created
|
15
|
+
* @param {string} [reason] Reason for creating the webhook
|
16
|
+
* @returns {Promise<NewsChannel>}
|
17
|
+
* @example
|
18
|
+
* if (channel.type === 'GUILD_NEWS') {
|
19
|
+
* channel.addFollower('222197033908436994', 'Important announcements')
|
20
|
+
* .then(() => console.log('Added follower'))
|
21
|
+
* .catch(console.error);
|
22
|
+
* }
|
23
|
+
*/
|
24
|
+
async addFollower(channel, reason) {
|
25
|
+
const channelId = this.guild.channels.resolveId(channel);
|
26
|
+
if (!channelId) throw new Error('GUILD_CHANNEL_RESOLVE');
|
27
|
+
await this.client.api.channels(this.id).followers.post({ data: { webhook_channel_id: channelId }, reason });
|
28
|
+
return this;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
module.exports = NewsChannel;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const BaseGuild = require('./BaseGuild');
|
4
|
+
const Permissions = require('../util/Permissions');
|
5
|
+
|
6
|
+
/**
|
7
|
+
* A partial guild received when using {@link GuildManager#fetch} to fetch multiple guilds.
|
8
|
+
* @extends {BaseGuild}
|
9
|
+
*/
|
10
|
+
class OAuth2Guild extends BaseGuild {
|
11
|
+
constructor(client, data) {
|
12
|
+
super(client, data);
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Whether the client user is the owner of the guild
|
16
|
+
* @type {boolean}
|
17
|
+
*/
|
18
|
+
this.owner = data.owner;
|
19
|
+
|
20
|
+
/**
|
21
|
+
* The permissions that the client user has in this guild
|
22
|
+
* @type {Readonly<Permissions>}
|
23
|
+
*/
|
24
|
+
this.permissions = new Permissions(BigInt(data.permissions)).freeze();
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
module.exports = OAuth2Guild;
|