diff --git a/packages/create-discord-bot/template/Deno/src/events/interactionCreate.ts b/packages/create-discord-bot/template/Deno/src/events/interactionCreate.ts new file mode 100644 index 000000000000..cf32b7fe64d4 --- /dev/null +++ b/packages/create-discord-bot/template/Deno/src/events/interactionCreate.ts @@ -0,0 +1,20 @@ +import { Events } from 'npm:discord.js@^14.19.3'; +import type { Event } from './index.ts'; +import { loadCommands } from '../util/loaders.ts'; + +const commands = await loadCommands(new URL('../commands/', import.meta.url)); + +export default { + name: Events.InteractionCreate, + async execute(interaction) { + if (interaction.isCommand()) { + const command = commands.get(interaction.commandName); + + if (!command) { + throw new Error(`Command '${interaction.commandName}' not found.`); + } + + await command.execute(interaction); + } + }, +} satisfies Event; diff --git a/packages/create-discord-bot/template/Deno/src/index.ts b/packages/create-discord-bot/template/Deno/src/index.ts index 400d937c34aa..41b6ff61e993 100644 --- a/packages/create-discord-bot/template/Deno/src/index.ts +++ b/packages/create-discord-bot/template/Deno/src/index.ts @@ -1,18 +1,24 @@ import 'https://deno.land/std@0.223.0/dotenv/load.ts'; import { URL } from 'node:url'; import { Client, GatewayIntentBits } from 'npm:discord.js@^14.19.3'; -import { loadCommands, loadEvents } from './util/loaders.ts'; -import { registerEvents } from './util/registerEvents.ts'; +import { loadEvents } from './util/loaders.ts'; // Initialize the client const client = new Client({ intents: [GatewayIntentBits.Guilds] }); // Load the events and commands const events = await loadEvents(new URL('events/', import.meta.url)); -const commands = await loadCommands(new URL('commands/', import.meta.url)); // Register the event handlers -registerEvents(commands, events, client); +for (const event of events) { + client[event.once ? 'once' : 'on'](event.name, async (...args) => { + try { + await event.execute(...args); + } catch (error) { + console.error(`Error executing event ${String(event.name)}:`, error); + } + }); +} // Login to the client void client.login(Deno.env.get('DISCORD_TOKEN')); diff --git a/packages/create-discord-bot/template/Deno/src/util/registerEvents.ts b/packages/create-discord-bot/template/Deno/src/util/registerEvents.ts deleted file mode 100644 index df79d0830724..000000000000 --- a/packages/create-discord-bot/template/Deno/src/util/registerEvents.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Events, type Client } from 'npm:discord.js@^14.19.3'; -import type { Command } from '../commands/index.ts'; -import type { Event } from '../events/index.ts'; - -export function registerEvents(commands: Map, events: Event[], client: Client): void { - // Create an event to handle command interactions - const interactionCreateEvent: Event = { - name: Events.InteractionCreate, - async execute(interaction) { - if (interaction.isCommand()) { - const command = commands.get(interaction.commandName); - - if (!command) { - throw new Error(`Command '${interaction.commandName}' not found.`); - } - - await command.execute(interaction); - } - }, - }; - - for (const event of [...events, interactionCreateEvent]) { - client[event.once ? 'once' : 'on'](event.name, async (...args) => event.execute(...args)); - } -} diff --git a/packages/create-discord-bot/template/JavaScript/src/events/index.js b/packages/create-discord-bot/template/JavaScript/src/events/index.js index 52365eefc0a7..dcac11a80621 100644 --- a/packages/create-discord-bot/template/JavaScript/src/events/index.js +++ b/packages/create-discord-bot/template/JavaScript/src/events/index.js @@ -23,7 +23,7 @@ export const schema = z.object({ /** * Defines the predicate to check if an object is a valid Event type. * - * @type {import('../util/loaders').StructurePredicate} + * @type {import('../util/loaders.js').StructurePredicate} * @returns {structure is Event} */ export const predicate = (structure) => schema.safeParse(structure).success; diff --git a/packages/create-discord-bot/template/JavaScript/src/events/interactionCreate.js b/packages/create-discord-bot/template/JavaScript/src/events/interactionCreate.js new file mode 100644 index 000000000000..eb2fed7c64e7 --- /dev/null +++ b/packages/create-discord-bot/template/JavaScript/src/events/interactionCreate.js @@ -0,0 +1,20 @@ +import { Events } from 'discord.js'; +import { loadCommands } from '../util/loaders.js'; + +const commands = await loadCommands(new URL('../commands/', import.meta.url)); + +/** @type {import('../events/index.js').Event} */ +export default { + name: Events.InteractionCreate, + async execute(interaction) { + if (interaction.isCommand()) { + const command = commands.get(interaction.commandName); + + if (!command) { + throw new Error(`Command '${interaction.commandName}' not found.`); + } + + await command.execute(interaction); + } + }, +}; diff --git a/packages/create-discord-bot/template/JavaScript/src/index.js b/packages/create-discord-bot/template/JavaScript/src/index.js index 20d768829992..73e4ae0cbed0 100644 --- a/packages/create-discord-bot/template/JavaScript/src/index.js +++ b/packages/create-discord-bot/template/JavaScript/src/index.js @@ -1,18 +1,24 @@ import process from 'node:process'; import { URL } from 'node:url'; import { Client, GatewayIntentBits } from 'discord.js'; -import { loadCommands, loadEvents } from './util/loaders.js'; -import { registerEvents } from './util/registerEvents.js'; +import { loadEvents } from './util/loaders.js'; // Initialize the client const client = new Client({ intents: [GatewayIntentBits.Guilds] }); // Load the events and commands const events = await loadEvents(new URL('events/', import.meta.url)); -const commands = await loadCommands(new URL('commands/', import.meta.url)); // Register the event handlers -registerEvents(commands, events, client); +for (const event of events) { + client[event.once ? 'once' : 'on'](event.name, async (...args) => { + try { + await event.execute(...args); + } catch (error) { + console.error(`Error executing event ${String(event.name)}:`, error); + } + }); +} // Login to the client void client.login(process.env.DISCORD_TOKEN); diff --git a/packages/create-discord-bot/template/JavaScript/src/util/registerEvents.js b/packages/create-discord-bot/template/JavaScript/src/util/registerEvents.js deleted file mode 100644 index b63059679575..000000000000 --- a/packages/create-discord-bot/template/JavaScript/src/util/registerEvents.js +++ /dev/null @@ -1,29 +0,0 @@ -import { Events } from 'discord.js'; - -/** - * @param {Map} commands - * @param {import('../events/index.js').Event[]} events - * @param {import('discord.js').Client} client - */ -export function registerEvents(commands, events, client) { - // Create an event to handle command interactions - /** @type {import('../events/index.js').Event} */ - const interactionCreateEvent = { - name: Events.InteractionCreate, - async execute(interaction) { - if (interaction.isCommand()) { - const command = commands.get(interaction.commandName); - - if (!command) { - throw new Error(`Command '${interaction.commandName}' not found.`); - } - - await command.execute(interaction); - } - }, - }; - - for (const event of [...events, interactionCreateEvent]) { - client[event.once ? 'once' : 'on'](event.name, async (...args) => event.execute(...args)); - } -} diff --git a/packages/create-discord-bot/template/TypeScript/src/events/interactionCreate.ts b/packages/create-discord-bot/template/TypeScript/src/events/interactionCreate.ts new file mode 100644 index 000000000000..4e0f0a90034d --- /dev/null +++ b/packages/create-discord-bot/template/TypeScript/src/events/interactionCreate.ts @@ -0,0 +1,21 @@ +import { URL } from 'node:url'; +import { Events } from 'discord.js'; +import { loadCommands } from '../util/loaders.[REPLACE_IMPORT_EXT]'; +import type { Event } from './index.[REPLACE_IMPORT_EXT]'; + +const commands = await loadCommands(new URL('../commands/', import.meta.url)); + +export default { + name: Events.InteractionCreate, + async execute(interaction) { + if (interaction.isCommand()) { + const command = commands.get(interaction.commandName); + + if (!command) { + throw new Error(`Command '${interaction.commandName}' not found.`); + } + + await command.execute(interaction); + } + }, +} satisfies Event; diff --git a/packages/create-discord-bot/template/TypeScript/src/index.ts b/packages/create-discord-bot/template/TypeScript/src/index.ts index f0cb8afcb5f7..5c6001733ddc 100644 --- a/packages/create-discord-bot/template/TypeScript/src/index.ts +++ b/packages/create-discord-bot/template/TypeScript/src/index.ts @@ -1,18 +1,24 @@ import process from 'node:process'; import { URL } from 'node:url'; import { Client, GatewayIntentBits } from 'discord.js'; -import { loadCommands, loadEvents } from './util/loaders.[REPLACE_IMPORT_EXT]'; -import { registerEvents } from './util/registerEvents.[REPLACE_IMPORT_EXT]'; +import { loadEvents } from './util/loaders.[REPLACE_IMPORT_EXT]'; // Initialize the client const client = new Client({ intents: [GatewayIntentBits.Guilds] }); // Load the events and commands const events = await loadEvents(new URL('events/', import.meta.url)); -const commands = await loadCommands(new URL('commands/', import.meta.url)); // Register the event handlers -registerEvents(commands, events, client); +for (const event of events) { + client[event.once ? 'once' : 'on'](event.name, async (...args) => { + try { + await event.execute(...args); + } catch (error) { + console.error(`Error executing event ${String(event.name)}:`, error); + } + }); +} // Login to the client void client.login(process.env.DISCORD_TOKEN); diff --git a/packages/create-discord-bot/template/TypeScript/src/util/registerEvents.ts b/packages/create-discord-bot/template/TypeScript/src/util/registerEvents.ts deleted file mode 100644 index 8613fdb1503e..000000000000 --- a/packages/create-discord-bot/template/TypeScript/src/util/registerEvents.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Events, type Client } from 'discord.js'; -import type { Command } from '../commands/index.[REPLACE_IMPORT_EXT]'; -import type { Event } from '../events/index.[REPLACE_IMPORT_EXT]'; - -export function registerEvents(commands: Map, events: Event[], client: Client): void { - // Create an event to handle command interactions - const interactionCreateEvent: Event = { - name: Events.InteractionCreate, - async execute(interaction) { - if (interaction.isCommand()) { - const command = commands.get(interaction.commandName); - - if (!command) { - throw new Error(`Command '${interaction.commandName}' not found.`); - } - - await command.execute(interaction); - } - }, - }; - - for (const event of [...events, interactionCreateEvent]) { - client[event.once ? 'once' : 'on'](event.name, async (...args) => event.execute(...args)); - } -}