Skip to content

feat: 支持将单次解析结果聚合为一条合并转发#570

Open
YomotsuHisami wants to merge 1 commit into
fllesser:masterfrom
YomotsuHisami:agent/forward-preview-with-contents
Open

feat: 支持将单次解析结果聚合为一条合并转发#570
YomotsuHisami wants to merge 1 commit into
fllesser:masterfrom
YomotsuHisami:agent/forward-preview-with-contents

Conversation

@YomotsuHisami

Copy link
Copy Markdown

功能说明

新增可选配置 parser_forward_all_messages。启用后,一次解析产生的预览、正文、图片、音频、视频及提示消息会按原顺序放入同一条合并转发中,避免解析结果在群聊中产生多条外部消息。

默认值为 False,因此不会改变现有用户的发送行为。

实现细节

  • 在统一 matcher 发送出口收集单次渲染产生的全部 UniMessage
  • 将每条原始消息作为独立转发节点;已有 Reference 会展开,避免嵌套转发。
  • 插件不主动截断内部节点;实际发送能力仍取决于适配器和平台。
  • 渲染中途发生异常时,已生成的内容会先聚合发送,随后继续抛出原异常。
  • 未修改各平台 parser 和 renderer 的原有渲染逻辑。

验证

  • Ruff lint、format 检查通过。
  • BasedPyright:0 errors。
  • tests/others:16 passed。
  • OneBot V11 QQ 群实际验证通过:外部仅显示一条合并转发,内部预览、图片和多个独立视频节点均可正常使用。

@codecov

codecov Bot commented Jul 20, 2026

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
53 1 52 1
View the top 1 failed test(s) by shortest run time
tests.parsers.test_nga::test_nga_parse
Stack Traces | 1.9s run time
tests/parsers/test_nga.py:21: in test_nga_parse
    result = await parser.parse(keyword, searched)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../nonebot_plugin_parser/parsers/base.py:89: in parse
    return await self._handlers[keyword](self, searched)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../nonebot_plugin_parser/parsers/nga.py:73: in _parse
    raise ParseException(f"无法获取页面, HTTP {resp.status_code}")
E   nonebot_plugin_parser.exception.ParseException: 无法获取页面, HTTP 403

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@YomotsuHisami

YomotsuHisami commented Jul 20, 2026

Copy link
Copy Markdown
Author

Test Parsers 连续两次失败,均为 tests/parsers/test_nga.py::test_nga_parse 请求 NGA 时返回 HTTP 403。

其余检查均已通过,该失败应为 NGA 对 GitHub Actions 请求的限制,与本 PR 的改动无关。

@YomotsuHisami
YomotsuHisami marked this pull request as ready for review July 20, 2026 14:01
@fllesser

fllesser commented Jul 20, 2026

Copy link
Copy Markdown
Owner

渲染图的存在是为了让用户扫一眼就能知道链接大概是什么内容,如果塞进合并转发,得点两下才能看到,信息获取效率降低,甚至不如直接打开链接

其次视频塞合并转发有概率会炸,或者无法播放

@YomotsuHisami

YomotsuHisami commented Jul 20, 2026

Copy link
Copy Markdown
Author

视频塞合并转发有概率会炸,或者无法播放

我个人挺需要全合并在一起的()

@fllesser

Copy link
Copy Markdown
Owner

建议 fork 自用

@YomotsuHisami

YomotsuHisami commented Jul 20, 2026

Copy link
Copy Markdown
Author

渲染图的存在是为了让用户扫一眼就能知道链接大概是什么内容,如果塞进合并转发,得点两下才能看到,信息获取效率降低,甚至不如直接打开链接

其次视频塞合并转发有概率会炸,或者无法播放

我的TIM和QQ经常会出现打不开B站小程序的情况,电脑还能用浏览器打开(不过本来就不用他那个小程序),手机基本上就没辙了。
因此,我一直挺刚需一个流媒体解析的,许多群友也觉得方便。

但是有些人提出「发预览图和视频会污染群图片历史」,
而且也会占用大幅的聊天版面。
故而,希望提供一个可选项。

@YomotsuHisami

YomotsuHisami commented Jul 20, 2026

Copy link
Copy Markdown
Author

关于渲染图并进去就变得没用了这事,我可以把原来的渲染图模式改成纯文本形式,在聊天记录预览那块就能看到足够的信息。
关于视频可能炸这个事,我有看到过其他群有bot塞进去。我的确没用多长时间,但也没运气特别好地复现过这个问题,我感觉只要99%的时候能正常解析就好?

如果是之前测过特别容易炸的话我就自用了。不是的话,我感觉这个功能还是有点用的,哪里不满意我都可以改。

@fllesser

Copy link
Copy Markdown
Owner

无论是渲染,还是纯文字,如果塞到合并转发,就需要等视频下载完成,不能快速响应

视频最开始就是塞在合并转发里的,因为很多人反映,播放不了,才拿出来的

@YomotsuHisami

YomotsuHisami commented Jul 21, 2026

Copy link
Copy Markdown
Author

无论是渲染,还是纯文字,如果塞到合并转发,就需要等视频下载完成,不能快速响应

视频最开始就是塞在合并转发里的,因为很多人反映,播放不了,才拿出来的

关于视频下载慢这个事,因为我开的是360p + 10mb视频限制,这个时候大部分视频基本上都超不过1mb。为了前述优点我是能接受这上传的延迟的。

还有想强调这是一个独立的配置,和 parser_need_forward_contents 是独立开来的,所以也可以作为一个「可能预览慢一点 但是完全不干扰不想看视频的人」的选项。如果觉得独立配置项有点割裂,我也可以进行修改。

@fllesser

fllesser commented Jul 25, 2026

Copy link
Copy Markdown
Owner

我知道是作为配置项,刚刚稍微看了一下,不应该去拆了重塞,又套了一层,有点难评,先挂着吧,我有时间了改改

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants