You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py如何无需双引号输入带空格长查询同时正常识别flags

问题原因

你之前的两种写法都不符合discord.py FlagConverter的参数解析规则:

  • 第一种写法中query是普通位置参数,默认仅会匹配第一个空格前的输入内容,带空格的文本必须用双引号包裹才会被识别为单个字符串参数。
  • 第二种写法中*会将命令名之后的所有输入内容全部赋值给query,完全不会触发后续的Flag解析逻辑,因此会抛出options参数缺失的报错。

解决方案

利用discord.py 2.0+版本FlagConverter内置的rest参数,把歌曲名查询字段直接集成到Flag类中,调整代码如下:

1. 修改Options类定义

class Options(commands.FlagConverter, delimiter=" ", prefix="--"):
    # rest=True表示会捕获所有Flag参数之前的全部输入内容,不受空格限制
    query: str = commands.Flag(rest=True)
    next: bool = False
    now: bool = False

2. 调整play命令定义

@commands.command(brief="play [track] <options>")
async def play(self, ctx, *, options: Options) -> None:
    # 直接从options中取解析后的结果即可
    query = options.query
    now = options.now
    next_flag = options.next
    # 后续原有业务逻辑保持不变

调整完成后,直接输入play Sweet Dreams --now就可以正常识别,不需要再加双引号包裹歌曲名。

实现原理

commands.Flag(rest=True)会标记对应字段为剩余内容捕获字段,FlagConverter解析参数时会自动将所有出现在任意--开头的Flag参数之前的输入内容,不管包含多少空格,都作为完整字符串赋值给该字段,同时不会影响后续Flag参数的正常解析。

内容的提问来源于stack exchange,提问作者Alado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:42:02