为什么我的 Discord.py 踢命令在识别昵称时有问题?

Why Does My Discord.py Kick Command have a problem recognizing nicknames?

@client.command( )
async def kick(ctx, user_name: discord.User, reason):
    await ctx.guild.kick(user_name)
    await ctx.send(f"""{user_name} has been kicked for {reason}""")

出于某种原因,有时我的机器人无法识别某些昵称。对于没有 spaces/just 个单词的昵称,机器人踢他们没有问题。但是对于带下划线或者空格的昵称,就不行了。我是不是做错了什么?

你的命令有一些错误:

  • 如果在user_name后面写一个句子,reason只会取这句话的第一个词作为值。要解决第一个问题:
    #Change
    async def kick(ctx, user_name: discord.User, reason):
    
    #To
    async def kick(ctx, user_name: discord.User, *, reason):
    
  • 那么,user_name应该是一个Member object, not a User对象。这样,您的程序将只在调用命令的服务器中查找指定的用户:
    #Change
    async def kick(ctx, user_name: discord.User, *, reason):
    
    #To
    async def kick(ctx, user_name: discord.Member, *, reason):
    
  • 最后,为了让它按预期工作,请提及您要踢出的用户而不是写他的名字:
    正确的方式 → !kick @User You didn't respect the rules
    没有那么正确的方法 → !kick User You didn't respect the rules