← Все вопросы
Как сделать кнопки под сообщением Discord-бота (discord.ui)?
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). В старых гайдах был другой порядок — если ловишь странную ошибку, проверь это первым делом.
Ваш ответ
Войдите, чтобы ответить на вопрос.