import { Client, Events, GatewayIntentBits, Interaction, Partials, } from "discord.js"; import { commandMap } from "./commands"; import { BotConfig } from "./config"; export async function startBot(config: BotConfig): Promise { const client = new Client({ intents: [GatewayIntentBits.Guilds], partials: [Partials.Channel], }); client.once(Events.ClientReady, (readyClient) => { console.log(`Bot ready as ${readyClient.user.tag}`); }); client.on(Events.InteractionCreate, async (interaction: Interaction) => { if (!interaction.isChatInputCommand()) { return; } const command = commandMap.get(interaction.commandName); if (!command) { await interaction.reply({ content: `Unknown command: ${interaction.commandName}`, ephemeral: true, }); return; } try { await command.execute(interaction); } catch (error: unknown) { console.error(`Command failed: ${interaction.commandName}`, error); if (interaction.replied || interaction.deferred) { await interaction.followUp({ content: "Command failed. Try again.", ephemeral: true, }); } else { await interaction.reply({ content: "Command failed. Try again.", ephemeral: true, }); } } }); await client.login(config.discordToken); return client; }