add --disable-plugins option for server command

This commit is contained in:
crazywhalecc
2023-02-20 23:40:13 +08:00
committed by Jerry
parent eb288f7e51
commit be2de100aa
2 changed files with 30 additions and 1 deletions

View File

@@ -18,6 +18,11 @@ class PluginManager
/** @var array<string, PluginMeta> 插件信息列表 */ /** @var array<string, PluginMeta> 插件信息列表 */
private static array $plugins = []; private static array $plugins = [];
public static function getPlugins(): array
{
return self::$plugins;
}
/** /**
* 传入插件父目录,扫描插件目录下的所有插件并注册添加 * 传入插件父目录,扫描插件目录下的所有插件并注册添加
* *
@@ -203,9 +208,16 @@ class PluginManager
* @param AnnotationParser $parser 传入注解解析器,用于将插件中的事件注解解析出来 * @param AnnotationParser $parser 传入注解解析器,用于将插件中的事件注解解析出来
* @throws PluginException * @throws PluginException
*/ */
public static function enablePlugins(AnnotationParser $parser): void public static function enablePlugins(AnnotationParser $parser, array $disable_list = []): void
{ {
foreach (self::$plugins as $name => $meta) { foreach (self::$plugins as $name => $meta) {
if (in_array($name, $disable_list)) {
$meta->disablePlugin();
}
if (!$meta->isEnabled()) {
logger()->notice('插件 ' . $name . ' 已被禁用');
continue;
}
// 除了内建插件外,输出 log 告知启动插件 // 除了内建插件外,输出 log 告知启动插件
if ($meta->getPluginType() !== ZM_PLUGIN_TYPE_NATIVE) { if ($meta->getPluginType() !== ZM_PLUGIN_TYPE_NATIVE) {
logger()->info('正在启用插件 ' . $name); logger()->info('正在启用插件 ' . $name);

View File

@@ -32,6 +32,8 @@ class PluginMeta implements \JsonSerializable
/** @var array 元信息原文 */ /** @var array 元信息原文 */
private array $metas; private array $metas;
private bool $enabled = true;
private ?ZMPlugin $entity = null; private ?ZMPlugin $entity = null;
/** /**
@@ -56,6 +58,21 @@ class PluginMeta implements \JsonSerializable
$this->root_dir = $root_dir; $this->root_dir = $root_dir;
} }
public function enablePlugin(): void
{
$this->enabled = true;
}
public function disablePlugin(): void
{
$this->enabled = false;
}
public function isEnabled(): bool
{
return $this->enabled;
}
public function bindEntity(ZMPlugin $plugin): void public function bindEntity(ZMPlugin $plugin): void
{ {
$this->entity = $plugin; $this->entity = $plugin;