summaryrefslogtreecommitdiff
path: root/node_modules/discord.js/src/client/actions/InteractionCreate.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/discord.js/src/client/actions/InteractionCreate.js')
-rw-r--r--node_modules/discord.js/src/client/actions/InteractionCreate.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/node_modules/discord.js/src/client/actions/InteractionCreate.js b/node_modules/discord.js/src/client/actions/InteractionCreate.js
new file mode 100644
index 0000000..434fb0c
--- /dev/null
+++ b/node_modules/discord.js/src/client/actions/InteractionCreate.js
@@ -0,0 +1,101 @@
+'use strict';
+
+const { InteractionType, ComponentType, ApplicationCommandType } = require('discord-api-types/v10');
+const Action = require('./Action');
+const AutocompleteInteraction = require('../../structures/AutocompleteInteraction');
+const ButtonInteraction = require('../../structures/ButtonInteraction');
+const ChannelSelectMenuInteraction = require('../../structures/ChannelSelectMenuInteraction');
+const ChatInputCommandInteraction = require('../../structures/ChatInputCommandInteraction');
+const MentionableSelectMenuInteraction = require('../../structures/MentionableSelectMenuInteraction');
+const MessageContextMenuCommandInteraction = require('../../structures/MessageContextMenuCommandInteraction');
+const ModalSubmitInteraction = require('../../structures/ModalSubmitInteraction');
+const RoleSelectMenuInteraction = require('../../structures/RoleSelectMenuInteraction');
+const StringSelectMenuInteraction = require('../../structures/StringSelectMenuInteraction');
+const UserContextMenuCommandInteraction = require('../../structures/UserContextMenuCommandInteraction');
+const UserSelectMenuInteraction = require('../../structures/UserSelectMenuInteraction');
+const Events = require('../../util/Events');
+
+class InteractionCreateAction extends Action {
+ handle(data) {
+ const client = this.client;
+
+ // Resolve and cache partial channels for Interaction#channel getter
+ const channel = data.channel && this.getChannel(data.channel);
+
+ // Do not emit this for interactions that cache messages that are non-text-based.
+ let InteractionClass;
+
+ switch (data.type) {
+ case InteractionType.ApplicationCommand:
+ switch (data.data.type) {
+ case ApplicationCommandType.ChatInput:
+ InteractionClass = ChatInputCommandInteraction;
+ break;
+ case ApplicationCommandType.User:
+ InteractionClass = UserContextMenuCommandInteraction;
+ break;
+ case ApplicationCommandType.Message:
+ if (channel && !channel.isTextBased()) return;
+ InteractionClass = MessageContextMenuCommandInteraction;
+ break;
+ default:
+ client.emit(
+ Events.Debug,
+ `[INTERACTION] Received application command interaction with unknown type: ${data.data.type}`,
+ );
+ return;
+ }
+ break;
+ case InteractionType.MessageComponent:
+ if (channel && !channel.isTextBased()) return;
+
+ switch (data.data.component_type) {
+ case ComponentType.Button:
+ InteractionClass = ButtonInteraction;
+ break;
+ case ComponentType.StringSelect:
+ InteractionClass = StringSelectMenuInteraction;
+ break;
+ case ComponentType.UserSelect:
+ InteractionClass = UserSelectMenuInteraction;
+ break;
+ case ComponentType.RoleSelect:
+ InteractionClass = RoleSelectMenuInteraction;
+ break;
+ case ComponentType.MentionableSelect:
+ InteractionClass = MentionableSelectMenuInteraction;
+ break;
+ case ComponentType.ChannelSelect:
+ InteractionClass = ChannelSelectMenuInteraction;
+ break;
+ default:
+ client.emit(
+ Events.Debug,
+ `[INTERACTION] Received component interaction with unknown type: ${data.data.component_type}`,
+ );
+ return;
+ }
+ break;
+ case InteractionType.ApplicationCommandAutocomplete:
+ InteractionClass = AutocompleteInteraction;
+ break;
+ case InteractionType.ModalSubmit:
+ InteractionClass = ModalSubmitInteraction;
+ break;
+ default:
+ client.emit(Events.Debug, `[INTERACTION] Received interaction with unknown type: ${data.type}`);
+ return;
+ }
+
+ const interaction = new InteractionClass(client, data);
+
+ /**
+ * Emitted when an interaction is created.
+ * @event Client#interactionCreate
+ * @param {BaseInteraction} interaction The interaction which was created
+ */
+ client.emit(Events.InteractionCreate, interaction);
+ }
+}
+
+module.exports = InteractionCreateAction;