mirror of
https://github.com/nonebot/nonebot2.git
synced 2025-02-21 18:15:50 +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:
|
session.current_key is not None:
|
||||||
# argument-level filters are given, use them
|
# argument-level filters are given, use them
|
||||||
arg = session.current_arg
|
arg = session.current_arg
|
||||||
|
config = session.bot.config
|
||||||
for f in session.current_arg_filters:
|
for f in session.current_arg_filters:
|
||||||
try:
|
try:
|
||||||
res = f(arg)
|
res = f(arg)
|
||||||
@ -81,9 +82,21 @@ class Command:
|
|||||||
arg = res
|
arg = res
|
||||||
except ValidateError as e:
|
except ValidateError as e:
|
||||||
# validation failed
|
# 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
|
failure_message = e.message
|
||||||
if failure_message is None:
|
if failure_message is None:
|
||||||
config = session.bot.config
|
|
||||||
failure_message = render_expression(
|
failure_message = render_expression(
|
||||||
config.DEFAULT_VALIDATION_FAILURE_EXPRESSION
|
config.DEFAULT_VALIDATION_FAILURE_EXPRESSION
|
||||||
)
|
)
|
||||||
|
@ -28,14 +28,22 @@ DEBUG: bool = True
|
|||||||
|
|
||||||
SUPERUSERS: Container[int] = set()
|
SUPERUSERS: Container[int] = set()
|
||||||
NICKNAME: Union[str, Iterable[str]] = ''
|
NICKNAME: Union[str, Iterable[str]] = ''
|
||||||
|
|
||||||
COMMAND_START: Iterable[Union[str, Pattern]] = {'/', '!', '/', '!'}
|
COMMAND_START: Iterable[Union[str, Pattern]] = {'/', '!', '/', '!'}
|
||||||
COMMAND_SEP: Iterable[Union[str, Pattern]] = {'/', '.'}
|
COMMAND_SEP: Iterable[Union[str, Pattern]] = {'/', '.'}
|
||||||
|
|
||||||
SESSION_EXPIRE_TIMEOUT: Optional[timedelta] = timedelta(minutes=5)
|
SESSION_EXPIRE_TIMEOUT: Optional[timedelta] = timedelta(minutes=5)
|
||||||
SESSION_RUN_TIMEOUT: Optional[timedelta] = None
|
SESSION_RUN_TIMEOUT: Optional[timedelta] = None
|
||||||
SESSION_RUNNING_EXPRESSION: Expression_T = '您有命令正在执行,请稍后再试'
|
SESSION_RUNNING_EXPRESSION: Expression_T = '您有命令正在执行,请稍后再试'
|
||||||
SESSION_CANCEL_EXPRESSION = '好的'
|
|
||||||
SHORT_MESSAGE_MAX_LENGTH: int = 50
|
SHORT_MESSAGE_MAX_LENGTH: int = 50
|
||||||
|
|
||||||
|
SESSION_CANCEL_EXPRESSION = '好的'
|
||||||
|
|
||||||
DEFAULT_VALIDATION_FAILURE_EXPRESSION: Expression_T = '您的输入不符合要求,请重新输入'
|
DEFAULT_VALIDATION_FAILURE_EXPRESSION: Expression_T = '您的输入不符合要求,请重新输入'
|
||||||
|
MAX_VALIDATION_FAILURES = 3
|
||||||
|
TOO_MANY_VALIDATION_FAILURES_EXPRESSION: Expression_T = \
|
||||||
|
'您输入错误太多次啦,如需重试,请重新触发本功能'
|
||||||
|
|
||||||
APSCHEDULER_CONFIG: Dict[str, Any] = {
|
APSCHEDULER_CONFIG: Dict[str, Any] = {
|
||||||
'apscheduler.timezone': 'Asia/Shanghai'
|
'apscheduler.timezone': 'Asia/Shanghai'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user