68 lines
2.9 KiB
Markdown
68 lines
2.9 KiB
Markdown
---
|
|
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<GuildID, ...>` - Специфично для сервера (Наиболее частое).
|
|
- `Map<UserID, ...>` - Специфично для пользователя (Боты для личных сообщений - DM).
|
|
|
|
## Модель обработки ошибок
|
|
|
|
**Быстрый и дружелюбный отказ (Fail Fast & Friendly).**
|
|
|
|
- **Валидация:** Проверяйте права/вводы немедленно.
|
|
- **Для пользователя:** "У вас нет прав" (а не "Ошибка: 403").
|
|
- **Изоляция:** Сбой в `/ping` перехватывается сам по себе и не "убивает" бота.
|
|
|
|
---
|
|
|
|
**См. также:**
|
|
|
|
- [Жизненный цикл взаимодействия Discord (Interaction Lifecycle)](https://discord.com/developers/docs/interactions/receiving-and-responding)
|