Files
ermnvldmr.com/services/docs/content/ru/quetza/concepts/module-system.md
T

2.9 KiB

title, weight
title weight
Модульная система 2

Цель: Определить словарь и механизмы основной абстрактной единицы Quetza.

Системный словарь

Объявление модуля (Module Declaration)

Файл module.ts выступает в качестве манифеста. Это точка входа для обнаружения.

export const name = 'my-module'; // ID
export const description = '...'; // Документация

Регистрация команд (Command Registration)

Происходит во время события ready.

  1. Quetza сканирует все папки commands/.
  2. Компилирует ApplicationCommandData.
  3. Отправляет (PUT) данные в API Discord.

Внедрение контроллера (Controller Injection)

Состояние внедряется (injected), а не импортируется.

// Фреймворк вызывает это:
execute(client, interaction, controller);
  • Зачем? Позволяет фреймворку управлять жизненным циклом контроллера (синглтон на каждый модуль).

Философия управления состоянием

Эфемерность по умолчанию

Quetza не предоставляет встроенной базы данных.

  • Память: Контроллеры хранят состояние в JS объектах Map или Set.
  • Перезапуск: Все состояние теряется при завершении процесса.
  • Постоянство: Должно быть реализовано вручную (например, SQLite, Redis) внутри Контроллера.

Область видимости как ключ

Состояние должно быть ключировано по его границам.

  • Map<GuildID, ...> - Специфично для сервера (Наиболее частое).
  • Map<UserID, ...> - Специфично для пользователя (Боты для личных сообщений - DM).

Модель обработки ошибок

Быстрый и дружелюбный отказ (Fail Fast & Friendly).

  • Валидация: Проверяйте права/вводы немедленно.
  • Для пользователя: "У вас нет прав" (а не "Ошибка: 403").
  • Изоляция: Сбой в /ping перехватывается сам по себе и не "убивает" бота.

См. также: