Python Kick命令(discord.py)

Python Kick命令(discord.py),python,discord,discord.py,Python,Discord,Discord.py,所以我试着做一个kick命令,如果原因没有,那么它会说“没有原因”,而不是“没有”。不要问为什么 这是我的密码: @client.command() @commands.has_permissions(kick_members=True) async def kick(ctx, user: discord.Member, *, reason: str): if reason is None: await user.kick() await ctx.send(f"**

所以我试着做一个kick命令,如果原因没有,那么它会说“没有原因”,而不是“没有”。不要问为什么

这是我的密码:

@client.command()
@commands.has_permissions(kick_members=True)
async def kick(ctx, user: discord.Member, *, reason: str):
  if reason is None:
    await user.kick()
    await ctx.send(f"**{user}** has been kicked for **no reason**.")
  else:
    await user.kick(reason=reason)
    await ctx.send(f"**{user}** has been kicked for **{reason}**.")
下面是错误:

Ignoring exception in command kick:
Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/bot.py", line 903, in invoke
    await ctx.command.invoke(ctx)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 847, in invoke
    await self.prepare(ctx)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 784, in prepare
    await self._parse_arguments(ctx)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 699, in _parse_arguments
    kwargs[name] = await self.transform(ctx, param)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 535, in transform
    raise MissingRequiredArgument(param)
discord.ext.commands.errors.MissingRequiredArgument: reason is a required argument that is missing.

我不明白为什么它会说“reason是一个缺少的必需参数”,因为我说过如果reason为None,它会说no reason?

如果您将
None
分配给
reason
,那么您可以检查它。例如
reason=None
。之后,您可以在命令中检查原因是否为None。代码如下:

@client.command()
@commands.has_权限(kick_members=True)
异步def kick(ctx,用户:discord.Member,*,reason=None):
如果不是原因:
等待user.kick()
wait ctx.send(f“**{user}**因**无原因**而被踢出。”)
其他:
等待用户。踢(原因=原因)
wait ctx.send(f“**{user}**因**{reason}**”而被踢出)

您之所以会出现此错误,是因为您的函数如下所示:

async def kick(ctx, user: discord.Member, *, reason: str):
Reason在这里不是可选的,因此它是一个
必需的参数
。这意味着在没有该参数的情况下调用此函数将导致错误。添加默认值使其成为可选值

def function(requiredArgument, optionalArgument=defaultValue)

在这种情况下,
defaultValue
应该是
None
。现在,当您没有为该参数传入任何内容时,将使用它的默认值。这样,您就不必再添加原因。

您没有将
reason
设置为可选参数(即,它需要一个默认值)。您可以在参数中执行
reason:str=None
而不是
reason:str