From 5e808bab65d65eb204ef8cb3c8d68701533ec2e5 Mon Sep 17 00:00:00 2001 From: magisk317 <93979778+magisk317@users.noreply.github.com> Date: Sun, 19 Oct 2025 20:16:14 +0800 Subject: [PATCH] fix(platform): prevent 'NoneType' object is not iterable in _outline_chain and set_result (#3103) Guard against cases where message chain is None during pipeline execution. This change enhances error-resilience for logging and processing message chains. - Updated AstrMessageEvent._outline_chain to return an empty string when input chain is None - Updated AstrMessageEvent.set_result to ensure result.chain is always at least an empty list This prevents TypeError when result.chain or chain is unexpectedly None, improving pipeline stability when handling external plugins or corner cases. Co-authored-by: engine-labs-app[bot] <140088366+engine-labs-app[bot]@users.noreply.github.com> Co-authored-by: cto-new[bot] <140088366+cto-new[bot]@users.noreply.github.com> --- astrbot/core/platform/astr_message_event.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/astrbot/core/platform/astr_message_event.py b/astrbot/core/platform/astr_message_event.py index 48c63ef2c..05169c4fe 100644 --- a/astrbot/core/platform/astr_message_event.py +++ b/astrbot/core/platform/astr_message_event.py @@ -92,8 +92,10 @@ class AstrMessageEvent(abc.ABC): """ return self.message_str - def _outline_chain(self, chain: List[BaseMessageComponent]) -> str: + def _outline_chain(self, chain: Optional[List[BaseMessageComponent]]) -> str: outline = "" + if not chain: + return outline for i in chain: if isinstance(i, Plain): outline += i.text @@ -265,6 +267,9 @@ class AstrMessageEvent(abc.ABC): """ if isinstance(result, str): result = MessageEventResult().message(result) + # 兼容外部插件或调用方传入的 chain=None 的情况,确保为可迭代列表 + if isinstance(result, MessageEventResult) and result.chain is None: + result.chain = [] self._result = result def stop_event(self):