From d19e3c12fd48f4a0a676548aef6d0ca4b329df06 Mon Sep 17 00:00:00 2001 From: Essem Date: Fri, 23 May 2025 21:51:41 -0500 Subject: [PATCH] refactor: Combine client and database into single event handler argument --- src/app.ts | 2 +- src/events/debug.ts | 7 +++---- src/events/error.ts | 7 +++---- src/events/guildCreate.ts | 8 ++++---- src/events/guildDelete.ts | 8 ++++---- src/events/interactionCreate.ts | 6 +++--- src/events/messageCreate.ts | 14 +++----------- src/events/ready.ts | 5 ++--- src/events/voiceChannelLeave.ts | 5 ++--- src/events/voiceChannelSwitch.ts | 9 ++++----- src/events/warn.ts | 7 +++---- src/utils/types.ts | 8 +++++++- 12 files changed, 39 insertions(+), 47 deletions(-) diff --git a/src/app.ts b/src/app.ts index bc6b0516..f3f901ad 100644 --- a/src/app.ts +++ b/src/app.ts @@ -207,7 +207,7 @@ for await (const file of getFiles( const eventArray = file.split("/"); const eventName = eventArray[eventArray.length - 1].split(".")[0]; const { default: event } = await import(file); - client.on(eventName as keyof ClientEvents, event.bind(null, client, database)); + client.on(eventName as keyof ClientEvents, event.bind(null, { client, database })); } logger.log("info", "Finished loading events."); diff --git a/src/events/debug.ts b/src/events/debug.ts index 4afb90e5..8abcc267 100644 --- a/src/events/debug.ts +++ b/src/events/debug.ts @@ -1,7 +1,6 @@ -import type { Client } from "oceanic.js"; -import { debug } from "../utils/logger.js"; -import type { DatabasePlugin } from "../database.js"; +import { debug } from "#utils/logger.js"; +import type { EventParams } from "#utils/types.js"; -export default async (_client: Client, _db: DatabasePlugin | undefined, message: string) => { +export default async (_: EventParams, message: string) => { debug(message); }; diff --git a/src/events/error.ts b/src/events/error.ts index 4629c73e..279c5ecd 100644 --- a/src/events/error.ts +++ b/src/events/error.ts @@ -1,7 +1,6 @@ -import type { Client } from "oceanic.js"; -import { error } from "../utils/logger.js"; -import type { DatabasePlugin } from "../database.js"; +import { error } from "#utils/logger.js"; +import type { EventParams } from "#utils/types.js"; -export default async (_client: Client, _db: DatabasePlugin | undefined, message: string | Error) => { +export default async (_: EventParams, message: string | Error) => { error(message); }; diff --git a/src/events/guildCreate.ts b/src/events/guildCreate.ts index 1b6024f0..0234a140 100644 --- a/src/events/guildCreate.ts +++ b/src/events/guildCreate.ts @@ -1,8 +1,8 @@ -import type { Client, Guild } from "oceanic.js"; -import { info } from "../utils/logger.js"; -import type { DatabasePlugin } from "../database.js"; +import type { Guild } from "oceanic.js"; +import { info } from "#utils/logger.js"; +import type { EventParams } from "#utils/types.js"; // run when the bot is added to a guild -export default async (_client: Client, _db: DatabasePlugin | undefined, guild: Guild) => { +export default async (_: EventParams, guild: Guild) => { info(`[GUILD JOIN] ${guild.name} (${guild.id}) added the bot.`); }; diff --git a/src/events/guildDelete.ts b/src/events/guildDelete.ts index 38fbc1fe..70cb1851 100644 --- a/src/events/guildDelete.ts +++ b/src/events/guildDelete.ts @@ -1,9 +1,9 @@ -import type { Client, Guild, Uncached } from "oceanic.js"; -import { info } from "../utils/logger.js"; -import type { DatabasePlugin } from "../database.js"; +import type { Guild, Uncached } from "oceanic.js"; +import { info } from "#utils/logger.js"; +import type { EventParams } from "#utils/types.js"; // run when the bot is removed from a guild -export default async (_client: Client, _db: DatabasePlugin | undefined, guild: Guild | Uncached) => { +export default async (_: EventParams, guild: Guild | Uncached) => { const name = "name" in guild ? `${guild.name} (${guild.id})` : guild.id; info(`[GUILD LEAVE] ${name} removed the bot.`); }; diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index 61e03ba7..be82b04e 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -1,11 +1,11 @@ -import { type AnyInteractionGateway, type Client, InteractionTypes } from "oceanic.js"; +import { type AnyInteractionGateway, InteractionTypes } from "oceanic.js"; import ImageCommand from "#cmd-classes/imageCommand.js"; -import type { DatabasePlugin } from "../database.js"; import { collectors, commands, messageCommands, selectedImages, userCommands } from "#utils/collections.js"; import { getString } from "#utils/i18n.js"; import logger from "#utils/logger.js"; import { clean } from "#utils/misc.js"; import { upload } from "#utils/tempimages.js"; +import type { EventParams } from "#utils/types.js"; let Sentry: typeof import("@sentry/node"); if (process.env.SENTRY_DSN && process.env.SENTRY_DSN !== "") { @@ -15,7 +15,7 @@ if (process.env.SENTRY_DSN && process.env.SENTRY_DSN !== "") { /** * Runs when a slash command/interaction is executed. */ -export default async (client: Client, database: DatabasePlugin | undefined, interaction: AnyInteractionGateway) => { +export default async ({ client, database }: EventParams, interaction: AnyInteractionGateway) => { // block if client is not ready yet if (!client.ready) return; diff --git a/src/events/messageCreate.ts b/src/events/messageCreate.ts index d74e09a6..251ac552 100644 --- a/src/events/messageCreate.ts +++ b/src/events/messageCreate.ts @@ -1,20 +1,12 @@ -import { - type AnyTextableChannel, - type Client, - GroupChannel, - type Message, - PrivateChannel, - ThreadChannel, -} from "oceanic.js"; +import { type AnyTextableChannel, GroupChannel, type Message, PrivateChannel, ThreadChannel } from "oceanic.js"; import ImageCommand from "#cmd-classes/imageCommand.js"; -import type { DatabasePlugin } from "../database.js"; import { aliases, commands, disabledCache, disabledCmdCache, prefixCache } from "#utils/collections.js"; import { getString } from "#utils/i18n.js"; import { error as _error, log } from "#utils/logger.js"; import { clean } from "#utils/misc.js"; import parseCommand from "#utils/parseCommand.js"; import { upload } from "#utils/tempimages.js"; -import type { DBGuild } from "#utils/types.js"; +import type { DBGuild, EventParams } from "#utils/types.js"; let Sentry: typeof import("@sentry/node"); if (process.env.SENTRY_DSN && process.env.SENTRY_DSN !== "") { @@ -26,7 +18,7 @@ let mentionRegex: RegExp; /** * Runs when someone sends a message. */ -export default async (client: Client, database: DatabasePlugin | undefined, message: Message) => { +export default async ({ client, database }: EventParams, message: Message) => { // block if client is not ready yet if (!client.ready) return; diff --git a/src/events/ready.ts b/src/events/ready.ts index a25cbf89..1e3b5446 100644 --- a/src/events/ready.ts +++ b/src/events/ready.ts @@ -1,14 +1,13 @@ -import type { Client } from "oceanic.js"; import { send } from "#utils/handler.js"; import { createPage, generateList } from "#utils/help.js"; import logger from "#utils/logger.js"; import { activityChanger, checkBroadcast } from "#utils/misc.js"; -import type { DatabasePlugin } from "../database.js"; +import type { EventParams } from "#utils/types.js"; import commandsConfig from "#config/commands.json" with { type: "json" }; let ready = false; -export default async (client: Client, database: DatabasePlugin | undefined) => { +export default async ({ client, database }: EventParams) => { if (ready) return; // send slash command data diff --git a/src/events/voiceChannelLeave.ts b/src/events/voiceChannelLeave.ts index 84cf3d79..d8be0e8a 100644 --- a/src/events/voiceChannelLeave.ts +++ b/src/events/voiceChannelLeave.ts @@ -4,13 +4,12 @@ import { getString } from "#utils/i18n.js"; import logger from "#utils/logger.js"; import { random } from "#utils/misc.js"; import { type SoundPlayer, leaveChannel, players, queues, skipVotes } from "#utils/soundplayer.js"; -import type { DatabasePlugin } from "../database.js"; +import type { EventParams } from "#utils/types.js"; const isWaiting = new Map(); export default async ( - client: Client, - _db: DatabasePlugin | undefined, + { client }: EventParams, member: Member, oldChannel: VoiceChannel | StageChannel | Uncached | null, ) => { diff --git a/src/events/voiceChannelSwitch.ts b/src/events/voiceChannelSwitch.ts index 16087728..c2d38c13 100644 --- a/src/events/voiceChannelSwitch.ts +++ b/src/events/voiceChannelSwitch.ts @@ -1,13 +1,12 @@ -import type { Client, Member, StageChannel, Uncached, VoiceChannel } from "oceanic.js"; +import type { Member, StageChannel, Uncached, VoiceChannel } from "oceanic.js"; import leaveHandler from "./voiceChannelLeave.js"; -import type { DatabasePlugin } from "../database.js"; +import type { EventParams } from "#utils/types.js"; export default async ( - client: Client, - db: DatabasePlugin | undefined, + params: EventParams, member: Member, _newChannel: VoiceChannel | StageChannel | Uncached, oldChannel: VoiceChannel | StageChannel | Uncached | null, ) => { - await leaveHandler(client, db, member, oldChannel); + await leaveHandler(params, member, oldChannel); }; diff --git a/src/events/warn.ts b/src/events/warn.ts index 82c0e3b7..8b90ec6a 100644 --- a/src/events/warn.ts +++ b/src/events/warn.ts @@ -1,7 +1,6 @@ -import type { Client } from "oceanic.js"; -import { warn } from "../utils/logger.js"; -import type { DatabasePlugin } from "../database.js"; +import { warn } from "#utils/logger.js"; +import type { EventParams } from "#utils/types.js"; -export default async (_client: Client, _db: DatabasePlugin | undefined, message: string) => { +export default async (_: EventParams, message: string) => { warn(message); }; diff --git a/src/utils/types.ts b/src/utils/types.ts index ef0dfde5..d195968f 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -1,4 +1,5 @@ -import type { ApplicationCommandOptions, Constants } from "oceanic.js"; +import type { ApplicationCommandOptions, Client, Constants } from "oceanic.js"; +import type { DatabasePlugin } from "../database.js"; export interface DBGuild { guild_id: string; @@ -87,6 +88,11 @@ export interface SearXNGResults { }[]; } +export interface EventParams { + client: Client; + database: DatabasePlugin | undefined; +} + export function isError(error: unknown): error is NodeJS.ErrnoException { return error instanceof Error; } -- 2.51.2