Skip to content

完善参数收集和文本提取,添加表情帮助指令#9

Open
monbed wants to merge 5 commits intojmt059:masterfrom
monbed:master
Open

完善参数收集和文本提取,添加表情帮助指令#9
monbed wants to merge 5 commits intojmt059:masterfrom
monbed:master

Conversation

@monbed
Copy link
Copy Markdown

@monbed monbed commented Apr 7, 2026

  1. 修复快捷指令中捕获组的参数解析和格式化能力
  2. 在表情详情中显示可选参数、参数别名、取值范围和默认值
  3. 新增 表情帮助 指令,展示所有可用命令和用法
  4. 使用Plain组件的文本提取逻辑,修复"图片后跟文字无法收集"的问题

1. 修复快捷指令中捕获组的参数解析和格式化能力
2. 在表情详情中显示可选参数、参数别名、取值范围和默认值
3. 新增 `帮助` 指令,展示所有可用命令和用法
4. 使用Plain组件的文本提取逻辑,修复"图片后跟文字无法收集"的问题
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

该 PR 旨在增强指令参数收集与文本提取能力,并新增“帮助”类指令以便用户快速查看可用命令与用法,提升插件在“图后带文字”等消息结构下的可用性。

Changes:

  • 扩展 MemeOption 模型字段以支持展示可选值与取值范围(choices/minimum/maximum)。
  • 调整 universal_handler 的文本提取方式为基于 Plain 组件拼接,改善“图片后跟文字无法收集”的场景。
  • 新增 表情帮助 指令,并调整快捷指令匹配逻辑以允许携带尾随文本传递给生成流程。

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
models.py 为选项元数据补充 choices/min/max 字段,支持更丰富的参数信息展示。
main.py 新增“表情帮助”路由;改用 Plain 组件提取文本;快捷指令改为 match() 并提取尾随文本。
handlers/help.py 新增 handle_meme_help,输出完整帮助文案。
handlers/generation.py handle_shortcut 支持接收并转发 trailing_text 到生成入口。

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread main.py
Comment thread handlers/help.py
Copy link
Copy Markdown
Owner

@jmt059 jmt059 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

感谢提交!整体思路清晰,针对 Issue #8 的修复方向是正确的。以下是详细审查意见:

👍 亮点

  1. 文本提取逻辑改进main.py):将 event.get_message_str() 改为只提取 Plain 组件的文本,修复了"图片后跟文字无法收集"的问题,这是一个很好的额外修复。
  2. 帮助指令help.py):Issue #8 中提到的需求,实现简洁实用。

⚠️ 需要注意的问题

1. 快捷指令匹配:缺少 fullmatch 优先路径

当前改动直接将 fullmatch 替换为 match,这可能导致一些问题——某些快捷指令的正则模式如果设计为精确匹配整段文本(如包含捕获组的复杂模式),改为 match 后可能在意料之外的位置产生部分匹配。建议保留 fullmatch 作为优先路径,match 作为回退:

if match := sc_data["pattern"].fullmatch(cleaned_text):
    asyncio.create_task(self.handle_shortcut(..., ""))
    return
if match := sc_data["pattern"].match(cleaned_text):
    trailing_text = cleaned_text[match.end():].strip()
    asyncio.create_task(self.handle_shortcut(..., trailing_text))
    return

2. MemeOption 字段类型过于严格

  • choices: Optional[List[str]] — 如果 API 返回的可选值包含非字符串类型(如整数),Pydantic 校验会失败。建议改为 Optional[List[Any]]
  • minimum/maximum: Optional[float] — 同理,改为 Optional[Any] 更安全,也能兼容 API 返回整数的情况。

3. info.py 未修改

虽然 MemeOption 新增了 choices/minimum/maximum 字段,但 _format_meme_option() 中仍然存在 option.type == "string" 的限制条件,非 string 类型的选项即使有 choices 也不会被显示。建议去掉这个类型限制。

4. 文件末尾缺少换行符

handlers/help.py 末尾缺少换行符(No newline at end of file),建议补上。

📝 总结

核心修复逻辑正确,但有几个细节需要打磨。特别是文本提取逻辑的改进很有价值,是一个不错的额外贡献。


Generated by Claude Code

@jmt059 jmt059 enabled auto-merge (squash) April 14, 2026 06:53
auto-merge was automatically disabled April 14, 2026 17:29

Head branch was pushed to by a user without write access

@monbed monbed changed the title 完善参数收集和文本提取,添加帮助指令 完善参数收集和文本提取,添加表情帮助指令 Apr 14, 2026
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.

3 participants