【问题标题】:Discord.py Slash commands mandatory parameters, not optionalsDiscord.py Slash 命令强制参数,而不是可选参数
【发布时间】:2022-07-06 15:15:50
【问题描述】:

我正在尝试制作一个简单的命令,如果您不输入 2 个数字作为参数,它会选择 1 到 10 之间的随机数,问题是我需要 2 个参数而不是可选的,如果你把它工作正常:

但是因为这两个参数都不是强制性的,所以你只能写 1 这使它不是我想要的那样工作,这将导致显示你选择的数字而不是 2 个数字之间的随机数:

如果需要,这里是代码:

#COMANDO SLASH NUM
@cog_ext.cog_slash(name='Numero', description='Selecciona un numero aleatorio entre el 1 y el 10 si no se especifica ninguno')
async def numero(self, ctx, primero=1, ultimo=10):
    n = random.randint(int(primero),int(ultimo))
    await ctx.send(n)

【问题讨论】:

  • async def numero(self, ctx, primero: int, ultimo: int): 替换您的方法定义使用=1=10 使您的app_command 参数成为可选。
  • @Paul 但我希望如果您不输入任何参数作为默认参数,例如 primeo=1 和 ultimo=1 是可能的,还是我必须选择一个,具有默认值或强制设置?
  • 您可以保留您的参数可选,并在您的方法定义下面添加一个条件。 async def numero(self, ctx, primero: int = None, ultimo: int = None): 然后下面你的条件:if not primero or not ultimo: primero, ultimo = 1, 10 如果条件不符合你的要求,请将or 更改为and

标签: python parameters discord discord.py


【解决方案1】:

改用这个

@cog_ext.cog_slash(name='Numero', description='Selecciona un numero aleatorio entre el 1 y el 10 si no se especifica ninguno')
async def numero(self, ctx, primero: int = 1, ultimo: int = 10):
    n = random.randint(primero, ultimo)
    await ctx.send(n)

上面的片段接受整数并将参数默认为“=”符号后提供的数字。

【讨论】: