我正在尝试为命令显示一条错误消息,因为当您不包含所有参数时,它将回显它们,例如:
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
但是我想要它,以便它可以自动对输入的任何命令执行操作,因此我不必这样做
答案 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
的其他一些属性,例如brief
或clean_params
,具体取决于您希望输出的外观是什么。