@Vasiliy009

Как отключить кнопки после нажатия?

Как отключить кнопки после нажатия на одну из них?

Попробовал так:
@disnake.ui.button(label='❌', style=disnake.ButtonStyle.danger)
        async def deny_button(self, button: disnake.ui.Button, interaction: disnake.MessageInteraction):
            await interaction.response.send_message(f'Вы отказали жалобу на участника')
            button.disabled = True
            p2_emb = discord.Embed(title = 'Репорт', 
                            description=f"Вы {self.member.mention} получили отказ по вашей жалобе!\nПодробности вы можете узнать у <@{self.ctx.author.id}>"
                            , colour = discord.Color.green() )
            p2_emb.set_author(name = self.member.name, icon_url= self.member.avatar.url if self.member.avatar else None)
            p2_emb.set_footer(text='Действие выполнено модератором/админом - ' + self.ctx.author.name,
                            icon_url=self.ctx.author.avatar.url)
            try:
                await self.member.send(embed=p2_emb)
            except discord.Forbidden:
                pass
            await interaction.edit_original_message(view=self)

6612df0a876d7877886557.png
Но после редактирования сообщение, обновляет
await interaction.response.send_message(f'Вы отказали жалобу на участника')

И при этом обновляет только 1 кнопку, а их у меня две, мне нужно чтобы они оба отключились, а так же в другом сообщении, полный код ниже
КОД
import asyncio
import disnake
import discord 
from discord.ui import Button, View
from discord.ext import commands
import re

class ReportView(disnake.ui.View):
        def __init__(self, ctx, участник):
            super().__init__()
            self.member = участник
            self.ctx = ctx
        
        @disnake.ui.button(label='✅', style=disnake.ButtonStyle.success)
        async def confirm_button(self, button: disnake.ui.Button, interaction: disnake.MessageInteraction):
            await interaction.response.send_message(f'Вы одобрили жалобу на участника')
            button.disabled = True
            p1_emb = discord.Embed(title = 'Репорт', 
                            description=f"Вы {self.member.mention} получили одобрение по вашей жалобе"
                            , colour = discord.Color.green() )
            p1_emb.set_author(name = self.member.name, icon_url= self.member.avatar.url if self.member.avatar else None)
            p1_emb.set_footer(text='Действие выполнено модератором/админом - ' + self.ctx.author.name,
                            icon_url=self.ctx.author.avatar.url)
            try:
                await self.member.send(embed=p1_emb)
            except discord.Forbidden:
                pass 
            await interaction.edit_original_message(view=self)

        @disnake.ui.button(label='❌', style=disnake.ButtonStyle.danger)
        async def deny_button(self, button: disnake.ui.Button, interaction: disnake.MessageInteraction):
            await interaction.response.send_message(f'Вы отказали жалобу на участника')
            button.disabled = True
            p2_emb = discord.Embed(title = 'Репорт', 
                            description=f"Вы {self.member.mention} получили отказ по вашей жалобе!\nПодробности вы можете узнать у <@{self.ctx.author.id}>"
                            , colour = discord.Color.green() )
            p2_emb.set_author(name = self.member.name, icon_url= self.member.avatar.url if self.member.avatar else None)
            p2_emb.set_footer(text='Действие выполнено модератором/админом - ' + self.ctx.author.name,
                            icon_url=self.ctx.author.avatar.url)
            try:
                await self.member.send(embed=p2_emb)
            except discord.Forbidden:
                pass
            await interaction.edit_original_message(view=self)

class member(commands.Cog):
    def __init__(self, client):
        self.client: commands.client = client

    @commands.slash_command(name="report", description="Пожаловаться")
    async def report(self, ctx, участник = discord.Option(disnake.Member, description="Участник на которого вы хотите написать жалобу"), подробности = discord.Option(str, description="Опишите подробности на жалобу участника"), ссылка = discord.Option(str, description="Ссылку на оправдание данной жалобы(Загрузите на imgur)")):
        channel = self.client.get_channel(655646843291828249)
        if not channel:
            return
        
        if "https" not in ссылка or "imgur" not in ссылка:
            emb = discord.Embed(title='Репорт', description="Вы должны загрузить доказательство в imgur(https://imgur.com/).", colour=discord.Color.red())
            await ctx.respond(embed=emb)
            await ctx.delete(delay=10)
            return

        if участник.id == ctx.author.id:
            emb = discord.Embed(title='Репорт', description=f"Вы не можете написать жалобу самому себе", colour=discord.Color.red())
            await ctx.respond(embed=emb)
            await ctx.delete(delay=10)
            return

        embed = discord.Embed(title="Новый репорт", color=0x00ff00)
        embed.add_field(name="Отправитель", value=ctx.author.mention, inline=False)
        embed.add_field(name="Цель", value=участник.mention, inline=False)
        embed.add_field(name="Причина", value=подробности, inline=False)
        embed.set_image(url=ссылка)

        await channel.send(embed=embed, view=ReportView(ctx, участник))

        emb = discord.Embed(title='Репорт', description="Жалоба успешно отправлена, ожидайте рассмотрия вашей жалобы!", colour=discord.Color.green())
        await ctx.respond(embed=emb)
        await ctx.delete(delay=10)
            
def setup(client):
    client.add_cog(member(client))
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ответы на вопрос 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Обычно применяют два подхода. Либо удаляют кнопки, либо делают их не активными.
for child in view.children:
    if isinstance(child, disnake.ui.Button):
        child.disabled = True
await message.edit(view=view)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы