mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-10 00:23:30 +01:00
99 lines
3.7 KiB
JavaScript
99 lines
3.7 KiB
JavaScript
'use strict';
|
|
|
|
const process = require('node:process');
|
|
const Action = require('./Action');
|
|
const AutocompleteInteraction = require('../../structures/AutocompleteInteraction');
|
|
const ButtonInteraction = require('../../structures/ButtonInteraction');
|
|
const CommandInteraction = require('../../structures/CommandInteraction');
|
|
const MessageContextMenuInteraction = require('../../structures/MessageContextMenuInteraction');
|
|
const ModalSubmitInteraction = require('../../structures/ModalSubmitInteraction');
|
|
const SelectMenuInteraction = require('../../structures/SelectMenuInteraction');
|
|
const UserContextMenuInteraction = require('../../structures/UserContextMenuInteraction');
|
|
const { Events, InteractionTypes, MessageComponentTypes, ApplicationCommandTypes } = require('../../util/Constants');
|
|
|
|
let deprecationEmitted = false;
|
|
|
|
class InteractionCreateAction extends Action {
|
|
handle(data) {
|
|
const client = this.client;
|
|
|
|
// Resolve and cache partial channels for Interaction#channel getter
|
|
const channel = this.getChannel(data);
|
|
|
|
// Do not emit this for interactions that cache messages that are non-text-based.
|
|
let InteractionType;
|
|
|
|
switch (data.type) {
|
|
case InteractionTypes.APPLICATION_COMMAND:
|
|
switch (data.data.type) {
|
|
case ApplicationCommandTypes.CHAT_INPUT:
|
|
InteractionType = CommandInteraction;
|
|
break;
|
|
case ApplicationCommandTypes.USER:
|
|
InteractionType = UserContextMenuInteraction;
|
|
break;
|
|
case ApplicationCommandTypes.MESSAGE:
|
|
if (channel && !channel.isText()) return;
|
|
InteractionType = MessageContextMenuInteraction;
|
|
break;
|
|
default:
|
|
client.emit(
|
|
Events.DEBUG,
|
|
`[INTERACTION] Received application command interaction with unknown type: ${data.data.type}`,
|
|
);
|
|
return;
|
|
}
|
|
break;
|
|
case InteractionTypes.MESSAGE_COMPONENT:
|
|
if (channel && !channel.isText()) return;
|
|
|
|
switch (data.data.component_type) {
|
|
case MessageComponentTypes.BUTTON:
|
|
InteractionType = ButtonInteraction;
|
|
break;
|
|
case MessageComponentTypes.SELECT_MENU:
|
|
InteractionType = SelectMenuInteraction;
|
|
break;
|
|
default:
|
|
client.emit(
|
|
Events.DEBUG,
|
|
`[INTERACTION] Received component interaction with unknown type: ${data.data.component_type}`,
|
|
);
|
|
return;
|
|
}
|
|
break;
|
|
case InteractionTypes.APPLICATION_COMMAND_AUTOCOMPLETE:
|
|
InteractionType = AutocompleteInteraction;
|
|
break;
|
|
case InteractionTypes.MODAL_SUBMIT:
|
|
InteractionType = ModalSubmitInteraction;
|
|
break;
|
|
default:
|
|
client.emit(Events.DEBUG, `[INTERACTION] Received interaction with unknown type: ${data.type}`);
|
|
return;
|
|
}
|
|
|
|
const interaction = new InteractionType(client, data);
|
|
|
|
/**
|
|
* Emitted when an interaction is created.
|
|
* @event Client#interactionCreate
|
|
* @param {Interaction} interaction The interaction which was created
|
|
*/
|
|
client.emit(Events.INTERACTION_CREATE, interaction);
|
|
|
|
/**
|
|
* Emitted when an interaction is created.
|
|
* @event Client#interaction
|
|
* @param {Interaction} interaction The interaction which was created
|
|
* @deprecated Use {@link Client#event:interactionCreate} instead
|
|
*/
|
|
if (client.emit('interaction', interaction) && !deprecationEmitted) {
|
|
deprecationEmitted = true;
|
|
process.emitWarning('The interaction event is deprecated. Use interactionCreate instead', 'DeprecationWarning');
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = InteractionCreateAction;
|