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