底线是,我写了一个报告代码,在完成表格后将其发送到某个渠道,在这个报告表格中,出现2个按钮,接受或拒绝。点击“接受”按钮后,发送报告的人在私人消息中写道“您的投诉已被批准”,“拒绝”是完全相同的功能,只是相反。我需要在单击其中一个按钮后,然后在文本之后,按钮也变为非活动状态 使其处于非活动状态并写入文本:
for child in self.children:
if isinstance(child, disnake.ui.Button):
child.disabled = True
await interaction.response.send_message(view=self, content='Вы одобрили жалобу на участника')
他编写文本,并在该文本上放置非活动按钮 但我需要将报告表单中的按钮更改为非活动状态,而不是底部的文本 完整代码
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)
需要更改哪些内容才能在单击与按钮相同的消息后出现非活动按钮
这是如何在单击按钮时禁用按钮的示例:
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
我从哪里获得这些知识。
希望能帮到你!