From efd98b022f74b4c8bfd6ba259ef7aab60ed7cd4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E6=A2=93=E6=9F=92?= <1787882683@qq.com> Date: Sat, 3 Jan 2026 02:34:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E7=9A=84=E9=85=8D=E7=BD=AE=E5=B1=9E=E6=80=A7=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E6=94=B9=E4=B8=BA=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E4=BB=A3=E7=90=86=E8=AE=BF=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/config_manager.py | 80 +++++++++++++++--------------------- 1 file changed, 33 insertions(+), 47 deletions(-) diff --git a/src/config/config_manager.py b/src/config/config_manager.py index 3e302df..b888ab7 100644 --- a/src/config/config_manager.py +++ b/src/config/config_manager.py @@ -8,14 +8,6 @@ from watchdog.events import FileSystemEventHandler, FileModifiedEvent from ..logger import logger from .config import Config, load_config -from .official_configs import ( - ChatConfig, - DebugConfig, - MaiBotServerConfig, - NapcatServerConfig, - NicknameConfig, - VoiceConfig, -) class ConfigManager: @@ -142,47 +134,41 @@ class ConfigManager: value = getattr(value, part) return value - @property - def nickname(self) -> NicknameConfig: - """昵称配置""" + def __getattr__(self, name: str) -> Any: + """动态代理配置属性访问 + + 支持直接访问配置对象的属性,如: + - config_manager.napcat_server + - config_manager.chat + - config_manager.debug + + Args: + name: 属性名 + + Returns: + Any: 配置对象的对应属性值 + + Raises: + RuntimeError: 配置尚未加载 + AttributeError: 属性不存在 + """ + # 私有属性不代理 + if name.startswith('_'): + raise AttributeError( + f"'{type(self).__name__}' object has no attribute '{name}'" + ) + + # 检查配置是否已加载 if self._config is None: raise RuntimeError("配置尚未加载,请先调用 load() 方法") - return self._config.nickname - - @property - def chat(self) -> ChatConfig: - """聊天配置""" - if self._config is None: - raise RuntimeError("配置尚未加载,请先调用 load() 方法") - return self._config.chat - - @property - def voice(self) -> VoiceConfig: - """语音配置""" - if self._config is None: - raise RuntimeError("配置尚未加载,请先调用 load() 方法") - return self._config.voice - - @property - def napcat_server(self) -> NapcatServerConfig: - """NapCat服务器配置""" - if self._config is None: - raise RuntimeError("配置尚未加载,请先调用 load() 方法") - return self._config.napcat_server - - @property - def maibot_server(self) -> MaiBotServerConfig: - """MaiBot服务器配置""" - if self._config is None: - raise RuntimeError("配置尚未加载,请先调用 load() 方法") - return self._config.maibot_server - - @property - def debug(self) -> DebugConfig: - """调试配置""" - if self._config is None: - raise RuntimeError("配置尚未加载,请先调用 load() 方法") - return self._config.debug + + # 尝试从 _config 获取属性 + try: + return getattr(self._config, name) + except AttributeError as e: + raise AttributeError( + f"'{type(self).__name__}' object has no attribute '{name}'" + ) from e async def start_watch(self) -> None: """启动配置文件监控(需要在事件循环中调用)"""