Discord机器人kick命令未识别目标用户时不发送提示消息问题
问题原因
你的代码无法触发找不到用户提示的核心问题有3个:
- 命令参数定义错误:
kick函数多写了一个message形参,discord.py命令的所有上下文信息都已经封装在ctx对象中,多余的参数会打乱参数解析顺序,导致输入的成员ID/昵称被错误赋值给message参数,直接触发参数缺失报错。 - 判断逻辑永远不会执行:你使用的
discord.Member类型转换器是discord.py内置的参数校验逻辑,如果传入的参数无法匹配到当前服务器的有效成员,转换器会在函数内部逻辑运行之前直接抛出MemberNotFound错误,根本走不到你写的if member is False分支。 - 判断条件不成立:
member参数要么是合法的discord.Member实例,要么转换器直接抛错,永远不会等于布尔值False,这个判断条件本身永远不会成立。
修复代码
你需要通过命令专属的错误处理装饰器捕获成员查找失败的场景,修正后的完整代码如下:
@bot.command(name='kick') @commands.has_permissions(kick_members=True) # 可选:加权限校验,只有拥有踢人权限的用户才能调用命令 async def kick(ctx, member: discord.Member, *, reason=None): if reason is None: reason = "no reason provided" await ctx.guild.kick(member) await ctx.send(f'User {member.mention} has been kicked. \nReason: {reason}') # 捕获kick命令运行时的错误 @kick.error async def kick_error(ctx, error): if isinstance(error, commands.MemberNotFound): await ctx.send("User can't be found") # 可按需扩展其他错误处理 elif isinstance(error, commands.MissingPermissions): await ctx.send("You do not have permission to use this command")
前置要求:确保你初始化bot实例时开启了成员权限意图,即设置
intents.members = True,否则成员查找功能本身会失效。
内容的提问来源于stack exchange,提问作者rockycanyons
相关产品推荐
相关产品推荐

