Files
ermnvldmr.com/services/docs/content/ru/quetza/guides/module-development.md
T

4.4 KiB
Raw Blame History

title, weight
title weight
Процесс разработки модуля 1

Цель: Создать новую функцию для бота Quetza путем реализации самодостаточного модуля.

1. Фаза концептуализации

Перед написанием кода определите архитектуру модуля:

  • Простая команда: Требуется только папка commands/ (например, служебные команды).
  • Реактивная логика: Нужна папка events/ для прослушивания жизненного цикла Discord (например, приветственные сообщения).
  • Функция с состоянием: Требуется Контроллер (Controller) для управления состоянием на разных серверах (например, музыкальный плеер).

2. Создание структуры

Создайте структуру директорий модуля. Наличие этих файлов запускает автоматическое обнаружение.

{{< filetree/container >}} {{< filetree/folder name="src" state="open" >}} {{< filetree/folder name="modules" state="open" >}} {{< filetree/folder name="my-feature" state="open" >}} {{< filetree/file name="module.ts" >}} {{< filetree/folder name="commands" >}} {{< /filetree/folder >}} {{< filetree/folder name="events" >}} {{< /filetree/folder >}} {{< filetree/folder name="lib" >}} {{< /filetree/folder >}} {{< /filetree/folder >}} {{< /filetree/folder >}} {{< /filetree/folder >}} {{< /filetree/container >}}

3. Шаги реализации

{{% steps %}}

Шаг 1: Создание манифеста

Создайте module.ts для объявления модуля.

// src/modules/my-feature/module.ts
export const name = 'my-feature';
export const description = 'Добавляет крутые возможности';
// Опционально: export const controller = new MyFeatureController();

Шаг 2: Реализация команд

Создайте файлы команд в папке commands/. Каждый файл экспортирует данные и функцию-исполнитель (executor).

// src/modules/my-feature/commands/ping.ts
import { SlashCommandBuilder } from 'discord.js';

export const data = new SlashCommandBuilder().setName('ping').setDescription('Отвечает Pong!');

export async function execute(interaction) {
  await interaction.reply('Pong!');
}

Шаг 3: Реализация событий (Опционально)

Создайте обработчики событий в events/ для отслеживания состояния Discord.

// src/modules/my-feature/events/ready.ts
import { Events } from 'discord.js';

export const name = Events.ClientReady;
export const once = true;

export function execute(client) {
  console.log(`Ready! Logged in as ${client.user.tag}`);
}

Шаг 4: Определение контроллера (Опционально)

Для логики, требующей сохранения состояния, реализуйте контроллер в папке lib/ и экспортируйте его в module.ts.

Шаг 5: Валидация

Перезапустите бота.

  1. Проверьте логи на наличие "Loaded module: my-feature".
  2. Убедитесь, что команда /ping появилась в Discord.

{{% /steps %}}

Шаблоны интеграции

Паттерн Сценарий использования Компоненты
Простая команда Утилиты без состояния (Ping, Бросок кубиков) Только commands/
Сервис с состоянием Музыка, RPG, Экономика commands/ + lib/Controller
Событийно-ориентированный Автомодерация, Логирование Только events/
Гибридный Сложные функции (ИИ-чат) Все компоненты

См. также: