diff --git a/astrbot/core/pipeline/process_stage/method/llm_request.py b/astrbot/core/pipeline/process_stage/method/llm_request.py index ce998e7cb..fd9dde12d 100644 --- a/astrbot/core/pipeline/process_stage/method/llm_request.py +++ b/astrbot/core/pipeline/process_stage/method/llm_request.py @@ -75,6 +75,10 @@ class LLMRequestSubStage(Stage): except BaseException: logger.error(traceback.format_exc()) + if event.is_stopped(): + logger.info(f"{star_map[handler.handler_module_path].name} - {handler.handler_name} 终止了事件传播。") + return + if isinstance(req.contexts, str): req.contexts = json.loads(req.contexts) @@ -92,6 +96,11 @@ class LLMRequestSubStage(Stage): await handler.handler(event, llm_response) except BaseException: logger.error(traceback.format_exc()) + + if event.is_stopped(): + logger.info(f"{star_map[handler.handler_module_path].name} - {handler.handler_name} 终止了事件传播。") + return + # 保存到历史记录 await self._save_to_history(event, req, llm_response) diff --git a/astrbot/core/pipeline/respond/stage.py b/astrbot/core/pipeline/respond/stage.py index 9980d46c3..cbd8c197d 100644 --- a/astrbot/core/pipeline/respond/stage.py +++ b/astrbot/core/pipeline/respond/stage.py @@ -95,5 +95,9 @@ class RespondStage(Stage): await handler.handler(event) except BaseException: logger.error(traceback.format_exc()) + + if event.is_stopped(): + logger.info(f"{star_map[handler.handler_module_path].name} - {handler.handler_name} 终止了事件传播。") + return event.clear_result() \ No newline at end of file diff --git a/astrbot/core/pipeline/result_decorate/stage.py b/astrbot/core/pipeline/result_decorate/stage.py index c7f0bf72c..5db4d19b5 100644 --- a/astrbot/core/pipeline/result_decorate/stage.py +++ b/astrbot/core/pipeline/result_decorate/stage.py @@ -70,6 +70,10 @@ class ResultDecorateStage(Stage): logger.debug(f"hook(on_decorating_result) -> {star_map[handler.handler_module_path].name} - {handler.handler_name} 将消息结果清空。") except BaseException: logger.error(traceback.format_exc()) + + if event.is_stopped(): + logger.info(f"{star_map[handler.handler_module_path].name} - {handler.handler_name} 终止了事件传播。") + return # 需要再获取一次。插件可能直接对 chain 进行了替换。 result = event.get_result() diff --git a/astrbot/core/pipeline/scheduler.py b/astrbot/core/pipeline/scheduler.py index fcb200787..a59181cf5 100644 --- a/astrbot/core/pipeline/scheduler.py +++ b/astrbot/core/pipeline/scheduler.py @@ -27,6 +27,9 @@ class PipelineScheduler(): logger.debug(f"阶段 {stage.__class__ .__name__} 已终止事件传播。") break await self._process_stages(event, i + 1) + if event.is_stopped(): + logger.debug(f"阶段 {stage.__class__ .__name__} 已终止事件传播。") + break else: await coro