diff --git a/.gitignore b/.gitignore index e3a28de..bc222d7 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ docker-compose.yml target/ tsconfig.tsbuildinfo +voices diff --git a/packages/bot/command.ts b/packages/bot/command.ts index 54063fb..ed6c73c 100644 --- a/packages/bot/command.ts +++ b/packages/bot/command.ts @@ -4,10 +4,10 @@ import { type SlashCommandOptionsOnlyBuilder, SlashCommandSubcommandBuilder, } from "discord.js"; -import { join } from "node:path"; -import { requireDirectory } from "../utils/requireDirectory"; import { AdminUsers } from "./admin"; +export const commandExecuteNameHashMap = []; + export type DiscordCommandData = | SlashCommandBuilder | SlashCommandOptionsOnlyBuilder @@ -45,12 +45,3 @@ export function defineCommand( execute: execute, }; } - -const commandDirectory = join(import.meta.dirname, "commands"); -export const defineCommands = - await requireDirectory(commandDirectory); -export const commandExecuteNameHashMap: { - [key: string]: DiscordCommandExecute; -} = Object.fromEntries( - defineCommands.map((command) => [command.data.name, command.execute]), -); diff --git a/packages/bot/commands/index.ts b/packages/bot/commands/index.ts new file mode 100644 index 0000000..aff4b02 --- /dev/null +++ b/packages/bot/commands/index.ts @@ -0,0 +1,20 @@ +import type { DiscordCommandExecute } from "../command"; + +export const defineCommands = [ + (await import("./getReadChannels")).default, + (await import("./getStatus")).default, + (await import("./joinVoiceChannel")).default, + (await import("./leaveVoiceChannel")).default, + (await import("./playVoice")).default, + (await import("./readChannel")).default, + (await import("./setNya")).default, + (await import("./setSupertonicStyle")).default, + (await import("./setVoice")).default, + (await import("./skipCurrent")).default, + (await import("./unreadChannel")).default, +]; +export const commandExecuteNameHashMap: { + [key: string]: DiscordCommandExecute; +} = Object.fromEntries( + defineCommands.map((command) => [command.data.name, command.execute]), +); diff --git a/packages/bot/event.ts b/packages/bot/event.ts index 3d67571..c83f029 100644 --- a/packages/bot/event.ts +++ b/packages/bot/event.ts @@ -1,6 +1,4 @@ import { type ClientEvents } from "discord.js"; -import { join } from "node:path"; -import { requireDirectory } from "../utils/requireDirectory"; export interface DiscordEvent { event: Event; @@ -16,7 +14,3 @@ export function defineEvent( callback: callback, }; } - -export const eventDirectory = join(import.meta.dirname, "events"); -export const eventMap = - await requireDirectory>(eventDirectory); diff --git a/packages/bot/events/index.ts b/packages/bot/events/index.ts new file mode 100644 index 0000000..1db7014 --- /dev/null +++ b/packages/bot/events/index.ts @@ -0,0 +1,4 @@ +export const eventMap = [ + (await import("./readChannel")).default, + (await import("./useCommand")).default, +]; diff --git a/packages/bot/events/useCommand.ts b/packages/bot/events/useCommand.ts index 00b71d2..307d494 100644 --- a/packages/bot/events/useCommand.ts +++ b/packages/bot/events/useCommand.ts @@ -1,4 +1,4 @@ -import { commandExecuteNameHashMap } from "../command"; +import { commandExecuteNameHashMap } from "../commands"; import { defineEvent } from "../event"; export default defineEvent("interactionCreate", async (interaction) => { diff --git a/packages/bot/index.ts b/packages/bot/index.ts index 0fb1509..d7699b8 100644 --- a/packages/bot/index.ts +++ b/packages/bot/index.ts @@ -1,6 +1,6 @@ import { Client, Events, GatewayIntentBits, REST, Routes } from "discord.js"; -import { commandExecuteNameHashMap, defineCommands } from "./command"; -import { eventMap } from "./event"; +import { commandExecuteNameHashMap, defineCommands } from "./commands"; +import { eventMap } from "./events"; import { OutputHandler } from "../utils/outputHandler"; import { APPLICATION_ID } from "../env"; import { mkdir, readFile, writeFile } from "node:fs/promises"; @@ -87,10 +87,8 @@ export class DiscordBot { public registerEvents() { try { - for (let index = 0; index < eventMap.length; index++) { - const event = eventMap[index]; - if (!event) continue; - this.client.on(event.event, event.callback); + for (const event of eventMap) { + this.client.on(event.event as any, event.callback as any); } } catch (err) { OutputHandler.errorLog("[Event Register Error]", err); diff --git a/packages/utils/requireDirectory.ts b/packages/utils/requireDirectory.ts index d22a7c4..a91684d 100644 --- a/packages/utils/requireDirectory.ts +++ b/packages/utils/requireDirectory.ts @@ -1,9 +1,12 @@ import { readdir } from "fs/promises"; import { join } from "path"; -export async function requireDirectory(directory: string): Promise { - const requireFiles = (await readdir(directory)).filter((file) => - file.endsWith(".js"), +export async function requireDirectory( + directory: string, + ignores: string[] = [], +): Promise { + const requireFiles = (await readdir(directory)).filter( + (file) => file.endsWith(".js") && !ignores.includes(file), ); return await Promise.all( requireFiles.map(