discord.py |如何在全局错误处理程序中的命令中显示所有缺少的参数

时间:2019-11-16 15:16:11

标签: python discord discord.py

因此,我想在discord.py的全局错误处理程序on_command_error(ctx, error)中处理我的每个命令,而我想做的就是告诉用户缺少哪些参数,但仅是discord.py(我认为)为我提供了一个缺少的参数,我不想告诉用户,例如在清除命令中,缺少的参数是数量,然后在2条消息中也缺少另一个参数,我只想告诉他们全部缺少的参数。

这是我的代码:

    async def on_command_error(ctx, error):
        if isinstance(error, cmd.MissingRequiredArgument):
           arg = error.param.name
           await ctx.send(arg)
不幸的是,

及其上方仅显示1个缺少的参数,并且 error 变量未提供更多信息。 所以我的问题是有什么办法可以得到所有缺少的论点?如果不在discord.py库中,那么可能还有另一个?

2 个答案:

答案 0 :(得分:0)

在我自己研究了一些之后,discord.py 仅在第一个缺少它的参数时引发错误。例如,如果您有 3 个参数并且您提供了第一个,则会引发错误,指出缺少参数(参数名称)。它不是对所有的人都这样做,而是对需要但在执行命令时找不到的第一个参数。您的代码很好,因为它告诉他们缺少的参数。然后,如果他们包含它,它会显示下一个。不幸的是,据我所知,这是不可能的。

答案 1 :(得分:0)

您必须为此创建自己的错误,

class PurgeError(commands.CommandError):
   def __init__(self, text):
       self.text = text
   
   def __str__(): #used to get string of error
      return self.text

async def purge(ctx, args = None): #your command
  if args is None: #missing argument
      raise PurgeError("args is a required argument that is missing")

async def on_command_error(ctx, error): #error handler
  if isinstance(error, PurgeError):
      await ctx.send(error) #format error

参考: