import datetime import re from aiogram.types import User as TelegramUser from pydantic_core import PydanticCustomError from pydantic_extra_types.phone_numbers import PhoneNumber BIRTHDATE_REGEXP = re.compile(r"^(?P\d{2}).(?P\d{2}).(?P\d{4})$") def parse_date(text: str) -> datetime.date | None: if (re_match := BIRTHDATE_REGEXP.match(text)) is None: return return datetime.date( year=int(re_match.group("year")), month=int(re_match.group("month")), day=int(re_match.group("day")), ) def parse_phone(text: str) -> str | None: phone = text if not phone.startswith("+"): phone = f"+{phone}" try: PhoneNumber._validate(phone, None) except PydanticCustomError: return return phone def get_telegram_user_full_name(user: TelegramUser) -> str: name_parts = (user.first_name, user.last_name) return " ".join(filter(None, name_parts))