Skip to content

Commit 05b379a

Browse files
committed
refactor: Remove dublicates and improve readability
1 parent 1b268d1 commit 05b379a

File tree

1 file changed

+24
-31
lines changed

1 file changed

+24
-31
lines changed

src/functions/handlers/handleEvents.js

Lines changed: 24 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,31 @@
1-
import fs from "fs";
1+
import fs from "node:fs";
2+
import path from "node:path";
3+
import { createRequire } from "node:module";
24
import mongoose from "mongoose";
35

6+
const EVENTS_PATH = './src/events/';
7+
8+
const require = createRequire(import.meta.url);
9+
10+
const isJs = (file = "") => file.endsWith(".js");
11+
const isDir = (dir, prefix = EVENTS_PATH) => {
12+
const target = path.join(prefix, dir);
13+
return fs.statSync(target).isDirectory();
14+
}
15+
416
export default (client) => {
5-
client.handleEvents = async () => {
6-
const eventFolders = fs
7-
.readdirSync(`./src/events`)
8-
.filter((folder) => fs.statSync(`./src/events/${folder}`).isDirectory());
17+
const methods = { client, mongo: mongoose };
18+
client.handleEvents = () => {
19+
const eventFolders = fs.readdirSync(EVENTS_PATH).filter(isDir);
920
for (const folder of eventFolders) {
10-
const eventFiles = fs
11-
.readdirSync(`./src/events/${folder}`)
12-
.filter((file) => file.endsWith(".js"));
13-
switch (folder) {
14-
case "client":
15-
for (const file of eventFiles) {
16-
const event = (await import(`../../events/${folder}/${file}`)).default;
17-
if (event.once) {
18-
client.once(event.name, (...args) => event.execute(...args, client));
19-
} else {
20-
client.on(event.name, (...args) => event.execute(...args, client));
21-
}
22-
}
23-
break;
24-
case "mongo":
25-
for (const file of eventFiles) {
26-
const event = (await import(`../../events/${folder}/${file}`)).default;
27-
if (event.once) {
28-
mongoose.connection.once(event.name, (...args) => event.execute(...args, client));
29-
} else {
30-
mongoose.connection.on(event.name, (...args) => event.execute(...args, client));
31-
}
32-
}
33-
break;
34-
default:
35-
break;
21+
const eventPath = path.join(EVENTS_PATH, folder);
22+
const eventFiles = fs.readdirSync(eventPath).filter(isJs);
23+
const method = methods[folder];
24+
for (const file of eventFiles) {
25+
const eventFile = path.join(eventPath, file);
26+
const event = require(eventFile).default;
27+
const listener = event.once ? method.once : method.on;
28+
listener(event.name, (...args) => event.execute(...args, client))
3629
}
3730
}
3831
};

0 commit comments

Comments
 (0)