rusyator
@rusyator

Как вызвать функцию при нажатии на кнопку в discord?

Я пытаюсь сделать так что бы при нажатии на кнопку выполнялась другая, уже готовая функция. К примеру если нажать на кнопку 1 - сработает функция Hi. Как её вызвать?

@client.command()
 async def Hi(ctx):
    await ctx.send('Hi')

 @client.command(pass_context = True)
 async def test(ctx):
    await ctx.send(
      embed=discord.Embed(title="текст"),
      components=[
        Button(style=ButtonStyle.green, label="1")
      ]
        )
    response = await client.wait_for("button_click")
    if response.channel == ctx.channel:
            #---------------------#
  • Вопрос задан
  • 418 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Попробуй такой пример (он для новых версий дискорд.пи):
import discord
from discord.ext import commands 

client=commands.Bot(command_prefix=".")

class Buttons(discord.ui.View):  # класс описывает набор кнопок
    def __init__(self, *, timeout=180):  # конструктор класса
        super().__init__(timeout=timeout)
    # этому методу будет сопоставлена кнопка. По клику метод будет вызван.
    @discord.ui.button(label="Button",style=discord.ButtonStyle.gray)
    async def gray_button(self,button:discord.ui.Button,interaction:discord.Interaction):
        # ищи сведения об объекте discord.Interaction, чтобы понять, что ещё можно сделать в обработчике кнопки.
        await interaction.response.edit_message(content=f"This is an edited button response!")
        # альтернативно, тут ты можешь вызывать требуемые тебе методы и вообще делать что нужно

@client.command()
async def button(ctx):  # по команде !button отсылается сообщение с кнопками
    await ctx.send(
        "This message has buttons!",  # текст сообщения как обычно
        view=Buttons()  # создаём экземпляр класса Buttons и прикрепляем его
    )

token=""
client.run(token)  # запуск бота
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы