Как получить обратную связь от обработчика событий в меню Дискорд-бота?

Как я могу создать обратную связь после выбора опции из меню дискорд бота в этом коде, чтобы предоставить описание оружия с изображением?
  • 3 апреля 2024 г. 21:59
Ответы на вопрос 2
Чтобы получить обратную связь от обработчика событий в меню Дискорд-бота, вы можете использовать механизм обработки сообщений от пользователя. В вашем коде должен быть обработчик событий, который будет реагировать на выбор опции из меню. Например, при выборе опции "Пистолет" вы можете отправить сообщение с описанием пистолета и изображением.

Вот пример кода, который демонстрирует создание обратной связи после выбора опции из меню Дискорд-бота:

```python
import discord
from discord.ext import commands

bot = commands.Bot(command_prefix='!')

@bot.event
async def on_ready():
    print(f'Bot is ready')

@bot.command()
async def weapon_menu(ctx):
    options = ["Пистолет", "Винтовка", "Пулемет"]
    weapon = await ctx.send("Выберите оружие:", options=options)

    def check(reaction, user):
        return user == ctx.author and reaction.message.id == weapon.id

    reaction, user = await bot.wait_for('reaction_add', check=check)
    
    if str(reaction.emoji) == '🔫':  # Если выбрана опция "Пистолет"
        await ctx.send("Пистолет - оружие для ближнего боя")
        await ctx.send(file=discord.File('pistol.png'))
    elif str(reaction.emoji) == '🔪':  # Если выбрана опция "Винтовка"
        await ctx.send("Винтовка - оружие для дальнего боя")
        await ctx.send(file=discord.File('rifle.png'))
    elif str(reaction.emoji) == '🔫':  # Если выбрана опция "Пулемет"
        await ctx.send("Пулемет - оружие для особенных операций")
        await ctx.send(file=discord.File('machine_gun.png'))

bot.run('YOUR_BOT_TOKEN')
```

В этом примере кода, после выбора опции из меню оружия, бот отправляет сообщение с описанием выбранного оружия и прикрепляет изображение. Вы можете дополнить этот пример, добавив больше опций и информации о другом оружии. Не забудьте заменить `'YOUR_BOT_TOKEN'` на токен вашего бота.
Предварительно каждой опции .setCustomId("option id") 
const response = await interaction.reply({
        content: "**Выберите оружие!**",
        components: [row],
});

const collectorFilter = i => i.user.id === interaction.user.id;
try {
	const confirmation = await response.awaitMessageComponent({ filter: collectorFilter, time: 60_000 });

	switch (confirmation.customId) {
                case 'option1':
                        await confirmation.update({ content: "Выбрана опция 1", components: [] })
                        break;
                case 'option2':
                        await confirmation.update({ content: "Выбрана опция 2", components: [] })
                        break;
                // и так далее
                default:
                        break;
        }
} catch (e) {
	await interaction.editReply({ content: 'Confirmation not received within 1 minute, cancelling', components: [] });
}


Детальнее:
https://discordjs.guide/message-components/interac...
https://discord.js.org/docs/packages/builders/main...
Похожие вопросы