--- title: Начало работы weight: 1 --- **Quetza** — это модульный фреймворк для Discord-ботов, построенный на TypeScript, который позволяет разработчикам создавать многофункциональные приложения для Discord с помощью самодостаточных, композитных модулей. ## Что такое Quetza? Quetza предоставляет архитектурный фундамент, который превращает разработку функций из модификации ядра в добавление модулей. Он решает проблему жесткого дизайна ботов за счет инверсии структур зависимостей: ядро ничего не знает о модулях, однако модули имеют полный доступ к возможностям через определенные контракты. ## Основная философия ### Проблема Традиционные монолитные боты страдают от хрупкости. Добавление функций требует изменения логики ядра, переплетения зависимостей и управления растущими базами кода, которые трудно тестировать или изменять. ### Решение Quetza рассматривает модули как плагины. - **Расширение без правки ядра:** Добавляйте функции, создавая папку. Модификация кода ядра не требуется. - **Изоляция:** Модули работают независимо. - **Композиция:** Включайте или выключайте функции, просто добавляя или удаляя папки модулей. ## Высокоуровневая архитектура Quetza состоит из трех основных уровней: 1. **Базовый уровень (Foundation Layer)**: Клиент `Discord.js`, расширенный реестрами модулей (команды, события, модули). Он действует как сервис-локатор. 2. **Модульный уровень (Module Layer)**: Самодостаточные пакеты функций. Каждый модуль предоставляет собственные команды и события через стандартизированную структуру файлов. 3. **Сервисный уровень (Service Layer)**: Опциональные **Контроллеры**, которые управляют состоянием бизнес-логики (например, аудиоплееры, контекст разговора) на разных серверах (guilds). ## Ключевые концепции ### Ментальная модель Для эффективной работы с Quetza примите следующую парадигму: - **Модули — это плагины:** Независимые папки, обнаруживаемые во время выполнения. - **Команды — это конечные точки (Endpoints):** Обработчики без сохранения состояния, действующие подобно эндпоинтам REST API. - **События — это наблюдатели (Observers):** Реактивная логика, подписывающаяся на события жизненного цикла Discord. - **Контроллеры — это сервисы:** Менеджеры состояния, восполняющие пробел между командами без состояния и постоянным поведением. ### Границы системы Понимание ограничений критически важно для проектирования: - **Отсутствие постоянства (Persistence):** Состояние в памяти теряется при перезагрузке. Для постоянного хранения требуется внешняя база данных. - **Отсутствие межмодульного взаимодействия:** Модули не могут напрямую вызывать друг друга, что обеспечивает слабую связанность. - **Отсутствие динамической загрузки:** Модули загружаются только при запуске. ## Архитектурные инварианты Quetza жертвует гибкостью ради предсказуемости с помощью строгих соглашений: - **Обнаружение на основе соглашений:** Модули _обязаны_ следовать структуре директорий (`module.ts`, `commands/`, `events/`) для загрузки. - **Однофазная инициализация:** Вся загрузка происходит до установления соединения с Discord. - **Соблюдение интерфейсов:** Все команды и события должны экспортировать специфические интерфейсы для их регистрации. --- **See also:** - [Discord.js Documentation](https://discord.js.org/) - [TypeScript Documentation](https://www.typescriptlang.org/)