Skip to content

[Bug] Discord专属MessageChain组件无法构建,可能会在发送前被丢弃 #7965

@SGSxingchen

Description

@SGSxingchen

What happened / 发生了什么

Discord 平台适配器中提供了 DiscordEmbed、DiscordButton、DiscordView 等 Discord 专用 MessageChain 组件。
但这些组件继承自 BaseMessageComponent,而 BaseMessageComponent 是 Pydantic BaseModel。
当前实现中,DiscordEmbed 等类只声明了 type 字段,却在 init 中直接给 title、description、label、components、view 等未声明字段赋值。
这会导致组件构造时报错,例如 ValueError: "DiscordEmbed" object has no field "title"。
因此插件或业务代码无法正常通过 MessageChain([DiscordEmbed(...)]) 发送 Discord Embed。
此外,DiscordPlatformEvent._parse_to_discord 目前主要依赖 isinstance(i, DiscordEmbed / DiscordView) 判断组件类型。
这会导致插件本地兼容组件、热重载后的类对象、或其他 duck-typed discord_embed 组件无法被识别。
还有一个相关问题:RespondStage._is_empty_message_chain 只识别内置组件类型。
纯 discord_embed / discord_view 消息链可能在进入 Discord adapter 前就被判定为空消息并跳过。

Reproduce / 如何复现?

在 AstrBot 项目根目录运行以下最小复现
from astrbot.core.platform.sources.discord.components import DiscordEmbed DiscordEmbed(title="test")

AstrBot version, deployment method (e.g., Windows Docker Desktop deployment), provider used, and messaging platform used. / AstrBot 版本、部署方式(如 Windows Docker Desktop 部署)、使用的提供商、使用的消息平台适配器

AstrBot:4.23.6,commit cb5c172,master 分支

部署方式:Linux 源码部署,使用 uv / venv 运行

消息平台:Discord adapter

OS

Windows

Logs / 报错日志

Traceback (most recent call last):
File "", line 2, in
File "/root/AstrBot/astrbot/core/platform/sources/discord/components.py", line 23, in init
self.title = title
File "/root/AstrBot/.venv/lib/python3.12/site-packages/pydantic/v1/main.py", line 380, in setattr
raise ValueError(f'"{self.class.name}" object has no field "{name}"')
ValueError: "DiscordEmbed" object has no field "title"

Are you willing to submit a PR? / 你愿意提交 PR 吗?

  • Yes!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:platformThe bug / feature is about IM platform adapter, such as QQ, Lark, Telegram, WebChat and so on.bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions