Можете объяснить, почему не срабатывает функция проверки аргументов в vkbottle?

Почему мой скрипт не выводит никакой информации, если вводится команда без аргументов, несмотря на то что проверка прав функционирует нормально?
  • 1 декабря 2023 г. 15:39
Ответы на вопрос 2
В vkbottle при проверке аргументов функция, обрабатывающая команду, все еще будет вызываться, даже если аргументы указаны неверно или отсутствуют. Функция проверки аргументов лишь возвращает объект класса `Context`, содержащий различные сведения о текущей обработке (в том числе информацию об аргументах). 

Если вы хотите, чтобы при отсутствии аргументов или при их некорректном вводе функция вообще не выполнялась, то вам нужно будет внутри этой функции проверять возвращаемые данные, полученные от функции проверки аргументов, и принимать решение о дальнейшем выполнении функции в зависимости от этих данных. 

Например:
```python
@bp.on.message(commands='пример <arg>')
async def wrapper(ans: Message, arg: Optional[str]):
    if arg is None: 
        return
    # какой-то код
```

Или используйте исключения при некорректного использовании команды:

```python
from vkbottle.exceptions import VKError

@bp.on.message(commands="command <arg:int>")
async def command_handler(ans: Message, arg: int):
    try:
        # Ваш код
    except VKError:
        await ans("Произошла ошибка / Не указан аргумент и т.д.")
```
Таким образом, робот сможет оповещать пользователя о неверном вводе команды.
Если вы столкнулись с трудностями, протестируйте следующую версию проверки: используйте if not mention. 
Похожие вопросы