Skip to content

feat: 添加消息段冲突检查功能,避免非法请求组合 - #227

Open
Yushu2606 wants to merge 3 commits into
nonebot:masterfrom
Yushu2606:patch-2
Open

feat: 添加消息段冲突检查功能,避免非法请求组合#227
Yushu2606 wants to merge 3 commits into
nonebot:masterfrom
Yushu2606:patch-2

Conversation

@Yushu2606

@Yushu2606 Yushu2606 commented Aug 13, 2026

Copy link
Copy Markdown

Closes #215, Closes #225

@yanyongyu yanyongyu added the bug Something isn't working label Aug 17, 2026
@yanyongyu

Copy link
Copy Markdown
Member

出现 segment 冲突的时候可以报错,但是不应该主动合并这些消息段,应该由用户在 开发阶段 解决冲突

@Yushu2606

Yushu2606 commented Aug 17, 2026

Copy link
Copy Markdown
Author

出现 segment 冲突的时候可以报错,但是不应该主动合并这些消息段,应该由用户在 开发阶段 解决冲突

整理了一下当前 pr 里 Bot._resolve_message_conflicts 对各消息段组合的实际处理结果(直接跑代码算出来的,不是手推),方便确认调整范围。

各段类型的落地字段

段类型 落地字段
text content
mention_user / mention_everyone / mention_channel / emoji content(本次唯一会被合并进 markdown 的情况,见下)
markdown(自由) markdown
markdown(模板) markdown
ark ark
keyboard keyboard
embed embed本次改动未覆盖,见下方脚注)
media(image/video/audio/file 等 8 种) media(需 msg_type=7 才会真正上传引用)
reference message_reference
prompt_keyboard(仅 C2C) prompt_keyboard
action_button(仅 C2C) action_button
stream(仅 C2C) stream

单独出现(消息里只有这一种段)

段类型 C2C 群聊
text / mention/emoji / markdown(自由/模板) / ark / embed / media / reference 通过 通过
keyboard 报错(缺 markdown) 报错(缺 markdown)
prompt_keyboard / action_button 报错(缺 markdown) 报错(接口没有该字段)
stream 通过 报错(接口没有该字段)

两两组合(C2C / 群聊结果一致,prompt_keyboard/action_button/stream 是 C2C 独有,群聊下单独出现就直接报错,不需要再看搭配)

↓ × → text mention/emoji md(自由) md(模板) ark keyboard embed† media reference
text 通过 通过 报错 报错 报错 报错* 通过 通过 通过
mention/emoji 通过 通过 合并→markdown 报错 报错 报错* 通过 通过 通过
md(自由) 报错 合并→markdown 合并→markdown 报错 报错 通过 通过 报错 通过
md(模板) 报错 报错 报错 报错 报错 通过 通过 报错 通过
ark 报错 报错 报错 报错 报错 报错* 通过 报错 通过
keyboard 报错* 报错* 通过 通过 报错* 报错 报错* 报错* 报错*
embed† 通过 通过 通过 通过 通过 报错* 报错 报错 通过
media 通过 通过 报错 报错 报错 报错* 报错 报错 通过
reference 通过 通过 通过 通过 通过 报错* 通过 通过 报错

对角线=同类型出现 2 个及以上(比如 md(自由)×md(自由) 那格=多个 markdown 段的情况)。

* 不是这两种段本身互斥——是 keyboard(及 C2C 下的 prompt_keyboard/action_button)自己的规则:必须搭配 markdown 段一起用,缺了就报错,跟搭档是谁无关。
embed 在 C2C/群聊本来就不受官方支持,这次改动没碰它,"通过"只是没被拦,不代表判定为安全。

需要注意的地方

合并→markdown 的两格(mention/emoji × markdown(自由)markdown(自由) × markdown(自由))目前是自动合并。

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

Labels

bug Something isn't working

Development

Successfully merging this pull request may close these issues.

Bug: Markdown与其他消息段的混排、互斥与静默丢弃问题 群聊/单聊一个消息多图, 只传上去最后一张图

2 participants