为什么我的 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
@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 aUser
对象。这样,您的程序将只在调用命令的服务器中查找指定的用户:#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