踢命令(discord.py)

所以我试图制作一个踢命令,以便如果没有任何原因,那么它会说“没有原因”而不是“没有”。别问为什么。


这是我的代码:


@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.

我不明白为什么它说“原因是缺少的必需参数”,因为我说如果原因是 None 它会说没有原因?


米脂
浏览 115回答 3
3回答

胡说叔叔

如果您分配None给reason,那么您可以检查它。例如reason = None。之后,您可以检查命令是否原因为None。这是代码:@client.command()@commands.has_permissions(kick_members=True)async def kick(ctx, user: discord.Member, *, reason = None):  if not reason:    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}**.")

慕容708150

很简单,只需写:@client.command()@commands.has_permissions(kick_members=True)    async def kick(self, ctx, user: discord.Member, *, reason=None):        await user.kick(reason=reason)        await ctx.send(f'{user.mention} has been kicked for {reason}!')

江户川乱折腾

您收到该错误是因为您的函数如下所示:async def kick(ctx, user: discord.Member, *, reason: str):Reason 在这里不是可选的,因此它是一个required argument. 这意味着在没有该参数的情况下调用此函数将导致错误。添加默认值使其成为可选。def function(requiredArgument, optionalArgument=defaultValue)在这种情况下,defaultValue应该是None. 现在,当您不为该参数传递任何内容时,将使用它的默认值。这样,您就不再需要添加理由。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python