@shadow-dev/core
Version:
A modular core framework for Discord bot development, providing commands, buttons, menus, middleware, and more.
66 lines (65 loc) • 2.65 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PluginLoader = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const glob_1 = require("glob");
const util_1 = require("../util");
class PluginLoader {
constructor(bot) {
this.bot = bot;
this.baseDir = process.cwd();
this.debug = bot.debug;
const isDev = fs_1.default.existsSync(path_1.default.join(this.baseDir, "src/plugins"));
this.pluginDir = isDev ? "src/plugins" : "dist/plugins";
this.ext = isDev ? "ts" : "js";
if (this.debug) {
console.log("🟢 PluginLoader initialized.");
console.log("🗂 Plugin directory:", this.pluginDir);
}
}
async registerPlugins() {
if (this.debug)
console.log("🔍 Scanning for plugins...");
const pluginFiles = await (0, glob_1.glob)(`*/index.${this.ext}`, {
cwd: path_1.default.join(this.baseDir, this.pluginDir),
absolute: true,
});
for (const filePath of pluginFiles) {
const pluginDirPath = path_1.default.dirname(filePath);
const pluginJsonPath = path_1.default.join(pluginDirPath, "plugin.json");
let meta = {};
if (fs_1.default.existsSync(pluginJsonPath)) {
try {
const raw = fs_1.default.readFileSync(pluginJsonPath, "utf-8");
meta = JSON.parse(raw);
}
catch (err) {
console.warn(`⚠️ Failed to parse plugin.json in ${pluginDirPath}`, err);
}
}
try {
const pluginModule = await (0, util_1.importFile)(filePath);
if (pluginModule?.register) {
pluginModule.metadata = meta;
pluginModule.register(this.bot.client);
if (this.debug) {
console.log(`✅ Loaded plugin: ${meta.name ?? filePath}`);
}
}
else {
console.warn(`⚠️ Skipped plugin at ${filePath} — no register() found`);
}
}
catch (err) {
console.error(`❌ Error loading plugin at ${filePath}:`, err);
}
}
if (this.debug)
console.log("✅ Plugin registration complete.");
}
}
exports.PluginLoader = PluginLoader;