v1.7.1: fix bot_test.html theme (localStorage key + css vars + scrollbar), mock MAX API for test users
This commit is contained in:
@@ -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
@@ -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():
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user