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()方法。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Spring数据弹性搜索动态映射。将属性映射为keyvalue?   java迁移到AndroidX后,如何更新所有库?   如何将JSON对象部分解析为Java对象   hql中从int到boolean的java转换结果集   java在Android中如何将字符串数组连接到int数组并按数字(从高到低)排序?   java Oracle ATG存储库未解析   java在macos上构建openjdk9并崩溃   java如何在Ubuntu Linux中安装Amazon Corretto?   java可以测试一个范围内的布尔数组元素吗?   java有没有办法测试使用JUnit访问ContentResolver的类?还是我必须使用机器人分子?   java NotReadablePropertyException:bean类的属性“名称”无效   性能找到3个数字中最小值的最有效方法是Java?   安卓 java。lang.NullPointerException。。。。事故报告   java如何解决Maven exec插件:类路径过长错误?