← Все вопросы

Как сделать кнопки под сообщением Discord-бота (discord.ui)?

Задан 12 месяцев назад634 просмотров2 ответа
8

Хочу, чтобы бот прислал сообщение с кнопкой, и по нажатию что-то происходило. Видел такое у ботов с ролями и опросами. Это через discord.ui делается? Можно простой пример?

2 ответа

12
✓ Принятый ответ — помог автору

Да, кнопки делаются через View и discord.ui. Создаёшь класс-View, в нём метод-кнопку с декоратором, и отправляешь View вместе с сообщением:

import discord
from discord.ext import commands

class МоиКнопки(discord.ui.View):
    @discord.ui.button(label='Нажми меня', style=discord.ButtonStyle.green)
    async def кнопка(self, interaction: discord.Interaction, button: discord.ui.Button):
        await interaction.response.send_message('Ты нажал!', ephemeral=True)

@bot.command()
async def меню(ctx):
    await ctx.send('Вот кнопка:', view=МоиКнопки())

ephemeral=True — ответ увидит только тот, кто нажал. По умолчанию View «живёт» 180 секунд, потом кнопки перестают работать; можно задать timeout=None, но тогда после перезапуска бота их надо переподключать.

4

Порядок аргументов в колбэке кнопки в discord.py 2.x именно (self, interaction, button). В старых гайдах был другой порядок — если ловишь странную ошибку, проверь это первым делом.

Ваш ответ

Войдите, чтобы ответить на вопрос.