"""Каталог событий аналитики. Единственный источник правды по типам событий ClickHouse. Список синхронизирован с документацией (``docs/events.md``) — рассинхрон ловит ``tests/test_analytics.py``. Правило: добавляешь новое событие — добавь его в ``EventType`` и в ``docs/events.md``. """ from __future__ import annotations from enum import StrEnum class EventType(StrEnum): """Типы событий (значение = колонка ``event_type`` в ClickHouse).""" # --- Сообщения и команды --- MESSAGE = "message" COMMAND = "command" # --- Экономика --- PURIFICATION = "purification" EXP_ACCRUAL = "exp_accrual" LEVEL_UP = "level_up" MONEY_ACCRUAL = "money_accrual" MONEY_SPEND = "money_spend" EGGS = "eggs" PURCHASE_TITLE = "purchase_title" PURCHASE_DONAT = "purchase_donat" # --- Участники --- JOIN = "join" LEAVE = "leave" NICK_SET = "nick_set" # --- Подписки и доступ --- SUBSCRIBE = "subscribe" UNSUBSCRIBE = "unsubscribe" ACCESS_DENIED = "access_denied" # --- Жизненный цикл бота и ошибки --- BOT_START = "bot_start" BOT_STOP = "bot_stop" BOT_ALIVE = "bot_alive" ERROR = "error" #: Полный список типов событий (для проверки синхронности с документацией). ALL_EVENT_TYPES: frozenset[str] = frozenset(member.value for member in EventType) #: Колонки таблицы ``analytics.events`` в порядке вставки. EVENT_COLUMNS: tuple[str, ...] = ( "event_time", "event_type", "user_id", "username", "chat_id", "payload", "bot_version", "prod", ) __all__ = ["ALL_EVENT_TYPES", "EVENT_COLUMNS", "EventType"]