|
1 |
| -import fs from "fs"; |
| 1 | +import fs from "node:fs"; |
| 2 | +import path from "node:path"; |
| 3 | +import { createRequire } from "node:module"; |
2 | 4 | import mongoose from "mongoose";
|
3 | 5 |
|
| 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 | + |
4 | 16 | 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); |
9 | 20 | 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)) |
36 | 29 | }
|
37 | 30 | }
|
38 | 31 | };
|
|
0 commit comments