2021-01-30 08:39:56 -06:00
|
|
|
import fs from 'fs';
|
|
|
|
|
|
|
|
import Logger from 'core/logger';
|
|
|
|
import path from 'path';
|
|
|
|
import { fileURLToPath } from 'url';
|
|
|
|
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
|
|
|
|
|
class Plugins {
|
|
|
|
constructor() {
|
|
|
|
this.plugins = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
async getPlugins(force = false) {
|
|
|
|
if (this.plugins && !force) return this.plugins;
|
|
|
|
|
|
|
|
this.plugins = {};
|
|
|
|
|
|
|
|
const dir = await fs.promises.opendir(path.join(__dirname, './'));
|
2021-01-30 11:01:52 -06:00
|
|
|
|
|
|
|
const pluginFilenames = [];
|
2021-01-30 08:39:56 -06:00
|
|
|
for await (const dirent of dir) {
|
|
|
|
if (!dirent.isFile()) continue;
|
|
|
|
if (
|
|
|
|
['index.js', 'base-plugin.js', 'discord-base-plugin.js', 'readme.md'].includes(dirent.name)
|
|
|
|
)
|
|
|
|
continue;
|
2021-01-30 11:01:52 -06:00
|
|
|
pluginFilenames.push(dirent.name);
|
|
|
|
}
|
2021-01-30 08:39:56 -06:00
|
|
|
|
2021-01-30 11:01:52 -06:00
|
|
|
for (const pluginFilename of pluginFilenames) {
|
|
|
|
Logger.verbose('Plugins', 1, `Loading plugin file ${pluginFilename}...`);
|
|
|
|
const { default: Plugin } = await import(`./${pluginFilename}`);
|
2021-01-30 08:39:56 -06:00
|
|
|
this.plugins[Plugin.name] = Plugin;
|
|
|
|
}
|
|
|
|
|
|
|
|
return this.plugins;
|
|
|
|
}
|
2020-10-05 12:52:01 -05:00
|
|
|
}
|
|
|
|
|
2021-01-30 08:39:56 -06:00
|
|
|
export default new Plugins();
|