all repos — stealth-developers @ 25498cdef38d67d4866e16e276bd2f96f6c9580a

src/events/interactionCreate.ts (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
import { type BaseInteraction, type Client, Events } from "discord.js";
import { commands } from "../handlers/interactions";

import { loggers } from "@/utils/logging";
const logger = loggers.interactions;

export default {
	event: Events.InteractionCreate,
	async execute(client: Client, interaction: BaseInteraction) {
		if (interaction.isCommand()) {
			const command = commands.get(interaction.commandName);
			logger.info(`received command ${interaction.commandName}`);
			if (!command || !command.execute) return;
			try {
				await command.execute(client, interaction);
			} catch (error) {
				logger.error(
					error,
					`there was an error while executing ${interaction.commandName}`,
				);
				interaction.deferReply({ flags: ["Ephemeral"] });
				await interaction.followUp({
					content: "there was an error while executing this command!",
					flags: ["Ephemeral"],
				});
			}
		} else if (interaction.isButton()) {
			const [commandName, ..._args] = interaction.customId.split(":");
			const command = commands.get(commandName);
			if (!command || !command.buttonExecute) {
				return interaction.reply({
					content: `couldn't find the associated command (${commandName})`,
					flags: ["Ephemeral"],
				});
			}
			try {
				await command.buttonExecute(client, interaction);
			} catch (error) {
				logger.error(
					error,
					`there was an error while executing button with customId ${interaction.customId}`,
				);
				await interaction.reply({
					content: "there was an error while executing this button command!",
					flags: ["Ephemeral"],
				});
			}
		} else if (interaction.isModalSubmit()) {
			const [commandName, ..._args] = interaction.customId.split(":");
			const command = commands.get(commandName);
			if (!command || !command.modalExecute) return;
			try {
				await command.modalExecute(client, interaction);
			} catch (error) {
				logger.error(
					error,
					`there was an error while executing modal with customId ${interaction.customId}`,
				);
				await interaction.reply({
					content: "there was an error while executing this modal!",
					flags: ["Ephemeral"],
				});
			}
		} else if (interaction.isAutocomplete()) {
			const command = commands.get(interaction.commandName);
			if (!command || !command.autocomplete) return;
			try {
				await command.autocomplete(interaction);
			} catch (error) {
				logger.error(
					error,
					`there was an error while executing autocomplete command for ${interaction.commandName}`,
				);
			}
		} else if (interaction.isStringSelectMenu()) {
			const command = commands.get(interaction.customId.split(":")[0]);
			if (!command || !command.selectMenuExecute)
				return interaction.reply({
					content: "couldn't find the associated command!",
					flags: ["Ephemeral"],
				});
			try {
				await command.selectMenuExecute(client, interaction);
			} catch (error) {
				logger.error(
					error,
					`there was an error while executing select menu with customId ${interaction.customId}`,
				);
				await interaction.reply({
					content: "there was an error while executing this select menu!",
					flags: ["Ephemeral"],
				});
			}
		}
	},
};