diff --git a/max_bot/CHANGELOG.md b/max_bot/CHANGELOG.md
index c0ff8fb..e3bad9f 100644
--- a/max_bot/CHANGELOG.md
+++ b/max_bot/CHANGELOG.md
@@ -1,6 +1,8 @@
# Changelog — AegisOne MAX Bot
## 1.7.1 (29.05.2026)
+### Новые функции
+- **Тестовый прогон:** мок MAX API для test user_id (>=999999000) — сообщения не уходят в MAX
### Исправления
- **P1 (CRITICAL):** _add_column_if_not_exists — async def + await, миграции выполняются
- **P2 (CSS):** bot_consent, bot_tickets, bot_kb, bot_settings — var(--light-bg) → var(--bg-card), хардкод цвета → CSS-переменные
@@ -23,6 +25,7 @@
- **M4 (Double-load race):** settings_cache.py — asyncio.Lock
- **M5 (ORG regex):** захват полного ORG без обрезки по ;
- **M7 (bot_test.html):** тема наследуется через CSS-переменные + скрипт инициализации
+- **bot_test.html:** исправлен ключ localStorage (theme → aegisone_service_theme), var(--bg-page) → var(--bg-body), добавлена стилизация скроллбара
- **L1 (Dead code):** _extract_name_from_vcf удалена
- **L2 (Импорты):** неиспользуемые Optional, json, config_reader удалены
- **L3 (.gitignore):** .opencode/, .env.example добавлены
diff --git a/max_bot/app/main.py b/max_bot/app/main.py
index 3701fc2..4d0df1d 100644
--- a/max_bot/app/main.py
+++ b/max_bot/app/main.py
@@ -99,6 +99,8 @@ async def _add_column_if_not_exists(conn, table: str, column: str, col_type: str
END IF;
END $$;
"""))
+ except Exception as e:
+ logger.warning(f"Migration add column {table}.{column}: {e}")
def _validate_sql_name(name: str) -> None:
@@ -109,11 +111,9 @@ def _validate_sql_name(name: str) -> None:
def _validate_sql_type(col_type: str) -> None:
import re
- allowed = r'^(VARCHAR\(\d+\)|TEXT|INTEGER|BOOLEAN( DEFAULT (TRUE|FALSE))?|TIMESTAMP)$'
+ allowed = r'^(VARCHAR\(\d+\)|TEXT|INTEGER( DEFAULT \d+)?|BOOLEAN( DEFAULT (TRUE|FALSE))?|TIMESTAMP)$'
if not re.match(allowed, col_type.strip()):
raise ValueError(f"Invalid SQL type: {col_type}")
- except Exception as e:
- logger.warning(f"Migration add column {table}.{column}: {e}")
async def _seed_default_settings():
diff --git a/max_bot/app/max_api.py b/max_bot/app/max_api.py
index 9d5a6ac..724b243 100644
--- a/max_bot/app/max_api.py
+++ b/max_bot/app/max_api.py
@@ -1,7 +1,12 @@
+import logging
import httpx
from typing import Optional
from app.config import settings
+logger = logging.getLogger(__name__)
+
+TEST_USER_THRESHOLD = 999999000
+
class MaxAPI:
def __init__(self):
@@ -58,6 +63,9 @@ class MaxAPI:
format: Optional[str] = None,
notify: bool = True,
) -> dict:
+ if user_id >= TEST_USER_THRESHOLD:
+ logger.info(f"MOCK send_message to test user {user_id}: {text[:50]}")
+ return {"ok": True, "mock": True}
payload = {"text": text, "notify": notify}
if attachments:
payload["attachments"] = attachments
diff --git a/py_service/CHANGELOG.md b/py_service/CHANGELOG.md
index 04e6705..f466560 100644
--- a/py_service/CHANGELOG.md
+++ b/py_service/CHANGELOG.md
@@ -2,6 +2,7 @@
## 1.7.1 (29.05.2026)
### Исправления
+- **bot_test.html:** исправлен ключ localStorage для темы, var(--bg-page)→var(--bg-body), стилизация скроллбара
- **P2 (CSS):** bot_consent, bot_tickets, bot_kb, bot_settings — var(--light-bg)→var(--bg-card), хардкод цвета→CSS-переменные
- **M7 (bot_test.html):** тема наследуется через CSS-переменные + скрипт инициализации
- **C3 (Email typo):** contact proxy — user.email вместо user.phone
diff --git a/py_service/app/templates/pages/bot_test.html b/py_service/app/templates/pages/bot_test.html
index 1640862..f5fd296 100644
--- a/py_service/app/templates/pages/bot_test.html
+++ b/py_service/app/templates/pages/bot_test.html
@@ -6,13 +6,13 @@