• Почему бот в дискорде не отвечает при нажатии на кнопку?

    @RuslanUC
    Во первых, там где bot.wait_for(...), у вас прописано не "button_click", а "buttton_click", т.е. с тремя t.
    Во вторых при запуске кода вам выдаст ошибку, мол у response нет свойства components. Возможно это работает в прошлых версиях, но в новой - нет. Решение - добавить кнопкам custom_id, и проверять его:
    @bot.command()
    async def test(ctx):
      await ctx.send(
        embed=discord.Embed(title="тебе нравится наш сервер?"),
        components=[
          Button(style=ButtonStyle.red, label="ДА!", custom_id="yes"),
          Button(style=ButtonStyle.green, label="ну такое..", custom_id="no"),
        ]	
      )
    
      response = await bot.wait_for("button_click")
      if response.channel == ctx.channel:
        if response.custom_id == "yes":
          await response.respond(content="рады стараться!")
        else:
          await response.respond(content="в чем проблема?")


    И лучше добавить проверку канала в wait_for, сделать это можно так:
    def response_check(inter):
      return inter.channel == ctx.channel
    
    response = await bot.wait_for("button_click", check=response_check)

    или так:
    response = await bot.wait_for("button_click", check=lambda inter: inter.channel == ctx.channel)

    Тогда код будет выглядеть так:
    @bot.command()
    async def test(ctx):
      await ctx.send(
        embed=discord.Embed(title="тебе нравится наш сервер?"),
        components=[
          Button(style=ButtonStyle.red, label="ДА!", custom_id="yes"),
          Button(style=ButtonStyle.green, label="ну такое..", custom_id="no"),
        ]	
      )
    
      response = await bot.wait_for("button_click", check=lambda inter: inter.channel == ctx.channel)
      if response.custom_id == "yes":
        await response.respond(content="рады стараться!")
      else:
        await response.respond(content="в чем проблема?")
    Ответ написан
    Комментировать