禁用另一条消息中的按钮,如何修复?

问题描述 投票:0回答:1

底线是,我写了一个报告代码,在完成表格后将其发送到某个渠道,在这个报告表格中,出现2个按钮,接受或拒绝。点击“接受”按钮后,发送报告的人在私人消息中写道“您的投诉已被批准”,“拒绝”是完全相同的功能,只是相反。我需要在单击其中一个按钮后,然后在文本之后,按钮也变为非活动状态 使其处于非活动状态并写入文本:

for child in self.children:
                if isinstance(child, disnake.ui.Button):
                    child.disabled = True
            await interaction.response.send_message(view=self, content='Вы одобрили жалобу на участника')

他编写文本,并在该文本上放置非活动按钮 The fact that the button is inactive in the corrected text 但我需要将报告表单中的按钮更改为非活动状态,而不是底部的文本 What I need is to replace the text at the top 完整代码

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):
            for child in self.children:
                if isinstance(child, disnake.ui.Button):
                    child.disabled = True
            await interaction.response.send_message(view=self, content='Вы одобрили жалобу на участника')
            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 

        @disnake.ui.button(label='❌', style=disnake.ButtonStyle.danger)
        async def deny_button(self, button: disnake.ui.Button, interaction: disnake.MessageInteraction):
            for child in self.children:
                if isinstance(child, disnake.ui.Button):
                    child.disabled = True
            await interaction.response.send_message(view=self, content='Вы отказали жалобу на участника')
            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

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
        view=ReportView(ctx, участник)
        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=view)
        emb = discord.Embed(title='Репорт', description="Жалоба успешно отправлена, ожидайте рассмотрия вашей жалобы!", colour=discord.Color.green())
        await ctx.respond(embed=emb)
        await ctx.delete(delay=10)

需要更改哪些内容才能在单击与按钮相同的消息后出现非活动按钮

discord discord.py bots disnake
1个回答
0
投票

这是如何在单击按钮时禁用按钮的示例:

class MyView(discord.ui.View):
  @discord.ui.button(label="A button", style=discord.ButtonStyle.primary)
  async def button_callback(self, button, interaction):
      button.disabled = True # set button.disabled to True to disable the button
      button.label = "No more pressing!" # change the button's label to something else
      await interaction.response.edit_message(view=self) # edit the message's view

更多解释如下:https://guide.pycord.dev/interactions/ui-components/buttons

我从哪里获得这些知识。

希望能帮到你!

© www.soinside.com 2019 - 2024. All rights reserved.