Files
ermnvldmr.com/services/docs/content/ru/quetza/getting-started.md
T

5.6 KiB

title, weight
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: