all repos — stealth-developers @ e203bee07c6cc3a362a63e8cda29683fde77f728

src/interactions/commands/bug/index.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
import { type ApplicationCommandData, SlashCommandBuilder } from "discord.js";
import type { ICommand } from "../../../types.ts";
import { buttonCommand } from "./button.ts";
import { reportCommand } from "./report.ts";

const commandData = new SlashCommandBuilder()
	.setName("bug")
	.setDescription("bug report management")
	.addSubcommand((subcommand) =>
		subcommand
			.setName("report")
			.setDescription("report a new bug")
			.addStringOption((option) =>
				option
					.setName("project")
					.setDescription("which project this bug affects")
					.setRequired(true)
					.addChoices(...reportCommand.getProjectChoices()),
			),
	)
	.addSubcommand((subcommand) =>
		subcommand
			.setName("button")
			.setDescription("create a button to report bugs")
			.addUserOption((option) =>
				option
					.setName("user")
					.setDescription("the user to send the button to")
					.setRequired(true),
			),
	);

export default {
	data: commandData.toJSON() as ApplicationCommandData,
	execute: async (client, interaction) => {
		if (!interaction.isChatInputCommand()) return;

		const subcommand = interaction.options.getSubcommand();

		switch (subcommand) {
			case "report":
				await reportCommand.execute(client, interaction);
				break;
			case "button":
				await buttonCommand.execute(client, interaction);
				break;
			default:
				await interaction.reply({
					content: "❌ unknown subcommand.",
					flags: ["Ephemeral"],
				});
		}
	},
	modalExecute: reportCommand.modalExecute,
	buttonExecute: reportCommand.buttonExecute,
	selectMenuExecute: reportCommand.selectMenuExecute,
} satisfies ICommand;