Fix parsing phone and add redis storage for FSM in telegram bot

This commit is contained in:
2026-01-17 20:03:33 +03:00
parent a065c6b7be
commit 7758a3cf62
14 changed files with 164 additions and 27 deletions

View File

@@ -3,13 +3,15 @@ import re
from aiogram import types
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<day>\d{2}).(?P<month>\d{2}).(?P<year>\d{4})$")
def parse_date(message: types.Message) -> datetime.date:
if (re_match := BIRTHDATE_REGEXP.match(message.text)) is None:
def parse_date(text: str) -> datetime.date | None:
if (re_match := BIRTHDATE_REGEXP.match(text)) is None:
return
return datetime.date(
@@ -19,7 +21,18 @@ def parse_date(message: types.Message) -> datetime.date:
)
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))