@velliajs/discord 1.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.
- package/LICENSE +191 -0
- package/README.md +133 -0
- package/package.json +82 -0
- package/src/client/BaseClient.js +83 -0
- package/src/client/Client.js +591 -0
- package/src/client/WebhookClient.js +103 -0
- package/src/client/actions/Action.js +119 -0
- package/src/client/actions/ActionsManager.js +79 -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 +23 -0
- package/src/client/actions/ChannelUpdate.js +33 -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 +44 -0
- package/src/client/actions/GuildEmojiCreate.js +20 -0
- package/src/client/actions/GuildEmojiDelete.js +19 -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 +31 -0
- package/src/client/actions/GuildMemberUpdate.js +44 -0
- package/src/client/actions/GuildRoleCreate.js +25 -0
- package/src/client/actions/GuildRoleDelete.js +29 -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 +19 -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 +101 -0
- package/src/client/actions/InviteCreate.js +28 -0
- package/src/client/actions/InviteDelete.js +30 -0
- package/src/client/actions/MessageCreate.js +37 -0
- package/src/client/actions/MessageDelete.js +32 -0
- package/src/client/actions/MessageDeleteBulk.js +47 -0
- package/src/client/actions/MessageReactionAdd.js +55 -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 +42 -0
- package/src/client/actions/StageInstanceCreate.js +28 -0
- package/src/client/actions/StageInstanceDelete.js +31 -0
- package/src/client/actions/StageInstanceUpdate.js +30 -0
- package/src/client/actions/ThreadCreate.js +24 -0
- package/src/client/actions/ThreadDelete.js +26 -0
- package/src/client/actions/ThreadListSync.js +60 -0
- package/src/client/actions/ThreadMemberUpdate.js +30 -0
- package/src/client/actions/ThreadMembersUpdate.js +47 -0
- package/src/client/actions/TypingStart.js +29 -0
- package/src/client/actions/UserUpdate.js +36 -0
- package/src/client/actions/VoiceStateUpdate.js +43 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +44 -0
- package/src/client/websocket/WebSocketManager.js +393 -0
- package/src/client/websocket/WebSocketShard.js +231 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -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/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_UPDATE.js +16 -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 +26 -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_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 +5 -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_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 +27 -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_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 +64 -0
- package/src/errors/DJSError.js +48 -0
- package/src/errors/ErrorCodes.js +319 -0
- package/src/errors/Messages.js +170 -0
- package/src/errors/index.js +5 -0
- package/src/index.js +213 -0
- package/src/managers/ApplicationCommandManager.js +263 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +434 -0
- package/src/managers/AutoModerationRuleManager.js +288 -0
- package/src/managers/BaseGuildEmojiManager.js +80 -0
- package/src/managers/BaseManager.js +19 -0
- package/src/managers/CachedManager.js +57 -0
- package/src/managers/CategoryChannelChildManager.js +77 -0
- package/src/managers/ChannelManager.js +128 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/GuildApplicationCommandManager.js +28 -0
- package/src/managers/GuildBanManager.js +204 -0
- package/src/managers/GuildChannelManager.js +494 -0
- package/src/managers/GuildEmojiManager.js +174 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildForumThreadManager.js +83 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +283 -0
- package/src/managers/GuildMemberManager.js +540 -0
- package/src/managers/GuildMemberRoleManager.js +204 -0
- package/src/managers/GuildScheduledEventManager.js +297 -0
- package/src/managers/GuildStickerManager.js +182 -0
- package/src/managers/GuildTextThreadManager.js +91 -0
- package/src/managers/MessageManager.js +259 -0
- package/src/managers/PermissionOverwriteManager.js +168 -0
- package/src/managers/PresenceManager.js +58 -0
- package/src/managers/ReactionManager.js +68 -0
- package/src/managers/ReactionUserManager.js +77 -0
- package/src/managers/RoleManager.js +360 -0
- package/src/managers/StageInstanceManager.js +154 -0
- package/src/managers/ThreadManager.js +204 -0
- package/src/managers/ThreadMemberManager.js +182 -0
- package/src/managers/UserManager.js +139 -0
- package/src/managers/VoiceStateManager.js +37 -0
- package/src/sharding/Shard.js +457 -0
- package/src/sharding/ShardClientUtil.js +285 -0
- package/src/sharding/ShardingManager.js +326 -0
- package/src/structures/ActionRow.js +46 -0
- package/src/structures/ActionRowBuilder.js +35 -0
- package/src/structures/AnonymousGuild.js +97 -0
- package/src/structures/ApplicationCommand.js +606 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +46 -0
- package/src/structures/Attachment.js +140 -0
- package/src/structures/AttachmentBuilder.js +116 -0
- package/src/structures/AutoModerationActionExecution.js +116 -0
- package/src/structures/AutoModerationRule.js +284 -0
- package/src/structures/AutocompleteInteraction.js +97 -0
- package/src/structures/Base.js +43 -0
- package/src/structures/BaseChannel.js +160 -0
- package/src/structures/BaseGuild.js +119 -0
- package/src/structures/BaseGuildEmoji.js +56 -0
- package/src/structures/BaseGuildTextChannel.js +186 -0
- package/src/structures/BaseGuildVoiceChannel.js +234 -0
- package/src/structures/BaseInteraction.js +344 -0
- package/src/structures/BaseSelectMenuComponent.js +56 -0
- package/src/structures/ButtonBuilder.js +44 -0
- package/src/structures/ButtonComponent.js +65 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/CategoryChannel.js +45 -0
- package/src/structures/ChannelSelectMenuBuilder.js +31 -0
- package/src/structures/ChannelSelectMenuComponent.js +20 -0
- package/src/structures/ChannelSelectMenuInteraction.js +33 -0
- package/src/structures/ChatInputCommandInteraction.js +41 -0
- package/src/structures/ClientApplication.js +193 -0
- package/src/structures/ClientPresence.js +82 -0
- package/src/structures/ClientUser.js +185 -0
- package/src/structures/CommandInteraction.js +224 -0
- package/src/structures/CommandInteractionOptionResolver.js +308 -0
- package/src/structures/Component.js +47 -0
- package/src/structures/ContextMenuCommandInteraction.js +64 -0
- package/src/structures/DMChannel.js +129 -0
- package/src/structures/DirectoryChannel.js +36 -0
- package/src/structures/Embed.js +220 -0
- package/src/structures/EmbedBuilder.js +41 -0
- package/src/structures/Emoji.js +108 -0
- package/src/structures/ForumChannel.js +264 -0
- package/src/structures/Guild.js +1361 -0
- package/src/structures/GuildAuditLogs.js +91 -0
- package/src/structures/GuildAuditLogsEntry.js +527 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildChannel.js +457 -0
- package/src/structures/GuildEmoji.js +148 -0
- package/src/structures/GuildMember.js +518 -0
- package/src/structures/GuildPreview.js +193 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +439 -0
- package/src/structures/GuildTemplate.js +241 -0
- package/src/structures/Integration.js +220 -0
- package/src/structures/IntegrationApplication.js +85 -0
- package/src/structures/InteractionCollector.js +263 -0
- package/src/structures/InteractionResponse.js +102 -0
- package/src/structures/InteractionWebhook.js +59 -0
- package/src/structures/Invite.js +322 -0
- package/src/structures/InviteGuild.js +22 -0
- package/src/structures/InviteStageInstance.js +87 -0
- package/src/structures/MentionableSelectMenuBuilder.js +32 -0
- package/src/structures/MentionableSelectMenuComponent.js +11 -0
- package/src/structures/MentionableSelectMenuInteraction.js +71 -0
- package/src/structures/Message.js +997 -0
- package/src/structures/MessageCollector.js +146 -0
- package/src/structures/MessageComponentInteraction.js +107 -0
- package/src/structures/MessageContextMenuCommandInteraction.js +20 -0
- package/src/structures/MessageMentions.js +297 -0
- package/src/structures/MessagePayload.js +299 -0
- package/src/structures/MessageReaction.js +142 -0
- package/src/structures/ModalBuilder.js +34 -0
- package/src/structures/ModalSubmitFields.js +55 -0
- package/src/structures/ModalSubmitInteraction.js +121 -0
- package/src/structures/NewsChannel.js +32 -0
- package/src/structures/OAuth2Guild.js +28 -0
- package/src/structures/PartialGroupDMChannel.js +60 -0
- package/src/structures/PermissionOverwrites.js +196 -0
- package/src/structures/Presence.js +372 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/Role.js +458 -0
- package/src/structures/RoleSelectMenuBuilder.js +31 -0
- package/src/structures/RoleSelectMenuComponent.js +11 -0
- package/src/structures/RoleSelectMenuInteraction.js +33 -0
- package/src/structures/SelectMenuBuilder.js +26 -0
- package/src/structures/SelectMenuComponent.js +26 -0
- package/src/structures/SelectMenuInteraction.js +26 -0
- package/src/structures/SelectMenuOptionBuilder.js +26 -0
- package/src/structures/StageChannel.js +112 -0
- package/src/structures/StageInstance.js +167 -0
- package/src/structures/Sticker.js +272 -0
- package/src/structures/StickerPack.js +95 -0
- package/src/structures/StringSelectMenuBuilder.js +79 -0
- package/src/structures/StringSelectMenuComponent.js +20 -0
- package/src/structures/StringSelectMenuInteraction.js +21 -0
- package/src/structures/StringSelectMenuOptionBuilder.js +49 -0
- package/src/structures/Team.js +117 -0
- package/src/structures/TeamMember.js +70 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextInputBuilder.js +31 -0
- package/src/structures/TextInputComponent.js +29 -0
- package/src/structures/ThreadChannel.js +606 -0
- package/src/structures/ThreadMember.js +113 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/User.js +331 -0
- package/src/structures/UserContextMenuCommandInteraction.js +29 -0
- package/src/structures/UserSelectMenuBuilder.js +31 -0
- package/src/structures/UserSelectMenuComponent.js +11 -0
- package/src/structures/UserSelectMenuInteraction.js +51 -0
- package/src/structures/VoiceChannel.js +96 -0
- package/src/structures/VoiceRegion.js +46 -0
- package/src/structures/VoiceState.js +303 -0
- package/src/structures/Webhook.js +481 -0
- package/src/structures/WelcomeChannel.js +60 -0
- package/src/structures/WelcomeScreen.js +49 -0
- package/src/structures/Widget.js +88 -0
- package/src/structures/WidgetMember.js +99 -0
- package/src/structures/interfaces/Application.js +108 -0
- package/src/structures/interfaces/Collector.js +335 -0
- package/src/structures/interfaces/InteractionResponses.js +320 -0
- package/src/structures/interfaces/TextBasedChannel.js +413 -0
- package/src/util/APITypes.js +456 -0
- package/src/util/ActivityFlagsBitField.js +26 -0
- package/src/util/ApplicationFlagsBitField.js +26 -0
- package/src/util/BitField.js +176 -0
- package/src/util/ChannelFlagsBitField.js +41 -0
- package/src/util/Channels.js +150 -0
- package/src/util/Colors.js +73 -0
- package/src/util/Components.js +152 -0
- package/src/util/Constants.js +230 -0
- package/src/util/DataResolver.js +140 -0
- package/src/util/Enums.js +13 -0
- package/src/util/Events.js +160 -0
- package/src/util/Formatters.js +413 -0
- package/src/util/GuildMemberFlagsBitField.js +41 -0
- package/src/util/IntentsBitField.js +34 -0
- package/src/util/LimitedCollection.js +68 -0
- package/src/util/MessageFlagsBitField.js +32 -0
- package/src/util/Options.js +216 -0
- package/src/util/Partials.js +44 -0
- package/src/util/PermissionsBitField.js +104 -0
- package/src/util/ShardEvents.js +27 -0
- package/src/util/Status.js +33 -0
- package/src/util/Sweepers.js +467 -0
- package/src/util/SystemChannelFlagsBitField.js +43 -0
- package/src/util/ThreadMemberFlagsBitField.js +31 -0
- package/src/util/Transformers.js +36 -0
- package/src/util/UserFlagsBitField.js +32 -0
- package/src/util/Util.js +394 -0
- package/src/util/WebSocketShardEvents.js +25 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Routes } = require('discord-api-types/v10');
|
|
4
|
+
const Base = require('./Base');
|
|
5
|
+
const IntegrationApplication = require('./IntegrationApplication');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The information account for an integration
|
|
9
|
+
* @typedef {Object} IntegrationAccount
|
|
10
|
+
* @property {Snowflake|string} id The id of the account
|
|
11
|
+
* @property {string} name The name of the account
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The type of an {@link Integration}. This can be:
|
|
16
|
+
* * `twitch`
|
|
17
|
+
* * `youtube`
|
|
18
|
+
* * `discord`
|
|
19
|
+
* * `guild_subscription`
|
|
20
|
+
* @typedef {string} IntegrationType
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Represents a guild integration.
|
|
25
|
+
* @extends {Base}
|
|
26
|
+
*/
|
|
27
|
+
class Integration extends Base {
|
|
28
|
+
constructor(client, data, guild) {
|
|
29
|
+
super(client);
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The guild this integration belongs to
|
|
33
|
+
* @type {Guild}
|
|
34
|
+
*/
|
|
35
|
+
this.guild = guild;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The integration id
|
|
39
|
+
* @type {Snowflake|string}
|
|
40
|
+
*/
|
|
41
|
+
this.id = data.id;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The integration name
|
|
45
|
+
* @type {string}
|
|
46
|
+
*/
|
|
47
|
+
this.name = data.name;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The integration type
|
|
51
|
+
* @type {IntegrationType}
|
|
52
|
+
*/
|
|
53
|
+
this.type = data.type;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Whether this integration is enabled
|
|
57
|
+
* @type {?boolean}
|
|
58
|
+
*/
|
|
59
|
+
this.enabled = data.enabled ?? null;
|
|
60
|
+
|
|
61
|
+
if ('syncing' in data) {
|
|
62
|
+
/**
|
|
63
|
+
* Whether this integration is syncing
|
|
64
|
+
* @type {?boolean}
|
|
65
|
+
*/
|
|
66
|
+
this.syncing = data.syncing;
|
|
67
|
+
} else {
|
|
68
|
+
this.syncing ??= null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The role that this integration uses for subscribers
|
|
73
|
+
* @type {?Role}
|
|
74
|
+
*/
|
|
75
|
+
this.role = this.guild.roles.resolve(data.role_id);
|
|
76
|
+
|
|
77
|
+
if ('enable_emoticons' in data) {
|
|
78
|
+
/**
|
|
79
|
+
* Whether emoticons should be synced for this integration (twitch only currently)
|
|
80
|
+
* @type {?boolean}
|
|
81
|
+
*/
|
|
82
|
+
this.enableEmoticons = data.enable_emoticons;
|
|
83
|
+
} else {
|
|
84
|
+
this.enableEmoticons ??= null;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (data.user) {
|
|
88
|
+
/**
|
|
89
|
+
* The user for this integration
|
|
90
|
+
* @type {?User}
|
|
91
|
+
*/
|
|
92
|
+
this.user = this.client.users._add(data.user);
|
|
93
|
+
} else {
|
|
94
|
+
this.user ??= null;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The account integration information
|
|
99
|
+
* @type {IntegrationAccount}
|
|
100
|
+
*/
|
|
101
|
+
this.account = data.account;
|
|
102
|
+
|
|
103
|
+
if ('synced_at' in data) {
|
|
104
|
+
/**
|
|
105
|
+
* The timestamp at which this integration was last synced at
|
|
106
|
+
* @type {?number}
|
|
107
|
+
*/
|
|
108
|
+
this.syncedTimestamp = Date.parse(data.synced_at);
|
|
109
|
+
} else {
|
|
110
|
+
this.syncedTimestamp ??= null;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if ('subscriber_count' in data) {
|
|
114
|
+
/**
|
|
115
|
+
* How many subscribers this integration has
|
|
116
|
+
* @type {?number}
|
|
117
|
+
*/
|
|
118
|
+
this.subscriberCount = data.subscriber_count;
|
|
119
|
+
} else {
|
|
120
|
+
this.subscriberCount ??= null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if ('revoked' in data) {
|
|
124
|
+
/**
|
|
125
|
+
* Whether this integration has been revoked
|
|
126
|
+
* @type {?boolean}
|
|
127
|
+
*/
|
|
128
|
+
this.revoked = data.revoked;
|
|
129
|
+
} else {
|
|
130
|
+
this.revoked ??= null;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
this._patch(data);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* The date at which this integration was last synced at
|
|
138
|
+
* @type {?Date}
|
|
139
|
+
* @readonly
|
|
140
|
+
*/
|
|
141
|
+
get syncedAt() {
|
|
142
|
+
return this.syncedTimestamp && new Date(this.syncedTimestamp);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* All roles that are managed by this integration
|
|
147
|
+
* @type {Collection<Snowflake, Role>}
|
|
148
|
+
* @readonly
|
|
149
|
+
*/
|
|
150
|
+
get roles() {
|
|
151
|
+
const roles = this.guild.roles.cache;
|
|
152
|
+
return roles.filter(role => role.tags?.integrationId === this.id);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
_patch(data) {
|
|
156
|
+
if ('expire_behavior' in data) {
|
|
157
|
+
/**
|
|
158
|
+
* The behavior of expiring subscribers
|
|
159
|
+
* @type {?IntegrationExpireBehavior}
|
|
160
|
+
*/
|
|
161
|
+
this.expireBehavior = data.expire_behavior;
|
|
162
|
+
} else {
|
|
163
|
+
this.expireBehavior ??= null;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if ('expire_grace_period' in data) {
|
|
167
|
+
/**
|
|
168
|
+
* The grace period (in days) before expiring subscribers
|
|
169
|
+
* @type {?number}
|
|
170
|
+
*/
|
|
171
|
+
this.expireGracePeriod = data.expire_grace_period;
|
|
172
|
+
} else {
|
|
173
|
+
this.expireGracePeriod ??= null;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if ('application' in data) {
|
|
177
|
+
if (this.application) {
|
|
178
|
+
this.application._patch(data.application);
|
|
179
|
+
} else {
|
|
180
|
+
/**
|
|
181
|
+
* The application for this integration
|
|
182
|
+
* @type {?IntegrationApplication}
|
|
183
|
+
*/
|
|
184
|
+
this.application = new IntegrationApplication(this.client, data.application);
|
|
185
|
+
}
|
|
186
|
+
} else {
|
|
187
|
+
this.application ??= null;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if ('scopes' in data) {
|
|
191
|
+
/**
|
|
192
|
+
* The scopes this application has been authorized for
|
|
193
|
+
* @type {OAuth2Scopes[]}
|
|
194
|
+
*/
|
|
195
|
+
this.scopes = data.scopes;
|
|
196
|
+
} else {
|
|
197
|
+
this.scopes ??= [];
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Deletes this integration.
|
|
203
|
+
* @returns {Promise<Integration>}
|
|
204
|
+
* @param {string} [reason] Reason for deleting this integration
|
|
205
|
+
*/
|
|
206
|
+
async delete(reason) {
|
|
207
|
+
await this.client.rest.delete(Routes.guildIntegration(this.guild.id, this.id), { reason });
|
|
208
|
+
return this;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
toJSON() {
|
|
212
|
+
return super.toJSON({
|
|
213
|
+
role: 'roleId',
|
|
214
|
+
guild: 'guildId',
|
|
215
|
+
user: 'userId',
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
module.exports = Integration;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Application = require('./interfaces/Application');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Represents an Integration's OAuth2 Application.
|
|
7
|
+
* @extends {Application}
|
|
8
|
+
*/
|
|
9
|
+
class IntegrationApplication extends Application {
|
|
10
|
+
_patch(data) {
|
|
11
|
+
super._patch(data);
|
|
12
|
+
|
|
13
|
+
if ('bot' in data) {
|
|
14
|
+
/**
|
|
15
|
+
* The bot user for this application
|
|
16
|
+
* @type {?User}
|
|
17
|
+
*/
|
|
18
|
+
this.bot = this.client.users._add(data.bot);
|
|
19
|
+
} else {
|
|
20
|
+
this.bot ??= null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if ('terms_of_service_url' in data) {
|
|
24
|
+
/**
|
|
25
|
+
* The URL of the application's terms of service
|
|
26
|
+
* @type {?string}
|
|
27
|
+
*/
|
|
28
|
+
this.termsOfServiceURL = data.terms_of_service_url;
|
|
29
|
+
} else {
|
|
30
|
+
this.termsOfServiceURL ??= null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if ('privacy_policy_url' in data) {
|
|
34
|
+
/**
|
|
35
|
+
* The URL of the application's privacy policy
|
|
36
|
+
* @type {?string}
|
|
37
|
+
*/
|
|
38
|
+
this.privacyPolicyURL = data.privacy_policy_url;
|
|
39
|
+
} else {
|
|
40
|
+
this.privacyPolicyURL ??= null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if ('rpc_origins' in data) {
|
|
44
|
+
/**
|
|
45
|
+
* The Array of RPC origin URLs
|
|
46
|
+
* @type {string[]}
|
|
47
|
+
*/
|
|
48
|
+
this.rpcOrigins = data.rpc_origins;
|
|
49
|
+
} else {
|
|
50
|
+
this.rpcOrigins ??= [];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if ('hook' in data) {
|
|
54
|
+
/**
|
|
55
|
+
* Whether the application can be default hooked by the client
|
|
56
|
+
* @type {?boolean}
|
|
57
|
+
*/
|
|
58
|
+
this.hook = data.hook;
|
|
59
|
+
} else {
|
|
60
|
+
this.hook ??= null;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if ('cover_image' in data) {
|
|
64
|
+
/**
|
|
65
|
+
* The hash of the application's cover image
|
|
66
|
+
* @type {?string}
|
|
67
|
+
*/
|
|
68
|
+
this.cover = data.cover_image;
|
|
69
|
+
} else {
|
|
70
|
+
this.cover ??= null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if ('verify_key' in data) {
|
|
74
|
+
/**
|
|
75
|
+
* The hex-encoded key for verification in interactions and the GameSDK's GetTicket
|
|
76
|
+
* @type {?string}
|
|
77
|
+
*/
|
|
78
|
+
this.verifyKey = data.verify_key;
|
|
79
|
+
} else {
|
|
80
|
+
this.verifyKey ??= null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
module.exports = IntegrationApplication;
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const Collector = require('./interfaces/Collector');
|
|
5
|
+
const Events = require('../util/Events');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {CollectorOptions} InteractionCollectorOptions
|
|
9
|
+
* @property {TextBasedChannelsResolvable} [channel] The channel to listen to interactions from
|
|
10
|
+
* @property {ComponentType} [componentType] The type of component to listen for
|
|
11
|
+
* @property {GuildResolvable} [guild] The guild to listen to interactions from
|
|
12
|
+
* @property {InteractionType} [interactionType] The type of interaction to listen for
|
|
13
|
+
* @property {number} [max] The maximum total amount of interactions to collect
|
|
14
|
+
* @property {number} [maxComponents] The maximum number of components to collect
|
|
15
|
+
* @property {number} [maxUsers] The maximum number of users to interact
|
|
16
|
+
* @property {Message|APIMessage} [message] The message to listen to interactions from
|
|
17
|
+
* @property {InteractionResponse} [interactionResponse] The interaction response to listen
|
|
18
|
+
* to message component interactions from
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Collects interactions.
|
|
23
|
+
* Will automatically stop if the message ({@link Client#event:messageDelete messageDelete} or
|
|
24
|
+
* {@link Client#event:messageDeleteBulk messageDeleteBulk}),
|
|
25
|
+
* channel ({@link Client#event:channelDelete channelDelete}), or
|
|
26
|
+
* guild ({@link Client#event:guildDelete guildDelete}) is deleted.
|
|
27
|
+
* <info>Interaction collectors that do not specify `time` or `idle` may be prone to always running.
|
|
28
|
+
* Ensure your interaction collectors end via either of these options or manual cancellation.</info>
|
|
29
|
+
* @extends {Collector}
|
|
30
|
+
*/
|
|
31
|
+
class InteractionCollector extends Collector {
|
|
32
|
+
/**
|
|
33
|
+
* @param {Client} client The client on which to collect interactions
|
|
34
|
+
* @param {InteractionCollectorOptions} [options={}] The options to apply to this collector
|
|
35
|
+
*/
|
|
36
|
+
constructor(client, options = {}) {
|
|
37
|
+
super(client, options);
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The message from which to collect interactions, if provided
|
|
41
|
+
* @type {?Snowflake}
|
|
42
|
+
*/
|
|
43
|
+
this.messageId = options.message?.id ?? null;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The message interaction id from which to collect interactions, if provided
|
|
47
|
+
* @type {?Snowflake}
|
|
48
|
+
*/
|
|
49
|
+
this.messageInteractionId = options.interactionResponse?.id ?? null;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The channel from which to collect interactions, if provided
|
|
53
|
+
* @type {?Snowflake}
|
|
54
|
+
*/
|
|
55
|
+
this.channelId =
|
|
56
|
+
options.interactionResponse?.interaction.channelId ??
|
|
57
|
+
options.message?.channelId ??
|
|
58
|
+
options.message?.channel_id ??
|
|
59
|
+
this.client.channels.resolveId(options.channel);
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The guild from which to collect interactions, if provided
|
|
63
|
+
* @type {?Snowflake}
|
|
64
|
+
*/
|
|
65
|
+
this.guildId =
|
|
66
|
+
options.interactionResponse?.interaction.guildId ??
|
|
67
|
+
options.message?.guildId ??
|
|
68
|
+
options.message?.guild_id ??
|
|
69
|
+
this.client.guilds.resolveId(options.channel?.guild) ??
|
|
70
|
+
this.client.guilds.resolveId(options.guild);
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The type of interaction to collect
|
|
74
|
+
* @type {?InteractionType}
|
|
75
|
+
*/
|
|
76
|
+
this.interactionType = options.interactionType ?? null;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* The type of component to collect
|
|
80
|
+
* @type {?ComponentType}
|
|
81
|
+
*/
|
|
82
|
+
this.componentType = options.componentType ?? null;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The users that have interacted with this collector
|
|
86
|
+
* @type {Collection<Snowflake, User>}
|
|
87
|
+
*/
|
|
88
|
+
this.users = new Collection();
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The total number of interactions collected
|
|
92
|
+
* @type {number}
|
|
93
|
+
*/
|
|
94
|
+
this.total = 0;
|
|
95
|
+
|
|
96
|
+
this.client.incrementMaxListeners();
|
|
97
|
+
|
|
98
|
+
const bulkDeleteListener = messages => {
|
|
99
|
+
if (messages.has(this.messageId)) this.stop('messageDelete');
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
if (this.messageId || this.messageInteractionId) {
|
|
103
|
+
this._handleMessageDeletion = this._handleMessageDeletion.bind(this);
|
|
104
|
+
this.client.on(Events.MessageDelete, this._handleMessageDeletion);
|
|
105
|
+
this.client.on(Events.MessageBulkDelete, bulkDeleteListener);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (this.channelId) {
|
|
109
|
+
this._handleChannelDeletion = this._handleChannelDeletion.bind(this);
|
|
110
|
+
this._handleThreadDeletion = this._handleThreadDeletion.bind(this);
|
|
111
|
+
this.client.on(Events.ChannelDelete, this._handleChannelDeletion);
|
|
112
|
+
this.client.on(Events.ThreadDelete, this._handleThreadDeletion);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (this.guildId) {
|
|
116
|
+
this._handleGuildDeletion = this._handleGuildDeletion.bind(this);
|
|
117
|
+
this.client.on(Events.GuildDelete, this._handleGuildDeletion);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
this.client.on(Events.InteractionCreate, this.handleCollect);
|
|
121
|
+
|
|
122
|
+
this.once('end', () => {
|
|
123
|
+
this.client.removeListener(Events.InteractionCreate, this.handleCollect);
|
|
124
|
+
this.client.removeListener(Events.MessageDelete, this._handleMessageDeletion);
|
|
125
|
+
this.client.removeListener(Events.MessageBulkDelete, bulkDeleteListener);
|
|
126
|
+
this.client.removeListener(Events.ChannelDelete, this._handleChannelDeletion);
|
|
127
|
+
this.client.removeListener(Events.ThreadDelete, this._handleThreadDeletion);
|
|
128
|
+
this.client.removeListener(Events.GuildDelete, this._handleGuildDeletion);
|
|
129
|
+
this.client.decrementMaxListeners();
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
this.on('collect', interaction => {
|
|
133
|
+
this.total++;
|
|
134
|
+
this.users.set(interaction.user.id, interaction.user);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Handles an incoming interaction for possible collection.
|
|
140
|
+
* @param {BaseInteraction} interaction The interaction to possibly collect
|
|
141
|
+
* @returns {?Snowflake}
|
|
142
|
+
* @private
|
|
143
|
+
*/
|
|
144
|
+
collect(interaction) {
|
|
145
|
+
/**
|
|
146
|
+
* Emitted whenever an interaction is collected.
|
|
147
|
+
* @event InteractionCollector#collect
|
|
148
|
+
* @param {BaseInteraction} interaction The interaction that was collected
|
|
149
|
+
*/
|
|
150
|
+
|
|
151
|
+
if (this.interactionType && interaction.type !== this.interactionType) return null;
|
|
152
|
+
if (this.componentType && interaction.componentType !== this.componentType) return null;
|
|
153
|
+
if (this.messageId && interaction.message?.id !== this.messageId) return null;
|
|
154
|
+
if (
|
|
155
|
+
this.messageInteractionId &&
|
|
156
|
+
interaction.message?.interaction?.id &&
|
|
157
|
+
interaction.message.interaction.id !== this.messageInteractionId
|
|
158
|
+
) {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
if (this.channelId && interaction.channelId !== this.channelId) return null;
|
|
162
|
+
if (this.guildId && interaction.guildId !== this.guildId) return null;
|
|
163
|
+
|
|
164
|
+
return interaction.id;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Handles an interaction for possible disposal.
|
|
169
|
+
* @param {BaseInteraction} interaction The interaction that could be disposed of
|
|
170
|
+
* @returns {?Snowflake}
|
|
171
|
+
*/
|
|
172
|
+
dispose(interaction) {
|
|
173
|
+
/**
|
|
174
|
+
* Emitted whenever an interaction is disposed of.
|
|
175
|
+
* @event InteractionCollector#dispose
|
|
176
|
+
* @param {BaseInteraction} interaction The interaction that was disposed of
|
|
177
|
+
*/
|
|
178
|
+
if (this.type && interaction.type !== this.type) return null;
|
|
179
|
+
if (this.componentType && interaction.componentType !== this.componentType) return null;
|
|
180
|
+
if (this.messageId && interaction.message?.id !== this.messageId) return null;
|
|
181
|
+
if (this.messageInteractionId && interaction.message?.interaction?.id !== this.messageInteractionId) return null;
|
|
182
|
+
if (this.channelId && interaction.channelId !== this.channelId) return null;
|
|
183
|
+
if (this.guildId && interaction.guildId !== this.guildId) return null;
|
|
184
|
+
|
|
185
|
+
return interaction.id;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Empties this interaction collector.
|
|
190
|
+
*/
|
|
191
|
+
empty() {
|
|
192
|
+
this.total = 0;
|
|
193
|
+
this.collected.clear();
|
|
194
|
+
this.users.clear();
|
|
195
|
+
this.checkEnd();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* The reason this collector has ended with, or null if it hasn't ended yet
|
|
200
|
+
* @type {?string}
|
|
201
|
+
* @readonly
|
|
202
|
+
*/
|
|
203
|
+
get endReason() {
|
|
204
|
+
if (this.options.max && this.total >= this.options.max) return 'limit';
|
|
205
|
+
if (this.options.maxComponents && this.collected.size >= this.options.maxComponents) return 'componentLimit';
|
|
206
|
+
if (this.options.maxUsers && this.users.size >= this.options.maxUsers) return 'userLimit';
|
|
207
|
+
return super.endReason;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Handles checking if the message has been deleted, and if so, stops the collector with the reason 'messageDelete'.
|
|
212
|
+
* @private
|
|
213
|
+
* @param {Message} message The message that was deleted
|
|
214
|
+
* @returns {void}
|
|
215
|
+
*/
|
|
216
|
+
_handleMessageDeletion(message) {
|
|
217
|
+
if (message.id === this.messageId) {
|
|
218
|
+
this.stop('messageDelete');
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if (message.interaction?.id === this.messageInteractionId) {
|
|
222
|
+
this.stop('messageDelete');
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.
|
|
228
|
+
* @private
|
|
229
|
+
* @param {GuildChannel} channel The channel that was deleted
|
|
230
|
+
* @returns {void}
|
|
231
|
+
*/
|
|
232
|
+
_handleChannelDeletion(channel) {
|
|
233
|
+
if (channel.id === this.channelId || channel.threads?.cache.has(this.channelId)) {
|
|
234
|
+
this.stop('channelDelete');
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.
|
|
240
|
+
* @private
|
|
241
|
+
* @param {ThreadChannel} thread The thread that was deleted
|
|
242
|
+
* @returns {void}
|
|
243
|
+
*/
|
|
244
|
+
_handleThreadDeletion(thread) {
|
|
245
|
+
if (thread.id === this.channelId) {
|
|
246
|
+
this.stop('threadDelete');
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.
|
|
252
|
+
* @private
|
|
253
|
+
* @param {Guild} guild The guild that was deleted
|
|
254
|
+
* @returns {void}
|
|
255
|
+
*/
|
|
256
|
+
_handleGuildDeletion(guild) {
|
|
257
|
+
if (guild.id === this.guildId) {
|
|
258
|
+
this.stop('guildDelete');
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
module.exports = InteractionCollector;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { DiscordSnowflake } = require('@sapphire/snowflake');
|
|
4
|
+
const { InteractionType } = require('discord-api-types/v10');
|
|
5
|
+
const { DiscordjsError, ErrorCodes } = require('../errors');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Represents an interaction's response
|
|
9
|
+
*/
|
|
10
|
+
class InteractionResponse {
|
|
11
|
+
constructor(interaction, id) {
|
|
12
|
+
/**
|
|
13
|
+
* The interaction associated with the interaction response
|
|
14
|
+
* @type {BaseInteraction}
|
|
15
|
+
*/
|
|
16
|
+
this.interaction = interaction;
|
|
17
|
+
/**
|
|
18
|
+
* The id of the original interaction response
|
|
19
|
+
* @type {Snowflake}
|
|
20
|
+
*/
|
|
21
|
+
this.id = id ?? interaction.id;
|
|
22
|
+
this.client = interaction.client;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The timestamp the interaction response was created at
|
|
27
|
+
* @type {number}
|
|
28
|
+
* @readonly
|
|
29
|
+
*/
|
|
30
|
+
get createdTimestamp() {
|
|
31
|
+
return DiscordSnowflake.timestampFrom(this.id);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The time the interaction response was created at
|
|
36
|
+
* @type {Date}
|
|
37
|
+
* @readonly
|
|
38
|
+
*/
|
|
39
|
+
get createdAt() {
|
|
40
|
+
return new Date(this.createdTimestamp);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Collects a single component interaction that passes the filter.
|
|
45
|
+
* The Promise will reject if the time expires.
|
|
46
|
+
* @param {AwaitMessageComponentOptions} [options={}] Options to pass to the internal collector
|
|
47
|
+
* @returns {Promise<MessageComponentInteraction>}
|
|
48
|
+
*/
|
|
49
|
+
awaitMessageComponent(options = {}) {
|
|
50
|
+
const _options = { ...options, max: 1 };
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
const collector = this.createMessageComponentCollector(_options);
|
|
53
|
+
collector.once('end', (interactions, reason) => {
|
|
54
|
+
const interaction = interactions.first();
|
|
55
|
+
if (interaction) resolve(interaction);
|
|
56
|
+
else reject(new DiscordjsError(ErrorCodes.InteractionCollectorError, reason));
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Creates a message component interaction collector
|
|
63
|
+
* @param {MessageComponentCollectorOptions} [options={}] Options to send to the collector
|
|
64
|
+
* @returns {InteractionCollector}
|
|
65
|
+
*/
|
|
66
|
+
createMessageComponentCollector(options = {}) {
|
|
67
|
+
return new InteractionCollector(this.client, {
|
|
68
|
+
...options,
|
|
69
|
+
interactionResponse: this,
|
|
70
|
+
interactionType: InteractionType.MessageComponent,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Fetches the response as a {@link Message} object.
|
|
76
|
+
* @returns {Promise<Message>}
|
|
77
|
+
*/
|
|
78
|
+
fetch() {
|
|
79
|
+
return this.interaction.fetchReply();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Deletes the response.
|
|
84
|
+
* @returns {Promise<void>}
|
|
85
|
+
*/
|
|
86
|
+
delete() {
|
|
87
|
+
return this.interaction.deleteReply();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Edits the response.
|
|
92
|
+
* @param {string|MessagePayload|WebhookMessageEditOptions} options The new options for the response.
|
|
93
|
+
* @returns {Promise<Message>}
|
|
94
|
+
*/
|
|
95
|
+
edit(options) {
|
|
96
|
+
return this.interaction.editReply(options);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// eslint-disable-next-line import/order
|
|
101
|
+
const InteractionCollector = require('./InteractionCollector');
|
|
102
|
+
module.exports = InteractionResponse;
|