Discord.py使用cogs时如何自动生成命令正确用法的错误提示
实现方案
Discord.py 内置的命令对象已经封装了参数相关的元数据,无需手动解析函数签名即可自动生成用法提示,你只需要在已有的错误触发逻辑中加入如下的用法生成代码即可:
核心代码片段
# 你可以直接把这段逻辑嵌入你现有的错误检测分支中,此处以缺必填参数的错误场景为例 if ctx.command is not None: # 方案1:直接使用官方自动生成的完整参数签名(包含类型提示、可选参数标记) cmd_usage = f"{ctx.prefix}{ctx.command.name} {ctx.command.signature}" # 方案2:仅保留参数名,去掉类型提示(匹配你示例要求的输出格式) # param_str = " ".join([f"<{param.name}>" for param in ctx.command.clean_params.values()]) # cmd_usage = f"{ctx.prefix}{ctx.command.name} {param_str}" # 发送提示 await ctx.reply(f"> 正确用法:**{cmd_usage}**")
属性说明
ctx.command:当前触发错误的命令实例,调用前先判断非空可以避免用户输入不存在的命令时抛出异常ctx.prefix:用户当前调用命令使用的前缀,适配多前缀场景,无需硬编码!之类的固定前缀ctx.command.signature:Discord.py 自动生成的参数签名,会自动区分必填/可选参数,必填参数用<>包裹,可选参数用[]包裹,同时会显示你定义的参数类型注解,符合通用命令用法书写规范ctx.command.clean_params:命令的参数字典,遍历即可获取所有参数的名称、类型、默认值等信息,适合需要自定义用法格式的场景
你示例中的test_command使用方案2的代码时,就会直接生成你要求的!test_command <arg1> <arg2>格式的输出。
内容的提问来源于stack exchange,提问作者Malted
相关产品推荐
相关产品推荐

