62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
from __future__ import annotations
|
||
|
||
from typing import Optional
|
||
|
||
from configs import BotSettings
|
||
|
||
# Настройка экспорта в модули
|
||
__all__ = ("is_command", "find_argument")
|
||
|
||
|
||
def is_command(message: Optional[str]) -> bool:
|
||
"""
|
||
Проверяет, является ли сообщение командой.
|
||
|
||
Сообщение считается командой, если:
|
||
1. Оно не пустое;
|
||
2. Начинается с префикса команды, указанного в настройках.
|
||
|
||
Args:
|
||
message (Optional[str]): Входное сообщение.
|
||
|
||
Returns:
|
||
bool: True, если сообщение является командой, иначе False.
|
||
|
||
Пример:
|
||
>>> is_command("/start")
|
||
True
|
||
>>> is_command("hello")
|
||
False
|
||
"""
|
||
if not message:
|
||
return False
|
||
return message.strip().startswith(BotSettings.PREFIX)
|
||
|
||
|
||
def find_argument(message: Optional[str]) -> Optional[str]:
|
||
"""
|
||
Извлекает аргумент команды из сообщения.
|
||
|
||
Аргументом считается текст после первой команды и пробела.
|
||
Если аргумента нет — возвращает None.
|
||
|
||
Args:
|
||
message (Optional[str]): Входное сообщение.
|
||
|
||
Returns:
|
||
Optional[str]: Аргумент команды или None, если его нет.
|
||
|
||
Пример:
|
||
>>> find_argument("/start referrer")
|
||
'referrer'
|
||
>>> find_argument("/start")
|
||
None
|
||
>>> find_argument("hello")
|
||
None
|
||
"""
|
||
if not is_command(message):
|
||
return None
|
||
|
||
parts = message.strip().split(maxsplit=1)
|
||
return parts[1] if len(parts) > 1 else None
|