Add config UI and persistence to builtin plugin

Introduces a configuration UI schema and persistent config storage for the napcat-plugin-builtin. The plugin now loads and saves its configuration, supports dynamic prefix and reply toggling, and updates dependencies to napcat-types v0.0.6.
This commit is contained in:
手瓜一十雪
2026-01-28 14:13:48 +08:00
parent 89bac8f6e3
commit b7f54fafa2
10 changed files with 102 additions and 64 deletions

View File

@@ -118,24 +118,7 @@ export const GetPluginListHandler: RequestHandler = async (_req, res) => {
return sendSuccess(res, { plugins: allPlugins, pluginManagerNotFound: false });
};
export const ReloadPluginHandler: RequestHandler = async (req, res) => {
const { name } = req.body;
// Note: we should probably accept ID or Name. But ReloadPlugin uses valid loaded name.
// Let's stick to name for now, but be aware of ambiguity.
if (!name) return sendError(res, 'Plugin Name is required');
const pluginManager = getPluginManager();
if (!pluginManager) {
return sendError(res, '插件管理器未加载,请检查 plugins 目录是否存在');
}
const success = await pluginManager.reloadPlugin(name);
if (success) {
return sendSuccess(res, { message: 'Reloaded successfully' });
} else {
return sendError(res, 'Failed to reload plugin');
}
};
// ReloadPluginHandler removed
export const SetPluginStatusHandler: RequestHandler = async (req, res) => {
const { enable, filename } = req.body;
@@ -291,7 +274,11 @@ export const SetPluginConfigHandler: RequestHandler = async (req, res) => {
fs.mkdirSync(configDir, { recursive: true });
}
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
return sendSuccess(res, { message: 'Config saved' });
// Auto-Reload plugin to apply changes
await pluginManager.reloadPlugin(name);
return sendSuccess(res, { message: 'Config saved and plugin reloaded' });
} catch (e: any) {
return sendError(res, 'Error saving config: ' + e.message);
}

View File

@@ -1,7 +1,6 @@
import { Router } from 'express';
import {
GetPluginListHandler,
ReloadPluginHandler,
SetPluginStatusHandler,
UninstallPluginHandler,
GetPluginConfigHandler,
@@ -17,7 +16,6 @@ import {
const router: Router = Router();
router.get('/List', GetPluginListHandler);
router.post('/Reload', ReloadPluginHandler);
router.post('/SetStatus', SetPluginStatusHandler);
router.post('/Uninstall', UninstallPluginHandler);
router.get('/Config', GetPluginConfigHandler);