47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import { SlashCommandBuilder, ChatInputCommandInteraction } from 'discord.js';
|
|
import { prisma } from '../database';
|
|
import { t, SupportedLocale, SUPPORTED_LOCALES } from '../i18n';
|
|
|
|
export default {
|
|
data: new SlashCommandBuilder()
|
|
.setName('language')
|
|
.setDescription('Set your personal language for the bot.')
|
|
.setDescriptionLocalizations({
|
|
ko: '봇의 개인 사용 언어를 설정합니다.',
|
|
})
|
|
.addStringOption(option =>
|
|
option.setName('locale')
|
|
.setDescription('Language to use')
|
|
.setDescriptionLocalizations({
|
|
ko: '사용할 언어',
|
|
})
|
|
.setRequired(true)
|
|
.addChoices(
|
|
{ name: 'English', value: 'en' },
|
|
{ name: '한국어', value: 'ko' },
|
|
)
|
|
),
|
|
|
|
async execute(interaction: ChatInputCommandInteraction, locale: SupportedLocale) {
|
|
const newLocale = interaction.options.getString('locale', true) as SupportedLocale;
|
|
|
|
// Validate locale (safety check)
|
|
if (!SUPPORTED_LOCALES.includes(newLocale)) {
|
|
await interaction.editReply({ content: `Unsupported locale: ${newLocale}` });
|
|
return;
|
|
}
|
|
|
|
await prisma.userLocale.upsert({
|
|
where: { userId: interaction.user.id },
|
|
update: { locale: newLocale },
|
|
create: { userId: interaction.user.id, locale: newLocale },
|
|
});
|
|
|
|
// Respond in the NEWLY selected locale
|
|
await interaction.editReply({
|
|
content: t(newLocale, 'commands.language.userSet', { locale: newLocale === 'ko' ? '한국어' : 'English' }),
|
|
});
|
|
},
|
|
};
|
|
|