discord.py中命令的任意顺序参数
discord-argparse的Python项目详细描述
不和谐
在 discord.py库。
param_converter=ArgumentConverter(turns=RequiredArgument(int,# follows the rules of a converter in discord.pydoc="The number of turns this quiz has.",default=10),images=OptionalArgument(bool,doc="(Dis-)allow image questions.",default=True),voice_channel=OptionalArgument(discord.VoiceChannel))@bot.command()asyncdefquiz(ctx,name:str,*,params:param_converter=param_converter.defaults()):awaitctx.send("Turns: {0}".format(params['turns']))@quiz.errorasyncdefquiz_error(ctx,error):ifisinstance(error,InvalidArgumentValueError):awaitctx.send("Invalid argument value for parameter {0}".format(error.name))elifisinstance(error,UnknownArgumentError):awaitctx.send("Unknown argument {0}".format(error.name))
在不协调服务器上,可以这样调用命令:
!quiz pokemon
→ will raise a MissingRequiredArgument exception
!quiz pokemon turns=2
→ args["images"] will be True
!quiz pokemon turns=2 images=false
安装
可通过PIP进行安装:
pip install discord_argparse
文档
初始化一个ArgumentConverter
如上例所示,注释一个
在命令中使用实例和的纯关键字函数参数,
也可以使用.defaults()
方法设置其默认值。设置A
如果使用必需的参数,则可以省略默认值(否则将
引发MissingRequiredArgument
异常)。
在命令内部,您可以作为dict访问参数。
自定义帮助格式化程序
通过使用自定义帮助格式化程序,可以将所有参数的列表发送到
你的机器人的用户。向bot发送!help quiz
后的示例输出,
可能是这样的:
!quiz <name> <params>
Starts a quiz.
This command will start a quiz.
Example usage: !quiz pokemon turns=12 images=false
Arguments:
turns The number of questions this quiz has.
images (Dis-)allow image questions.
voice_channel
要使用参数列表,请创建自定义help
command
重写send_command_help
函数,如下所示:
asyncdefsend_command_help(self,command):self.add_command_formatting(command)forname,paramincommand.clean_params.items():ifisinstance(param.annotation,da.ArgumentConverter):arguments=param.annotation.argumentsifnotarguments:continueself.paginator.add_line("Arguments:")max_size=max(len(name)fornameinarguments)forname,argumentinarguments.items():entry="{0}{1:<{width}} {2}".format(self.indent*" ",name,argument.doc,width=max_size)self.paginator.add_line(self.shorten_text(entry))self.paginator.close_page()awaitself.send_pages()
您可能还想设置command()
函数的usage
参数
decorator以显示更好的使用字符串,特别是在使用
ArgumentConvert.defaults()
方法。