UNPKG

vvlad1973-telegram-framework

Version:
144 lines (103 loc) 4.75 kB
# Patches Патчи для внешних зависимостей с добавленной функциональностью. ## scenario.js Патч для `vvlad1973-telegram-framework/src/classes/scenario.js` с поддержкой user tracing. ### Что добавляет * Детальное логирование выполнения запросов для конкретных пользователей * Трассировка всех этапов обработки: диалоги, actions, ветвления * Форматирование больших объектов для читаемости логов ### Трассируемые события | Событие | Описание | |---------|----------| | request_received | Получен запрос от пользователя | | dialog_matched | Найден подходящий диалог | | dialog_not_found | Диалог не найден | | dialog_complete | Диалог завершён | | dialog_error | Ошибка в диалоге | | action_start | Начало выполнения action | | action_result | Результат action | | action_branch | Переход в ветку true/false | | action_error | Ошибка в action | | action_error_caught | Ошибка перехвачена, переход в false | | action_not_defined | Action не найден | | switch_start | Начало doSwitch | | switch_case_matched | Найден case | | switch_default | Переход в default | | switch_no_match | Ни один case не подошёл | | do_dialog | Переход в другой диалог | | do_dialog_return | Возврат из диалога | | request_complete | Запрос обработан | ### Применение #### 1. Импорт патча вместо оригинала В `init.js` замените импорт Scenario: ```javascript // Было: // import { Scenario } from 'vvlad1973-telegram-framework'; // Стало: import { Scenario } from './patches/scenario.js'; ``` #### 2. Инъекция userTracing После создания scenario и инициализации userTracing: ```javascript import { userTracing } from './src/user_tracing.js'; // ... создание scenario ... // Инъекция userTracing в scenario scenario.userTracing = userTracing; ``` ### Пример интеграции в init.js ```javascript import { Scenario } from './patches/scenario.js'; import { userTracing } from './src/user_tracing.js'; // Создание scenario const scenario = new Scenario(logger); // Инициализация userTracing await userTracing.initialize({ config, logger: logger.child({ name: 'UserTracing' }), storage: db.collection(config.tracing?.collection || 'user_traces'), }); // Инъекция в scenario scenario.userTracing = userTracing; // Добавление в context context.userTracing = userTracing; context.scenario = scenario; ``` ### Использование После применения патча трассировка работает автоматически: 1. Включите трассировку для пользователя: ```text /admin trace on @username 30 ``` 2. Пользователь выполняет действия в боте 3. Все события записываются в файл трейса с детальной информацией 4. Получите лог: ```text /admin trace get @username ``` ### Пример вывода ```text [10:30:00.001] INFO: event=request_received request: { type: "command", contents: "/start", chat_type: "private" } user: { id: "123456", state: "ACTIVE", role: "user" } [10:30:00.002] INFO: event=dialog_matched dialogId: "START_COMMAND" matchCriteria: { state: "ACTIVE", received: { type: "command", text: "start" } } actionsCount: 3 [10:30:00.003] INFO: event=action_start action: "sendMessage" options: { text: "Welcome!" } stack: 1 [10:30:00.050] INFO: event=action_result action: "sendMessage" result: { ok: true, message_id: 123 } duration: 47 [10:30:00.051] INFO: event=request_complete duration: 50 dialogsProcessed: 1 actionsExecuted: 3 ``` ### Совместимость Патч полностью совместим с оригинальным Scenario: * Все существующие диалоги работают без изменений * Если `userTracing` не инъецирован, трассировка просто не выполняется * Производительность не затрагивается для не-трассируемых пользователей