Files
ermnvldmr.com/services/docs/content/ru/quetza/concepts/module-system.md
T
deytenit b3638f4d63 fix: cyrillic fonts, dev certs, page head, and ru-text typography (#67)
🤖 PR generated for branch `fix/cyrillic-fonts-dev-certs-and-page-head`.

### Changes Summary
- **Fonts**: Add Cyrillic glyph subsets for Lato, EB Garamond, and Fira
Code.
- **Dev**: Support remote Root CA and encrypted dev CA key in
`.env.dev`.
- **UI & Kits**: Add size variant to `Breadcrumbs` component and enlarge
`PageHead` breadcrumbs with tuned collapse scroll threshold.
- **ESLint**: Add `no-hanging-particles` i18n & markdown typography rule
with auto-fixer.
- **Content & i18n**: Apply `ru-text` editorial and typography polish
(em dashes, number ranges, «ё» restoration, non-breaking spaces) across
`services/www` and `services/docs`.
2026-10-25 15:21:09 +03:00

68 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 **нет встроенной базы данных**.
- **Память:** контроллеры сохраняют данные в стандартных JavaScript-коллекциях `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)