UNPKG

@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
"use strict"; 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;