从另一个命令discord.py

时间:2020-08-15 21:23:28

标签: python discord.py chatbot discord.py-rewrite

我正在使用discord.py,想从另一个命令中调用一个命令。在堆栈溢出中有很多类似的问题,但是我的不同之处在于我不希望要被调用的命令可供用户调用。

例如:

假设我有一个动物类别,并且在该类别中有两个命令,例如(笑话,图片)。然后,如果命令前缀为!

用户将输入!animals joke!animals pictures

这应该返回期望的结果。

我想我可以通过以下方式做到这一点:

animals.py:

@commands.command
async def animals(self, ctx, com_name):
    await ctx.invoke(self.bot.get_command(com_name))

jokes.py

@commands.command
async def joke(self, ctx):
   await ctx.send('a random joke')

现在,如果用户键入!animals joke,它将可以使用,但随后他们将可以键入!joke,并且也可以使用。如果类别也存在,我怎么只能让命令被调用。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以创建动物Group,然后将joke用作子命令:

@commands.group()
async def animals(self, ctx):
    pass

@animals.command()
async def joke(self, ctx):
   await ctx.send('a random joke')

另一种选择是在joke上添加始终为假的check

fail = commands.check(lambda ctx: False)

@fail
@commands.command()
async def joke(self, ctx):
   await ctx.send('a random joke')