Package: nonebot-args-patch
Nonebot-Args-Patch简介一款自用的nonebot2的参数处理器，主要用于处理nb2的命令参数，支持内容：重写on_command：支持自定义数量的必选、可选、at目标参数支持command_group，方便管理默认参数Default()支持默认值，可以为Any或者Callable，当为Callable时，可以使用nb2内置的依赖注入参数所有参数都支持help信息，在参数检测错误时会返回指令帮助在未检测到命令时，支持相似命令修正（这个需要占用一个matcher）警告本模块修改了nb2框架部分代码，所以需要在bot.py文件下打一下补丁：# bot.py下需要加入以下代码importnonebot_args_patch.patch如果你使用新版nb-cli，没有bot.py，那么你可以选择：在bot目录下，使用命令nb generate生成bot.py或者在某个插件下输入以上代码（只需要输入一次即可）安装使用pip进行安装pipinstallnonebot_args_patch构造matcher需要使用补丁内的on_command或者command_group才能生效fromnonebot_args_patchimporton_commandmatcher=on_command(cmd="xxx")注意on_command可以说是nb2内置的on_command加强版，依旧会使用nb2内置的command_start，默认为/；如果不想要命令前缀，需要修改env文件# .env 或者 .env.xxx
command_start = [""]on_command参数列表:nb2原来的cmd: 指定命令内容rule: 事件响应规则aliases: 命令别名permission: 事件响应权限handlers: 事件处理函数列表temp: 是否为临时事件响应器（仅执行一次）expire_time: 事件响应器最终有效时间点，过时即被删除priority: 事件响应器优先级block: 是否阻止事件向更低优先级传递额外的参数need_space，默认为False：命令与参数之间是否需要空格True：强制命令和参数直接需要加一个空格，比如fromnonebot_args_patchimporton_command,Requirematcher=on_command(cmd="测试",need_space=True,arg=Require())"""> 测试 123可以触发,arg为123> 测试123不能触发"""need_help，默认为True：是否需要相似命令检验True：在未匹配到命令时，将额外触发一个matcher，用来检测相似的命令fromnonebot_args_patchimporton_command,Requirematcher=on_command(cmd="测试",need_help=True,arg=Require())"""> a测试不能触发，但会返回一句msg提示：未知命令，你可能想要找：测试 arg"""**kwargs：这里填写任意参数列表，参数必须是Require、AtRequire、Defaultfromnonebot_args_patchimporton_command,Require,Default,AtRequirematcher=on_command(cmd="测试",arg1=Require(),arg2=Default(default="2"),)Require使用此类表示这个参数是必须的。参数:help，str：该参数在命令帮助时显示的内容，默认为NoneNone：在命令帮助时，会显示为参数变量名fromnonebot_args_patchimporton_command,Requirematcher=on_command(cmd="测试",arg=Require())"""> 测试不能触发，帮助信息为：失败，命令传入参数不足测试 arg"""matcher=on_command(cmd="测试",arg=Require(help="参数1"))"""> 测试不能触发，帮助信息为：失败，命令传入参数不足测试 参数1"""Default使用此类表示这个参数是可选的。参数:default：可以是任意值，也可以是一个CallableAny：在获取参数时，会将内容原样返回，需要注意get_args时的类型标注Callable：将会执行该方法，同时方法也支持nb2的依赖注入fromnonebot_args_patchimporton_command,Defaultfromnonebot.paramsimportCommandmatcher=on_command(cmd="测试",arg=Default(default="默认"))# 默认值构造"""> 测试能触发，arg的值为'默认'"""defget_default():return"默认"matcher=on_command(cmd="测试",arg=Default(default=get_default))# 默认函数"""> 测试能触发，arg的值为'默认'"""defget_defaultarg(cmd:Message=Command()):returnstr(cmd)matcher=on_command(cmd="测试",arg=Default(default=get_default))# 默认函数+依赖注入"""> 测试能触发，arg的值为'测试'"""priority: 优先级，在命令缺少参数时，优先级越高的Default优先获取参数，数值越小优先级越高，默认为1help：该参数在命令帮助时显示的内容，默认为NoneAtRequire使用此类表示这个参数是需要at目标的。注意At需要adapter支持type为at的MessageSegment，比如adapter-onebotAt不强调at的位置，但多个At会有先后顺序，同时在nb2中，如果开头at机器人，会被adapter将at干掉。参数：该参数在命令帮助时显示的内容，默认为Nonehandler获取参数get_args参数:arg_name，str：你需要获取的参数名称，需要注意类型提示fromnonebot_args_patchimporton_command,Require,get_argsmatcher=on_command(cmd="测试",arg1=Require())@matcher.handle()asyncdef_(arg:str=get_args("arg1")):awaitmatcher.finish(arg)"""> 测试 123< 123"""result_type: 返回结果类型，默认为NoneNone：将原样返回获取到的结果Type[str]：尝试转换为str类型Type[int]：尝试转换为int类型Callable：会将获得的结果调用这个call之后返回fromnonebot_args_patchimporton_command,Require,get_argsmatcher=on_command(cmd="测试",arg1=Require())@matcher.handle()asyncdef_(arg:str=get_args("arg1",resule_type=str)):awaitmatcher.finish(arg)"""> 测试 123< 123  (字符串)"""@matcher.handle()asyncdef_(arg:int=get_args("arg1",resule_type=int)):awaitmatcher.finish(arg)"""> 测试 123< 123  (整数)"""defcall(value:str)->int:returnint(value)+1@matcher.handle()asyncdef_(arg:int=get_args("arg1",resule_type=call)):awaitmatcher.finish(arg)"""> 测试 123< 124  (整数)"""注意get_args也可用于子依赖fromnonebot.paramsimportDependsfromnonebot_args_patchimporton_command,Require,get_argsdefget_depend():def_get_depend(arg:str=get_args("arg1")):returnargreturnDepends(_get_depend)matcher=on_command(cmd="测试",arg1=Require())@matcher.handle()asyncdef_(arg:str=get_depend()):awaitmatcher.finish(arg)"""> 测试 123< 123"""命令帮助在参数匹配失败时，会输出一条帮助信息，内容为：指令 [可选参数] 必选参数参数顺序与你定义matcher时一致，可选参数会加上[]相似命令修正在定义matcher，如果need_help为True，则会在未匹配到命令时尝试找到相似命令，使用的库为difflib。该实现为matcher实现，priority为99未找到相似命令时，event继续向下传播如果找到了相似命令，将会输出提示并阻断event传播