为了账号安全,请及时绑定邮箱和手机立即绑定

踢命令(discord.py)

踢命令(discord.py)

米脂 2023-09-19 14:51:43
所以我试图制作一个踢命令,以便如果没有任何原因,那么它会说“没有原因”而不是“没有”。别问为什么。这是我的代码:@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 它会说没有原因?
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

如果您分配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}**.")


查看完整回答
反对 回复 2023-09-19
?
慕容708150

TA贡献1831条经验 获得超4个赞

很简单,只需写:


@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}!')


查看完整回答
反对 回复 2023-09-19
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

您收到该错误是因为您的函数如下所示:

async def kick(ctx, user: discord.Member, *, reason: str):

Reason 在这里不是可选的,因此它是一个required argument. 这意味着在没有该参数的情况下调用此函数将导致错误。添加默认值使其成为可选。

def function(requiredArgument, optionalArgument=defaultValue)

在这种情况下,defaultValue应该是None. 现在,当您不为该参数传递任何内容时,将使用它的默认值。这样,您就不再需要添加理由。


查看完整回答
反对 回复 2023-09-19
  • 3 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信