bot rafactor and bugfix
This commit is contained in:
0
app/bots/editor/utils/__init__.py
Normal file
0
app/bots/editor/utils/__init__.py
Normal file
56
app/bots/editor/utils/parsers.py
Normal file
56
app/bots/editor/utils/parsers.py
Normal file
@@ -0,0 +1,56 @@
|
||||
"""Утилиты для парсинга данных."""
|
||||
from typing import Dict, Any, List, Set
|
||||
import re
|
||||
from urllib.parse import urlparse
|
||||
|
||||
def extract_variables(text: str) -> Set[str]:
|
||||
"""Извлекает переменные из шаблона."""
|
||||
if not text:
|
||||
return set()
|
||||
return set(re.findall(r'\{([^}]+)\}', text))
|
||||
|
||||
def validate_url(url: str) -> bool:
|
||||
"""Проверяет валидность URL."""
|
||||
try:
|
||||
parsed = urlparse(url)
|
||||
return bool(parsed.scheme and parsed.netloc)
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def parse_key_value_lines(text: str) -> Dict[str, Any]:
|
||||
"""Парсинг клавиатуры из текста формата 'текст = ссылка'."""
|
||||
keyboard = {"rows": []}
|
||||
current_row = []
|
||||
|
||||
lines = text.strip().split('\n')
|
||||
for line in lines:
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
|
||||
if line == "---":
|
||||
if current_row:
|
||||
keyboard["rows"].append(current_row)
|
||||
current_row = []
|
||||
continue
|
||||
|
||||
parts = line.split('=', 1)
|
||||
if len(parts) != 2:
|
||||
raise ValueError(f"Неверный формат строки: {line}")
|
||||
|
||||
text, url = parts[0].strip(), parts[1].strip()
|
||||
|
||||
# Проверка URL
|
||||
try:
|
||||
parsed = urlparse(url)
|
||||
if not parsed.scheme or not parsed.netloc:
|
||||
raise ValueError(f"Некорректный URL: {url}")
|
||||
except Exception:
|
||||
raise ValueError(f"Некорректный URL: {url}")
|
||||
|
||||
current_row.append({"text": text, "url": url})
|
||||
|
||||
if current_row:
|
||||
keyboard["rows"].append(current_row)
|
||||
|
||||
return keyboard
|
||||
9
app/bots/editor/utils/validation.py
Normal file
9
app/bots/editor/utils/validation.py
Normal file
@@ -0,0 +1,9 @@
|
||||
"""Утилиты для валидации данных."""
|
||||
import re
|
||||
from typing import Optional
|
||||
|
||||
def validate_template_name(name: str) -> bool:
|
||||
"""Проверка корректности имени шаблона."""
|
||||
if not name or len(name) > 50:
|
||||
return False
|
||||
return bool(re.match(r'^[\w\-]+$', name))
|
||||
Reference in New Issue
Block a user