Skip to content

Commit 8c94a00

Browse files
authored
fix(core): improve error handling of command parser and sync (#4161)
1 parent a44fdaa commit 8c94a00

2 files changed

Lines changed: 17 additions & 7 deletions

File tree

astrbot/core/star/command_management.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from dataclasses import dataclass, field
55
from typing import Any
66

7-
from astrbot.core import db_helper
7+
from astrbot.core import db_helper, logger
88
from astrbot.core.db.po import CommandConfig
99
from astrbot.core.star.filter.command import CommandFilter
1010
from astrbot.core.star.filter.command_group import CommandGroupFilter
@@ -192,12 +192,18 @@ def _collect_descriptors(include_sub_commands: bool) -> list[CommandDescriptor]:
192192
"""收集指令,按需包含子指令。"""
193193
descriptors: list[CommandDescriptor] = []
194194
for handler in star_handlers_registry:
195-
desc = _build_descriptor(handler)
196-
if not desc:
197-
continue
198-
if not include_sub_commands and desc.is_sub_command:
195+
try:
196+
desc = _build_descriptor(handler)
197+
if not desc:
198+
continue
199+
if not include_sub_commands and desc.is_sub_command:
200+
continue
201+
descriptors.append(desc)
202+
except Exception as e:
203+
logger.warning(
204+
f"解析指令处理函数 {handler.handler_full_name} 失败,跳过该指令。原因: {e!s}"
205+
)
199206
continue
200-
descriptors.append(desc)
201207
return descriptors
202208

203209

astrbot/core/star/star_manager.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,11 @@ async def load(self, specified_module_path=None, specified_dir_name=None):
631631
# 清除 pip.main 导致的多余的 logging handlers
632632
for handler in logging.root.handlers[:]:
633633
logging.root.removeHandler(handler)
634-
await sync_command_configs()
634+
try:
635+
await sync_command_configs()
636+
except Exception as e:
637+
logger.error(f"同步指令配置失败: {e!s}")
638+
logger.error(traceback.format_exc())
635639

636640
if not fail_rec:
637641
return True, None

0 commit comments

Comments
 (0)