sequenceDiagram autonumber participant WoW as 🎮 WoW Client participant Addon as 🔌 ArenaCoach
Addon (Lua) participant Log as 📄 Chat Log
(Windows файл) participant Bridge as 🪟 arena-bridge.exe participant API as ⚙️ FastAPI Backend participant Discord as 💬 Discord DM WoW->>Addon: ARENA_OPPONENT_UPDATE
COMBAT_LOG_EVENT_UNFILTERED Addon->>Log: Пишет [AC] событие
в chat-frame Bridge->>Log: tail — читает новые строки Bridge->>API: HTTPS POST /v1/events
Bearer токен API->>API: Ищет матчап в KB
(SQLite + Markdown) API->>Discord: Ephemeral DM
с советом и источником

Каждый шаг подробнее

1
🎮 WoW клиент генерирует события TBC 2.4.3

Когда начинается арена, WoW Client посылает Lua-аддону события: ARENA_OPPONENT_UPDATE (определение врага), UNIT_AURA (баффы/дебаффы), COMBAT_LOG_EVENT_UNFILTERED (трекинг способностей — трикет, CD, CC).

COMBAT_LOG_EVENT_UNFILTERED → spellId 42292 -- PvP Trinket
ARENA_OPPONENT_UPDATE → spec, race, unitId
2
🔌 Lua аддон пишет события в chat-frame Lua

ArenaCoach.toc загружается WoW при старте. Аддон слушает события и записывает их в системный чат с префиксом [AC] — это единственный легитимный канал вывода данных из WoW 2.4.3 без нарушения ToS.

-- Tracker.lua
DEFAULT_CHAT_FRAME:AddMessage("[AC] trinket:enemy:Arena1:42292")
3
📄 Bridge читает chat log Windows

WoW сохраняет системный чат в файл Logs\WoWChatLog.txt в директории игры. arena-bridge.exe непрерывно читает этот файл (tail), фильтрует строки с префиксом [AC] и нормализует их в JSON-событие.

# chat_tail.py
WOW_INSTALL_PATH=C:\WoW\_classic_era_
→ tail Logs\WoWChatLog.txt, filter "[AC]"
4
🪟 Bridge отправляет событие на backend HTTPS

Нормализованное событие отправляется POST-запросом на FastAPI backend с Bearer-токеном. Токен привязан к конкретному игроку — несанкционированный запрос отклоняется с 401.

POST https://pvpwowarena.surprise4you.dev/v1/events
Authorization: Bearer <BRIDGE_BEARER_TOKEN>
{"event":"trinket","source":"Arena1","spell":42292}
5
⚙️ Backend ищет матчап в базе знаний Python / FastAPI

Сервер определяет текущий матчап из накопленных событий (наши спеки vs вражеские спеки), ищет подходящий документ в KB (Markdown + SQLite индекс) и формирует ответ. Каждый совет содержит ссылку на источник — стрим или гайд.

# kb/matchups/rm-vs-warrior-rdruid.md
composition: rogue+mage
vs: warrior+resto-druid
kill_target: druid
→ "Opener: CS → sheep druid, open warrior..."
6
💬 Discord DM с подсказкой Discord

Discord-бот отправляет ephemeral-сообщение (видно только игроку) в DM с советом, источником и ключевыми CD для отслеживания. Если матчап не найден в KB — сообщение не отправляется, бот молчит.

⚔ RM vs Warrior+RDruid
Opener: CS → sheep druid, open warrior
Track: enemy trinket ✓ used 0:32
Source: mirlol.pro/rm-guide · 14:25
Готов установить?
Аддон + bridge — всего два файла.
Перейти к скачиванию →