v1.7.1: fix bot_test.html theme (localStorage key + css vars + scrollbar), mock MAX API for test users

This commit is contained in:
2026-05-29 08:27:57 +03:00
parent 54af5892d5
commit aa1269e013
5 changed files with 26 additions and 6 deletions
+3
View File
@@ -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 добавлены
+3 -3
View File
@@ -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():
+8
View File
@@ -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