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:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user