Как создать меню на discord.js?

Как можно создать меню для моего Discord-сервера, а также настроить отправку заявок в специальный канал?
Изображение к вопросу
Изображение к вопросу
Изображение к вопросу
  • 5 февраля 2024 г. 17:49
Ответы на вопрос 1
Для создания интерактивного меню в Discord с использованием библиотеки discord.js вы можете использовать компоненты, такие как кнопки (buttons) или селекторы (select menus), встроенные в Discord API. Ниже я предоставлю вам пример того, как можно создать меню выбора с помощью селектора и отправить результаты в определённый канал.

Прежде всего, убедитесь, что у вас есть последняя версия discord.js (v13 или выше), так как эта версия поддерживает новейшие функции Discord API, включая компоненты сообщений.

Пример создания меню с использованием селектора:

```javascript
const { Client, Intents, MessageActionRow, MessageSelectMenu } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });

client.once('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
});

client.on('messageCreate', async message => {
    // Проверяем, не является ли сообщение командой для бота (например "!menu")
    if (message.content === '!menu') {
        // Создаем строку для компонентов
        const row = new MessageActionRow()
            .addComponents(
                new MessageSelectMenu()
                    .setCustomId('select')
                    .setPlaceholder('Выберите опцию')
                    .addOptions([
                        {
                            label: 'Опция 1',
                            description: 'Описание опции 1',
                            value: 'first_option',
                        },
                        {
                            label: 'Опция 2',
                            description: 'Описание опции 2',
                            value: 'second_option',
                        },
                        // Добавьте дополнительные опции здесь
                    ]),
            );

        // Отправляем сообщение с меню выбора
        await message.channel.send({ content: 'Выберите опцию из меню:', components: [row] });
    }
});

client.on('interactionCreate', async interaction => {
    // Если это не интерактивное действие с селектором, игнорируем
    if (!interaction.isSelectMenu()) return;

    if (interaction.customId === 'select') {
        // Получаем значение выбранной опции
        const selectedValue = interaction.values[0];

        // Обработка выбора
        await interaction.deferUpdate(); // Используем deferUpdate для предотвращения таймаута
        
        // Находим канал для отправки заявок
        const channel = interaction.guild.channels.cache.find(ch => ch.name === 'имя-канала');

        if (channel) {
            // Отправляем сообщение с выбранной опцией в указанный канал
            channel.send(`${interaction.user.tag} выбрал опцию: ${selectedValue}`);
        }
    }
});

client.login('your-token-here');
```

Не забудьте заменить `'your-token-here'` на токен вашего бота и `'имя-канала'` на название канала, в который бот будет отправлять сообщения с результатом выбора.

Этот пример демонстрирует создание меню выбора, обработку выбора пользователя и отправку результата в определённый канал. Убедитесь, что у бота есть соответствующие права для отправки сообщений в целевой канал.
Похожие вопросы