diff options
Diffstat (limited to 'node_modules/discord.js/src/structures/ContextMenuCommandInteraction.js')
-rw-r--r-- | node_modules/discord.js/src/structures/ContextMenuCommandInteraction.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/node_modules/discord.js/src/structures/ContextMenuCommandInteraction.js b/node_modules/discord.js/src/structures/ContextMenuCommandInteraction.js new file mode 100644 index 0000000..fc49ca5 --- /dev/null +++ b/node_modules/discord.js/src/structures/ContextMenuCommandInteraction.js @@ -0,0 +1,64 @@ +'use strict'; + +const { lazy } = require('@discordjs/util'); +const { ApplicationCommandOptionType } = require('discord-api-types/v10'); +const CommandInteraction = require('./CommandInteraction'); +const CommandInteractionOptionResolver = require('./CommandInteractionOptionResolver'); + +const getMessage = lazy(() => require('./Message').Message); + +/** + * Represents a context menu interaction. + * @extends {CommandInteraction} + */ +class ContextMenuCommandInteraction extends CommandInteraction { + constructor(client, data) { + super(client, data); + /** + * The target of the interaction, parsed into options + * @type {CommandInteractionOptionResolver} + */ + this.options = new CommandInteractionOptionResolver( + this.client, + this.resolveContextMenuOptions(data.data), + this.transformResolved(data.data.resolved), + ); + + /** + * The id of the target of this interaction + * @type {Snowflake} + */ + this.targetId = data.data.target_id; + } + + /** + * Resolves and transforms options received from the API for a context menu interaction. + * @param {APIApplicationCommandInteractionData} data The interaction data + * @returns {CommandInteractionOption[]} + * @private + */ + resolveContextMenuOptions({ target_id, resolved }) { + const result = []; + + if (resolved.users?.[target_id]) { + result.push( + this.transformOption({ name: 'user', type: ApplicationCommandOptionType.User, value: target_id }, resolved), + ); + } + + if (resolved.messages?.[target_id]) { + result.push({ + name: 'message', + type: '_MESSAGE', + value: target_id, + message: + this.channel?.messages._add(resolved.messages[target_id]) ?? + new (getMessage())(this.client, resolved.messages[target_id]), + }); + } + + return result; + } +} + +module.exports = ContextMenuCommandInteraction; |