discord.py - 检查是不是找不到子命令

Posted

技术标签:

【中文标题】discord.py - 检查是不是找不到子命令【英文标题】:discord.py - Check if subcommand is not founddiscord.py - 检查是否找不到子命令 【发布时间】:2021-04-16 23:59:52 【问题描述】:

我有一个命令组,在一个 cog 中,称为“todo”,当它被自己调用时(即没有子命令),它会显示一个待办事项列表。如果子命令不存在,那么它会显示一条消息(因为否则,它只会显示待办事项列表)。问题在于后者,我无法让 if 语句工作。

@commands.group()
    async def todo(self, ctx):
    # Main todo command with subcommands, shows list

        if self.bot.get_command(f"todo ctx.invoked_subcommand") == None:
            # the API has said that it returns None if subcommand is not found
            await ctx.send("Sorry, the `c!todo` command doesn't have that option.")
        elif ctx.invoked_subcommand is None:
            # code that shows list

使用此代码,即使我键入现有子命令或不键入子命令,它也会发送消息。

【问题讨论】:

【参考方案1】:

这是因为Context.invoked_subcommand 将返回Command 对象或无。所以这里不需要使用 get_command,因为它已经是你需要的 Command obj了。

因此,只需检查 invoked_subcommand 是否不是 None

【讨论】:

当我尝试这样做时,它还会在我键入退出的子命令时显示消息。即使我为子命令​​输入乱码,它仍然会显示列表。是否有另一种方法来检查子命令是否不存在?也许也使用了您的建议,例如在此伪代码中:if invoked_subcommand is not None AND invoked_subcommand doesn't exist: show message 我不确定我是否遵循。通过检查 ctx.invoked_subcommand 是否不是 None 它只有在命令是真实命令时才会通过。我已经对此进行了测试,如果命令不是真实的,我只会收到消息。 啊我明白了,我想我误解了代码的用法。对于我的代码,当我检查 invoked_subcommand 是否为 None 时,如果我自己键入 c!todo(这就是我的意图)或者如果我使用不存在的子命令键入它,它会显示列表,例如 @ 987654325@ (我假设是因为不存在的命令最终返回 None ,对吗?)。所以我的主要问题是,如果用户键入了不存在的子命令/乱码,是否有办法阻止 todo 命令显示列表。如果太复杂,我想我可以在最后添加另一个子命令到组中,比如c!todo show

以上是关于discord.py - 检查是不是找不到子命令的主要内容,如果未能解决你的问题,请参考以下文章

找不到命令“ping”错误 discord.py

Bash:Python3:找不到命令(Windows,discord.py)

Discord.py 重写 - 查看成员是不是被服务器静音,在 API 参考中找不到任何信息

Discord Py 从服务器运行命令

Discord bot python:discord.errors.ClientException:找不到ffmpeg

Discord.py - 检查用户是不是具有执行命令的特定角色