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

Discord机器人kick命令未识别目标用户时不发送提示消息问题

问题原因

你的代码无法触发找不到用户提示的核心问题有3个:

  1. 命令参数定义错误:kick函数多写了一个message形参,discord.py命令的所有上下文信息都已经封装在ctx对象中,多余的参数会打乱参数解析顺序,导致输入的成员ID/昵称被错误赋值给message参数,直接触发参数缺失报错。
  2. 判断逻辑永远不会执行:你使用的discord.Member类型转换器是discord.py内置的参数校验逻辑,如果传入的参数无法匹配到当前服务器的有效成员,转换器会在函数内部逻辑运行之前直接抛出MemberNotFound错误,根本走不到你写的if member is False分支。
  3. 判断条件不成立: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:36:23