import type { SlashCommandSubcommandGroupBuilder } from "@discordjs/builders"; import type { SlashCommandBuilder } from "discord.js"; import config from "../../config/main.json" assert { type: "json" }; import getSubcommandsInFolder from "./getFilesInFolder.js"; import client from "../client.js"; import Discord from "discord.js"; const colours = { red: "\x1b[31m", green: "\x1b[32m", none: "\x1b[0m" } export async function group(name: string, description: string, path: string) { // If the name of the command does not match the path (e.g. attachment.ts has /attachments), use commandString console.log(`│ ├─ Loading group ${name}`) const fetched = await getSubcommandsInFolder(config.commandsFolder + "/" + path, "│ ") console.log(`│ │ └─ ${fetched.errors ? colours.red : colours.green}Loaded ${fetched.subcommands.length} subcommands for ${name} (${fetched.errors} failed)${colours.none}`) return (subcommandGroup: SlashCommandSubcommandGroupBuilder) => { subcommandGroup .setName(name) .setDescription(description) for (const subcommand of fetched.subcommands) { subcommandGroup.addSubcommand(subcommand.command); }; return subcommandGroup; }; } export async function command(name: string, description: string, path: string, commandString: string | undefined = undefined) { // If the name of the command does not match the path (e.g. attachment.ts has /attachments), use commandString commandString = "commands/" + (commandString ?? path); const fetched = await getSubcommandsInFolder(config.commandsFolder + "/" + path); console.log(`│ ├─ ${fetched.errors ? colours.red : colours.green}Loaded ${fetched.subcommands.length} subcommands and ${fetched.subcommandGroups.length} subcommand groups for ${name} (${fetched.errors} failed)${colours.none}`) return (command: SlashCommandBuilder) => { command.setName(name) command.setDescription(description) for (const subcommand of fetched.subcommands) { let fetchedCommand; if (subcommand.command instanceof Function) { fetchedCommand = subcommand.command(new Discord.SlashCommandSubcommandBuilder()); } else { fetchedCommand = subcommand.command; } client.commands[commandString! + "/" + fetchedCommand.name] = subcommand command.addSubcommand(fetchedCommand); } for (const group of fetched.subcommandGroups) { command.addSubcommandGroup(group.command); }; return command; }; }