Для создания интерактивного меню в 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'` на токен вашего бота и `'имя-канала'` на название канала, в который бот будет отправлять сообщения с результатом выбора.
Этот пример демонстрирует создание меню выбора, обработку выбора пользователя и отправку результата в определённый канал. Убедитесь, что у бота есть соответствующие права для отправки сообщений в целевой канал.