Ответы пользователя по тегу discord.py
  • Почему бот в дискорде не отвечает при нажатии на кнопку?

    @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="в чем проблема?")
    Ответ написан
    Комментировать
  • Как сделать inline текст?

    @RuslanUC
    При создании embed добавьте в description это:
    [Текст](Ваша ссылка)
    Чтобы код выглядел примерно так:
    embed = discord.Embed(title="...", description="...  [Подробнее](https://discord.com/) ...")
    Ответ написан
    Комментировать
  • Можно ли как-то переотправить картинку через discord.py, которую отправил пользователь?

    @RuslanUC
    Пропишите этот код в функцию on_message:
    if message.attachments:
        files = []
        for attachment in message.attachments:
            files.append(await attachment.to_file())
        if files:
            user = await bot.fetch_user(user_id) # получение пользователя
            dm = await user.create_dm() # получение лс
            await dm.send(files=files)


    Замените user_id на айди пользователя, кому нужно пересылать картинки (у пользователя должны быть разрешены сообщения от всех пользователей в настройках дискорда).
    Код выше будет пересылать все файлы, которые будет получать бот (в том числе файлы, отправленные на серверах). Чтобы пересылать только картинки, нужно проверять тип файла и код будет выглядеть так:
    if message.attachments:
        files = []
        for attachment in message.attachments:
            try:
                if attachment.content_type.startswith("image/"):
                    files.append(await attachment.to_file())
            except:
                continue
        if files:
            user = await bot.fetch_user(user_id) # получение пользователя
            dm = await user.create_dm() # получение лс
            await dm.send(files=files)
    Ответ написан
    Комментировать