有没有办法列出某些机器人命令的参数?

时间:2019-07-20 20:05:38

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

我正在尝试为命令显示一条错误消息,因为当您不包含所有参数时,它将回显它们,例如:

integer = 10
integer.object_id # => 21
# you can see it clearly gives the wrong output
# now use its Symbol: 
:integer.object_id # => 921236
# which is integer value of the object's address.

我知道,如果我自己运行@commands.command() async def foo(self, ctx, arg1, arg2): await ctx.send("You passed: {} and {}".format(arg1, arg2)) ,它将返回“ arg1是缺少的必需参数”,但是我希望它返回所有参数,例如{{1} }

我也知道我总是可以使用以下方式对其进行硬编码:

>foo

但是我想要它,以便它可以自动对输入的任何命令执行操作,因此我不必这样做

2 个答案:

答案 0 :(得分:0)

您可以使用*argv作为参数,例如def foo(self, *args):,然后检查args是否具有正确的长度

async def foo(self, *args):
    if len(args) != 2:
        await ctx.send("``Usage: >foo <arg1> <arg2>``")
    else:
        # Do something else

答案 1 :(得分:0)

您可以检查错误是否为MissingRequiredArgument,以及是否发送与该命令关联的帮助文本。您可以使用cog_command_error为来自齿轮的所有错误运行错误处理程序:

class MyCog(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
    @commands.command()
    async def foo(self, ctx, arg1, arg2):
          await ctx.send("You passed: {} and {}".format(arg1, arg2))
    async def cog_command_error(self, ctx, error):
        if isinstance(error, commands.MissingRequiredArgument):
            message = f"Params are {', '.join(ctx.command.clean_params)}, you are missing {error.param}"
            await ctx.send(message)
        else:
            raise error

您可以使用Command代替help的其他一些属性,例如briefclean_params,具体取决于您希望输出的外观是什么。