From bbc583cc8d66609bbead9e6b35e26d7f2b7f51e9 Mon Sep 17 00:00:00 2001 From: Soulter <37870767+Soulter@users.noreply.github.com> Date: Tue, 17 Feb 2026 14:01:31 +0800 Subject: [PATCH] fix: enhance plugin metadata handling by injecting attributes before instantiation (#5155) --- astrbot/core/star/star_manager.py | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/astrbot/core/star/star_manager.py b/astrbot/core/star/star_manager.py index ad19884c2..c6b0f5ac4 100644 --- a/astrbot/core/star/star_manager.py +++ b/astrbot/core/star/star_manager.py @@ -513,6 +513,18 @@ class PluginManager: ) logger.info(metadata) metadata.config = plugin_config + p_name = (metadata.name or "unknown").lower().replace("/", "_") + p_author = ( + (metadata.author or "unknown").lower().replace("/", "_") + ) + plugin_id = f"{p_author}/{p_name}" + + # 在实例化前注入类属性,保证插件 __init__ 可读取这些值 + if metadata.star_cls_type: + setattr(metadata.star_cls_type, "name", p_name) + setattr(metadata.star_cls_type, "author", p_author) + setattr(metadata.star_cls_type, "plugin_id", plugin_id) + if path not in inactivated_plugins: # 只有没有禁用插件时才实例化插件类 if plugin_config and metadata.star_cls_type: @@ -530,17 +542,10 @@ class PluginManager: context=self.context, ) - p_name = (metadata.name or "unknown").lower().replace("/", "_") - p_author = ( - (metadata.author or "unknown").lower().replace("/", "_") - ) - setattr(metadata.star_cls, "name", p_name) - setattr(metadata.star_cls, "author", p_author) - setattr( - metadata.star_cls, - "plugin_id", - f"{p_author}/{p_name}", - ) + if metadata.star_cls: + setattr(metadata.star_cls, "name", p_name) + setattr(metadata.star_cls, "author", p_author) + setattr(metadata.star_cls, "plugin_id", plugin_id) else: logger.info(f"插件 {metadata.name} 已被禁用。")