Kord/apps/bot/src/commands/autorole.ts

75 lines
2.6 KiB
TypeScript

import {
SlashCommandBuilder,
ChatInputCommandInteraction,
PermissionFlagsBits,
EmbedBuilder,
Colors,
ActionRowBuilder,
ButtonBuilder,
ButtonStyle,
RoleSelectMenuBuilder,
ComponentType
} from 'discord.js';
import { Command, CommandTrait } from '../core/command';
import { autoRoleService } from '../services/AutoRoleService';
import { t, SupportedLocale } from '../i18n';
class AutoRoleCommand extends Command {
protected override readonly trait = CommandTrait.General;
protected override guildOnly = true;
protected override define() {
return new SlashCommandBuilder()
.setName('autorole')
.setDescription('Configure automatic role assignment upon joining.')
.setDescriptionLocalizations({
ko: '입장 시 역할을 자동으로 부여하는 기능을 설정합니다.',
})
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator);
}
protected override async handle(interaction: ChatInputCommandInteraction, locale: SupportedLocale) {
const guild = interaction.guild!;
const dashboard = await generateAutoRoleDashboard(guild, locale);
await interaction.editReply({
...dashboard
});
}
}
export async function generateAutoRoleDashboard(guild: import('discord.js').Guild, locale: SupportedLocale) {
const config = await autoRoleService.getConfig(guild.id);
const embed = new EmbedBuilder()
.setTitle(t(locale, 'commands.autorole.statusTitle'))
.setColor(Colors.Blue)
.setDescription(t(locale, 'commands.autorole.description') || '유저 및 봇이 서버에 접속할 때 자동으로 부여할 기본 역할을 선택하세요. 역할을 선택하면 즉시 활성화됩니다.');
const userSelect = new RoleSelectMenuBuilder()
.setCustomId('autorole_select_user')
.setPlaceholder(t(locale, 'commands.autorole.userRolePlaceholder'))
.setMaxValues(10);
if (config?.userRoleIds && config.userRoleIds.length > 0) {
userSelect.addDefaultRoles(config.userRoleIds);
}
const rowUserRole = new ActionRowBuilder<RoleSelectMenuBuilder>().addComponents(userSelect);
const botSelect = new RoleSelectMenuBuilder()
.setCustomId('autorole_select_bot')
.setPlaceholder(t(locale, 'commands.autorole.botRolePlaceholder'))
.setMaxValues(10);
if (config?.botRoleIds && config.botRoleIds.length > 0) {
botSelect.addDefaultRoles(config.botRoleIds);
}
const rowBotRole = new ActionRowBuilder<RoleSelectMenuBuilder>().addComponents(botSelect);
return {
embeds: [embed],
components: [rowUserRole, rowBotRole]
};
}
export default new AutoRoleCommand().toModule();