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

如何在discord.py中实现非用户提及输入的错误提示?

解决Discord机器人命令输入非用户文本无错误提示的问题

你当前的错误处理只覆盖了缺少必填参数(MissingRequiredArgument)的场景,但当输入普通文本而非有效用户提及/ID时,会触发参数类型转换失败的错误(通常是BadArgument),这个错误未被处理,所以机器人无响应。

修改后的完整代码

@bot.event
async def on_command_error(ctx, error):
    # 处理未指定用户的情况
    if isinstance(error, ext.commands.errors.MissingRequiredArgument):
        await ctx.send(f"{ctx.author.mention}, 你需要指定一个用户!")
    # 处理输入非有效用户文本的情况
    elif isinstance(error, ext.commands.errors.BadArgument):
        # 精准匹配member参数的转换错误
        if "member" in str(error):
            await ctx.send(f"{ctx.author.mention}, 请输入有效的用户提及或用户ID!")
    # 可选:打印其他未处理错误到控制台用于调试
    else:
        print(f"未处理的错误:{error}")

@bot.command(name="kiss")
async def kiss(ctx, member: discord.Member):
    if ctx.message.channel.is_nsfw():
        with open('kiss.json') as kg:
            kissgifs = json.load(kg)
        ksrandomchoice = random.choice(kissgifs)
        embed = discord.Embed(title="Hi")
        embed.set_image(url=ksrandomchoice['kiss'])
        embed.add_field(name=f"{ctx.author.name} 亲了 {member.display_name},好浪漫!❤️", value="")
        await ctx.send(embed=embed)

关键修改说明

  1. 新增BadArgument错误捕获:当输入的文本无法转换为discord.Member类型时,会触发该错误,此时发送对应提示。
  2. 增加参数匹配判断:通过错误信息中的"member"关键词,确保只针对kiss命令的用户参数错误发送提示,避免影响其他命令的错误逻辑。
  3. 可选的默认错误处理:将未覆盖的错误打印到控制台,方便后续调试其他潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:06:28