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))