Skip to content

[Bug] 飞书平台文字+图片混合消息文字被吞,只发送图片 #9839

Description

@PGC3085

问题描述

在飞书平台推送包含文字和图片的混合消息时,实际只发送图片,文字内容被吞。
问题出在 astrbot/core/platform/sources/lark/lark_event.py 的 _convert_to_lark 方法(约 L240-L244):

ret = []
_stage = []  # 缓冲文字段落
for comp in message.chain:
    if isinstance(comp, Plain):
        _stage.append({"tag": "md", "text": comp.text})
    elif isinstance(comp, AstrBotImage):
        # ... 上传图片得到 image_key ...
        ret.append(_stage)          # ← 按引用入队(非拷贝)
        ret.append([{"tag": "img", "image_key": image_key}])
        _stage.clear()              # ← 原地清空,同时清空已入队的文字段

ret.append(_stage) 将 _stage 列表对象按引用加入 ret,而非拷贝。随后的 _stage.clear() 会原地清空该列表,导致刚刚入队的文字段同时变为空列表。最终构造的飞书 post 消息内容变成:

{"zh_cn": {"title": "", "content": [[], [{"tag": "img", "image_key": "..."}]]}}

飞书客户端渲染时跳过空段落,用户只看到图片。

修复方案:
将引用入队改为快照拷贝:

if _stage:
    ret.append(list(_stage))  # 快照拷贝,避免后续 clear 影响已入队内容
    _stage.clear()
ret.append([{"tag": "img", "image_key": image_key}])

如何复现?

1.配置飞书(Lark)平台适配器并启动 AstrBot
2.通过任意方式(插件、AI 回复等)向飞书会话发送一条包含文字和图片的消息
3.观察飞书客户端:只收到图片,文字内容丢失

AstrBot 版本

v4.27.4

操作系统

Linux

部署方式

uv

使用的消息平台适配器

lark(飞书)

错误日志

在日志中似乎确实没有明显的相关日志

辅助信息

No response

检查清单

  • 我已在 Issue 列表中搜索过相关问题仍无法解决,或该问题从未被报告过。
  • 我已尝试过禁用所有插件,排除了可能是因插件导致的问题。
  • 我报告的问题与 AstrBot 本体相关,而非在报告某一插件的问题。
  • 我已阅读并同意本项目的贡献者行为准则
  • (可选)我愿意提交 PR 以帮助修复该问题。

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