mirror of
https://github.com/nonebot/nonebot2.git
synced 2025-02-17 16:20:05 +08:00
Add max validation failures check of command arguments
This commit is contained in:
parent
635fc70756
commit
5986afb200
@ -73,6 +73,7 @@ class Command:
|
||||
session.current_key is not None:
|
||||
# argument-level filters are given, use them
|
||||
arg = session.current_arg
|
||||
config = session.bot.config
|
||||
for f in session.current_arg_filters:
|
||||
try:
|
||||
res = f(arg)
|
||||
@ -81,9 +82,21 @@ class Command:
|
||||
arg = res
|
||||
except ValidateError as e:
|
||||
# validation failed
|
||||
if config.MAX_VALIDATION_FAILURES > 0:
|
||||
# should check number of validation failures
|
||||
session.state['__validation_failure_num'] = \
|
||||
session.state.get(
|
||||
'__validation_failure_num', 0) + 1
|
||||
|
||||
if session.state['__validation_failure_num'] >= \
|
||||
config.MAX_VALIDATION_FAILURES:
|
||||
# noinspection PyProtectedMember
|
||||
session.finish(render_expression(
|
||||
config.TOO_MANY_VALIDATION_FAILURES_EXPRESSION
|
||||
), **session._current_send_kwargs)
|
||||
|
||||
failure_message = e.message
|
||||
if failure_message is None:
|
||||
config = session.bot.config
|
||||
failure_message = render_expression(
|
||||
config.DEFAULT_VALIDATION_FAILURE_EXPRESSION
|
||||
)
|
||||
|
@ -28,14 +28,22 @@ DEBUG: bool = True
|
||||
|
||||
SUPERUSERS: Container[int] = set()
|
||||
NICKNAME: Union[str, Iterable[str]] = ''
|
||||
|
||||
COMMAND_START: Iterable[Union[str, Pattern]] = {'/', '!', '/', '!'}
|
||||
COMMAND_SEP: Iterable[Union[str, Pattern]] = {'/', '.'}
|
||||
|
||||
SESSION_EXPIRE_TIMEOUT: Optional[timedelta] = timedelta(minutes=5)
|
||||
SESSION_RUN_TIMEOUT: Optional[timedelta] = None
|
||||
SESSION_RUNNING_EXPRESSION: Expression_T = '您有命令正在执行,请稍后再试'
|
||||
SESSION_CANCEL_EXPRESSION = '好的'
|
||||
|
||||
SHORT_MESSAGE_MAX_LENGTH: int = 50
|
||||
|
||||
SESSION_CANCEL_EXPRESSION = '好的'
|
||||
|
||||
DEFAULT_VALIDATION_FAILURE_EXPRESSION: Expression_T = '您的输入不符合要求,请重新输入'
|
||||
MAX_VALIDATION_FAILURES = 3
|
||||
TOO_MANY_VALIDATION_FAILURES_EXPRESSION: Expression_T = \
|
||||
'您输入错误太多次啦,如需重试,请重新触发本功能'
|
||||
|
||||
APSCHEDULER_CONFIG: Dict[str, Any] = {
|
||||
'apscheduler.timezone': 'Asia/Shanghai'
|
||||
|
Loading…
x
Reference in New Issue
Block a user