Alconna Args - RF-Tar-Railt/Cesloi GitHub Wiki

Args

Args 是一个特殊的类,用来包装command中的args

opt = Option("test", args=Args(foo=AnyStr, num=AnyDigit).default(foo="bar"))

opt = Option("test", args=Args["foo":str:"bar", "num":int])

注: 在Args中, AnyStrstr是等价的, 其他类型同理

Args 构造时需要格式为key-value的多个参数, 或传入多个slice对象

推荐使用Args相关的魔术方法,如

>>> ar = Args["test":bool:"True"]["aaa":str:"bbb"] << Args["perm":AnyStr:"de"] + ["month", AnyDigit]
>>> ar["foo"] = ["bar", ...]
>>> ar
Args('test': '(True|False)' = 'True', 'aaa': '(.+)' = 'bbb', 'perm': '(.+)' = 'de', 'month': '(\d+)', 'foo': 'bar' = '<class 'inspect._empty'>')
>>> ar["foo"]
('bar', <class 'inspect._empty'>)

Args.default() 用来设置key对应的value的默认值,可以传入alconna.types下的Empty (实际为inspect._empty)

对于int,bool类的参数, Alconna解析成功后会把匹配出来的值(应该是str) 转回对应的类型 (如'123'变为123)

正则匹配

Alconna 提供了一些预制的正则表达式, 通常以 "Any" 打头

您可以在alconna.types里找到它们:

  • AnyStr: 任意字符
  • AnyDigit: 任意整数
  • AnyFloat: 任意浮点数
  • AnyIP: 任意ip
  • AnyUrl: 任意链接
  • Bool: "True""False"
  • Email: 任意邮件地址

当然,您可以填入自己的正则表达式

!!!warning

请尽量不要在optionsubcommandname里填入正则表达式

AnyParam 与 AllParam

AnyParamAllParam是特殊的两种参数类型, 作用分别为单参泛匹配与全参泛匹配

您可以在alconna.types里找到它们

对于同个命令, /test foo bar 123来讲

test1 = Alconna(
        command="/test",
        main_args=Args["wild":AnyParam],
    )
test2 = Alconna(
        command="/test",
        main_args=Args["wild":AllParam],
    )

test1只能将foo匹配给wild

test2 能够将foo bar 123 匹配给wild

!!!warning

AllParam会直接截断后续的命令解析操作, 请谨慎使用