mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 10:47:04 +02:00
86 lines
2.8 KiB
TypeScript
86 lines
2.8 KiB
TypeScript
import {
|
|
Locale,
|
|
SlashCommandBuilder,
|
|
SlashCommandSubcommandBuilder,
|
|
SlashCommandSubcommandGroupBuilder,
|
|
} from 'discord.js';
|
|
import { translator } from '../localization/translator';
|
|
import { localizationObject } from './localizationObject';
|
|
|
|
interface CreateLocalizedCommandSubcommand {
|
|
subcommand: string;
|
|
modify?: (option: SlashCommandSubcommandBuilder) => void;
|
|
}
|
|
|
|
interface CreateLocalizedCommandSubcommandGroup {
|
|
group: string;
|
|
modify?: (option: SlashCommandSubcommandGroupBuilder) => void;
|
|
}
|
|
|
|
export function createLocalizedCommand(
|
|
command: string,
|
|
sub?:
|
|
| CreateLocalizedCommandSubcommand[]
|
|
| CreateLocalizedCommandSubcommandGroup[],
|
|
) {
|
|
const commandPathItem = command.replaceAll('-', '_');
|
|
const { translate } = translator(Locale.EnglishUS);
|
|
const slashCommand = new SlashCommandBuilder()
|
|
.setName(command)
|
|
.setNameLocalizations(localizationObject(`bot.commands.${commandPathItem}`))
|
|
.setDescription(translate(`bot.commands.${commandPathItem}.description`))
|
|
.setDescriptionLocalizations(
|
|
localizationObject(`bot.commands.${commandPathItem}.description`),
|
|
);
|
|
|
|
if (sub) {
|
|
sub.map((subItem) => {
|
|
if ('subcommand' in subItem) {
|
|
const subcommandNameLocalizations = localizationObject(
|
|
`bot.commands.${commandPathItem}.subcommands.${subItem.subcommand}`,
|
|
);
|
|
const subcommandDescriptionLocalizations = localizationObject(
|
|
`bot.commands.${commandPathItem}.subcommands.${subItem.subcommand}.description`,
|
|
);
|
|
|
|
slashCommand.addSubcommand((option) => {
|
|
if (subItem.modify) subItem.modify(option);
|
|
|
|
return option
|
|
.setName(subItem.subcommand)
|
|
.setNameLocalizations(subcommandNameLocalizations)
|
|
.setDescription(
|
|
translate(
|
|
`bot.commands.${commandPathItem}.subcommands.${subItem.subcommand}.description`,
|
|
),
|
|
)
|
|
.setDescriptionLocalizations(subcommandDescriptionLocalizations);
|
|
});
|
|
} else {
|
|
const subcommandNameLocalizations = localizationObject(
|
|
`bot.commands.${commandPathItem}.groups.${subItem.group}`,
|
|
);
|
|
const subcommandDescriptionLocalizations = localizationObject(
|
|
`bot.commands.${commandPathItem}.groups.${subItem.group}.description`,
|
|
);
|
|
|
|
slashCommand.addSubcommandGroup((option) => {
|
|
if (subItem.modify) subItem.modify(option);
|
|
|
|
return option
|
|
.setName(subItem.group)
|
|
.setNameLocalizations(subcommandNameLocalizations)
|
|
.setDescription(
|
|
translate(
|
|
`bot.commands.${commandPathItem}.groups.${subItem.group}.description`,
|
|
),
|
|
)
|
|
.setDescriptionLocalizations(subcommandDescriptionLocalizations);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
return slashCommand;
|
|
}
|