如何在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)
关键修改说明
- 新增
BadArgument错误捕获:当输入的文本无法转换为discord.Member类型时,会触发该错误,此时发送对应提示。 - 增加参数匹配判断:通过错误信息中的"member"关键词,确保只针对
kiss命令的用户参数错误发送提示,避免影响其他命令的错误逻辑。 - 可选的默认错误处理:将未覆盖的错误打印到控制台,方便后续调试其他潜在问题。
内容的提问来源于stack exchange,提问作者gallmonds
相关产品推荐
相关产品推荐

