Discord.py中info命令处理不存在用户时的discord.NotFound异常问题
解决Discord机器人
info命令查询不存在用户的NotFound异常问题 嘿,我帮你搞定这个问题!你遇到的情况是因为Discord.py的discord.Member类型转换器在找不到对应用户时,会自动抛出discord.NotFound异常,而你的代码没有对这个异常做捕获处理,所以就触发报错了。下面给你两种实用的解决方案:
方案一:直接捕获NotFound异常
这是最直接的方式,用try-except块包裹你的命令逻辑,当异常发生时返回友好提示:
@laugh.command(pass_context=True) async def info(ctx, user: discord.Member = None): try: # 如果没有指定用户,默认取命令发送者 if user is None: user = ctx.author # 这里写你原本的用户信息展示逻辑 embed = discord.Embed(title=f"{user.display_name}的信息", color=user.color) embed.add_field(name="用户ID", value=user.id) embed.add_field(name="加入服务器时间", value=user.joined_at.strftime("%Y-%m-%d %H:%M:%S")) embed.set_thumbnail(url=user.avatar.url) await ctx.send(embed=embed) except discord.NotFound: await ctx.send("抱歉,找不到这个用户哦!请检查输入的用户名/ID是否正确~")
方案二:手动处理用户输入(更灵活)
如果你想自定义用户查找逻辑(比如支持模糊匹配),可以不用discord.Member类型转换器,自己处理输入并查询用户:
@laugh.command(pass_context=True) async def info(ctx, *, user_input: str = None): # 默认取命令发送者 if user_input is None: user = ctx.author else: # 先尝试通过用户ID查找 try: user_id = int(user_input) user = ctx.guild.get_member(user_id) except ValueError: # ID无效的话,尝试通过用户名/昵称查找(不区分大小写) user = discord.utils.find( lambda m: m.name.lower() == user_input.lower() or m.display_name.lower() == user_input.lower(), ctx.guild.members ) # 没找到用户就提示 if user is None: await ctx.send("抱歉,找不到这个用户哦!请检查输入的用户名/ID是否正确~") return # 后续的信息展示逻辑和之前一致 embed = discord.Embed(title=f"{user.display_name}的信息", color=user.color) embed.add_field(name="用户ID", value=user.id) embed.add_field(name="加入服务器时间", value=user.joined_at.strftime("%Y-%m-%d %H:%M:%S")) embed.set_thumbnail(url=user.avatar.url) await ctx.send(embed=embed)
两种方案各有优势:方案一简单快捷,适合快速修复异常;方案二更灵活,能应对更多自定义查找场景,比如支持模糊匹配用户名。你可以根据自己的需求选择~
内容的提问来源于stack exchange,提问作者LaughOutQuiet
相关产品推荐
相关产品推荐

