summaryrefslogtreecommitdiff
path: root/node_modules/discord.js/src/structures/MessageComponentInteraction.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/discord.js/src/structures/MessageComponentInteraction.js')
-rw-r--r--node_modules/discord.js/src/structures/MessageComponentInteraction.js107
1 files changed, 107 insertions, 0 deletions
diff --git a/node_modules/discord.js/src/structures/MessageComponentInteraction.js b/node_modules/discord.js/src/structures/MessageComponentInteraction.js
new file mode 100644
index 0000000..47b31e0
--- /dev/null
+++ b/node_modules/discord.js/src/structures/MessageComponentInteraction.js
@@ -0,0 +1,107 @@
+'use strict';
+
+const { lazy } = require('@discordjs/util');
+const BaseInteraction = require('./BaseInteraction');
+const InteractionWebhook = require('./InteractionWebhook');
+const InteractionResponses = require('./interfaces/InteractionResponses');
+
+const getMessage = lazy(() => require('./Message').Message);
+
+/**
+ * Represents a message component interaction.
+ * @extends {BaseInteraction}
+ * @implements {InteractionResponses}
+ */
+class MessageComponentInteraction extends BaseInteraction {
+ constructor(client, data) {
+ super(client, data);
+
+ /**
+ * The id of the channel this interaction was sent in
+ * @type {Snowflake}
+ * @name MessageComponentInteraction#channelId
+ */
+
+ /**
+ * The message to which the component was attached
+ * @type {Message}
+ */
+ this.message = this.channel?.messages._add(data.message) ?? new (getMessage())(client, data.message);
+
+ /**
+ * The custom id of the component which was interacted with
+ * @type {string}
+ */
+ this.customId = data.data.custom_id;
+
+ /**
+ * The type of component which was interacted with
+ * @type {ComponentType}
+ */
+ this.componentType = data.data.component_type;
+
+ /**
+ * Whether the reply to this interaction has been deferred
+ * @type {boolean}
+ */
+ this.deferred = false;
+
+ /**
+ * Whether the reply to this interaction is ephemeral
+ * @type {?boolean}
+ */
+ this.ephemeral = null;
+
+ /**
+ * Whether this interaction has already been replied to
+ * @type {boolean}
+ */
+ this.replied = false;
+
+ /**
+ * An associated interaction webhook, can be used to further interact with this interaction
+ * @type {InteractionWebhook}
+ */
+ this.webhook = new InteractionWebhook(this.client, this.applicationId, this.token);
+ }
+
+ /**
+ * Components that can be placed in an action row for messages.
+ * * ButtonComponent
+ * * StringSelectMenuComponent
+ * * UserSelectMenuComponent
+ * * RoleSelectMenuComponent
+ * * MentionableSelectMenuComponent
+ * * ChannelSelectMenuComponent
+ * @typedef {ButtonComponent|StringSelectMenuComponent|UserSelectMenuComponent|
+ * RoleSelectMenuComponent|MentionableSelectMenuComponent|ChannelSelectMenuComponent} MessageActionRowComponent
+ */
+
+ /**
+ * The component which was interacted with
+ * @type {MessageActionRowComponent|APIMessageActionRowComponent}
+ * @readonly
+ */
+ get component() {
+ return this.message.components
+ .flatMap(row => row.components)
+ .find(component => (component.customId ?? component.custom_id) === this.customId);
+ }
+
+ // These are here only for documentation purposes - they are implemented by InteractionResponses
+ /* eslint-disable no-empty-function */
+ deferReply() {}
+ reply() {}
+ fetchReply() {}
+ editReply() {}
+ deleteReply() {}
+ followUp() {}
+ deferUpdate() {}
+ update() {}
+ showModal() {}
+ awaitModalSubmit() {}
+}
+
+InteractionResponses.applyToClass(MessageComponentInteraction);
+
+module.exports = MessageComponentInteraction;