--- title: Модульная система weight: 2 --- **Цель:** Определить словарь и механизмы основной абстрактной единицы Quetza. ## Системный словарь ### Объявление модуля (Module Declaration) Файл `module.ts` выступает в качестве манифеста. Это точка входа для обнаружения. ```typescript export const name = 'my-module'; // ID export const description = '...'; // Документация ``` ### Регистрация команд (Command Registration) Происходит во время события `ready`. 1. Quetza сканирует все папки `commands/`. 2. Компилирует `ApplicationCommandData`. 3. Отправляет (PUT) данные в API Discord. ### Внедрение контроллера (Controller Injection) Состояние внедряется (injected), а не импортируется. ```typescript // Фреймворк вызывает это: execute(client, interaction, controller); ``` - **Зачем?** Позволяет фреймворку управлять жизненным циклом контроллера (синглтон на каждый модуль). ## Философия управления состоянием ### Эфемерность по умолчанию Quetza **не предоставляет встроенной базы данных**. - **Память:** Контроллеры хранят состояние в JS объектах `Map` или `Set`. - **Перезапуск:** Все состояние теряется при завершении процесса. - **Постоянство:** Должно быть реализовано вручную (например, SQLite, Redis) внутри Контроллера. ### Область видимости как ключ Состояние должно быть ключировано по его границам. - `Map` - Специфично для сервера (Наиболее частое). - `Map` - Специфично для пользователя (Боты для личных сообщений - DM). ## Модель обработки ошибок **Быстрый и дружелюбный отказ (Fail Fast & Friendly).** - **Валидация:** Проверяйте права/вводы немедленно. - **Для пользователя:** "У вас нет прав" (а не "Ошибка: 403"). - **Изоляция:** Сбой в `/ping` перехватывается сам по себе и не "убивает" бота. --- **См. также:** - [Жизненный цикл взаимодействия Discord (Interaction Lifecycle)](https://discord.com/developers/docs/interactions/receiving-and-responding)