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>
This commit is contained in:
magisk317
2025-10-19 20:16:14 +08:00
committed by GitHub
parent 361d78247b
commit 5e808bab65
+6 -1
View File
@@ -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):