diff --git a/main.py b/main.py index 06cf744..d9a1249 100644 --- a/main.py +++ b/main.py @@ -417,11 +417,27 @@ class GroupDailyAnalysis(Star): if enable_album and hasattr(adapter, "upload_group_album"): try: album_name = self.config_manager.get_group_album_name() + strict_mode = self.config_manager.get_group_album_strict_mode() album_id = None - if album_name and hasattr(adapter, "find_album_id"): - album_id = await adapter.find_album_id(group_id, album_name) # type: ignore[attr-defined] + if hasattr(adapter, "find_album_id"): + if album_name: + album_id = await adapter.find_album_id(group_id, album_name) # type: ignore[attr-defined] + if not album_id and strict_mode: + logger.info( + f"群相册严格模式开启:在群 {group_id} 中未找到名为 '{album_name}' 的相册,停止上传。" + ) + return + elif strict_mode: + logger.info( + f"群相册严格模式开启:未设置目标相册名称,停止上传以防止操作群 {group_id} 的默认相册。" + ) + return await adapter.upload_group_album( # type: ignore[attr-defined] - group_id, image_file, album_id=album_id, album_name=album_name + group_id, + image_file, + album_id=album_id, + album_name=album_name, + strict_mode=strict_mode, ) except Exception as e: logger.warning(f"群相册上传失败 (群 {group_id}): {e}") diff --git a/src/infrastructure/config/config_manager.py b/src/infrastructure/config/config_manager.py index f8a9bc9..bba2525 100644 --- a/src/infrastructure/config/config_manager.py +++ b/src/infrastructure/config/config_manager.py @@ -434,8 +434,10 @@ class ConfigManager: return self._get_group("qq_group_upload").get("group_album_name", "") def get_group_album_strict_mode(self) -> bool: - """获取极简模式开关:当未找到指定相册时是否禁止回退到默认相册""" - return self._get_group("qq_group_upload").get("group_album_strict_mode", False) + """获取群相册上传严格模式开关。""" + return bool( + self._get_group("qq_group_upload").get("group_album_strict_mode", True) + ) def set_group_album_strict_mode(self, enabled: bool): """设置群相册上传严格模式""" diff --git a/src/infrastructure/platform/adapters/onebot_adapter.py b/src/infrastructure/platform/adapters/onebot_adapter.py index cb63a8a..46b1be3 100644 --- a/src/infrastructure/platform/adapters/onebot_adapter.py +++ b/src/infrastructure/platform/adapters/onebot_adapter.py @@ -1134,6 +1134,7 @@ class OneBotAdapter(PlatformAdapter): image_path: str, album_id: str | None = None, album_name: str | None = None, + strict_mode: bool = False, ) -> bool: """ 上传图片到群相册(NapCat 扩展 API)。 @@ -1146,11 +1147,19 @@ class OneBotAdapter(PlatformAdapter): image_path: 本地图片文件的绝对路径 album_id: 目标相册 ID album_name: 目标相册名称(部分 API 需要) + strict_mode: 严格模式。开启后,当指定了 album_name 但找不到对应相册时将直接终止上传 Returns: bool: 上传是否成功 """ try: + # 严格模式:指定了相册名但未解析到 album_id 时,禁止回退默认相册 + if strict_mode and album_name and not album_id: + logger.info( + f"群相册严格模式开启:未找到目标相册 '{album_name}' (群 {group_id}),停止上传。" + ) + return False + # 如果没有 album_id,尝试获取该群的第一个相册作为默认目标 if not album_id: albums = await self.get_group_album_list(group_id) diff --git a/src/infrastructure/reporting/dispatcher.py b/src/infrastructure/reporting/dispatcher.py index 4201a08..746f960 100644 --- a/src/infrastructure/reporting/dispatcher.py +++ b/src/infrastructure/reporting/dispatcher.py @@ -253,7 +253,11 @@ class ReportDispatcher: return await adapter.upload_group_album( - group_id, file_path, album_id=album_id, album_name=album_name + group_id, + file_path, + album_id=album_id, + album_name=album_name, + strict_mode=strict_mode, ) except Exception as e: logger.warning(f"群相册上传失败 (群 {group_id}): {e}")