From 445dca1062e7c192855174325389e4ab293c4e59 Mon Sep 17 00:00:00 2001 From: HypoxiE Date: Wed, 30 Jul 2025 00:27:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B8=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=D1=86=D0=B8=D1=8F=20embeds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/CoreMod.py | 29 ++++++++++++++---- src/cogs/administrators.py | 54 +++++++++++++++++----------------- src/cogs/moderators.py | 60 +++++++++++++++++++------------------- src/cogs/users.py | 36 +++++++++++------------ 4 files changed, 99 insertions(+), 80 deletions(-) diff --git a/src/CoreMod.py b/src/CoreMod.py index 0f9eb8c..36f884d 100644 --- a/src/CoreMod.py +++ b/src/CoreMod.py @@ -283,6 +283,25 @@ class AnyBots(commands.Bot): else: await self.send_function(embed = embed) + class ErrEmbed(disnake.Embed): + def __init__(self, **kwargs): + color = kwargs.pop('color', 0xff0000) + super().__init__(color = color, **kwargs) + + class AnswEmbed(disnake.Embed): + def __init__(self, **kwargs): + color = kwargs.pop('color', 0x008000) + super().__init__(color = color, **kwargs) + + class WarnEmbed(disnake.Embed): + def __init__(self, **kwargs): + color = kwargs.pop('color', 0xFFFF00) + super().__init__(color = color, **kwargs) + + class SuccessEmbed(disnake.Embed): + def __init__(self, **kwargs): + color = kwargs.pop('color', 0x008000) + super().__init__(color = color, **kwargs) class MainBot(AnyBots): ''' @@ -520,14 +539,14 @@ class MainBot(AnyBots): async def on_message(self, msg): - if msg.author.bot: + if msg.author.bot or not self.task_start: return 0 if msg.author.id == 479210801891115009 and msg.content == "botsoff": - await msg.reply(embed=disnake.Embed(description=f'Бот отключён', colour=0xff9900)) + await msg.reply(embed=self.AnswEmbed(description=f'Бот отключён', colour=0xff9900)) await self.BotOff() return 0 - if type(msg.channel).__name__!="DMChannel" and fnmatch(msg.channel.name, "⚠жалоба-от-*-на-*"): + if type(msg.channel).__name__!="DMChannel" and re.match(r"^⚠️?жалоба-от-(.+)-на-(.+)$", msg.channel.name): log_reports = disnake.utils.get(msg.guild.channels, id=1242373230384386068) files=[] for att in msg.attachments: @@ -558,7 +577,7 @@ class MainBot(AnyBots): if link_in_wl is None: print("Нарушение!!!") await log.send(f"{msg.author.mention}({msg.author.id}) отправил в чат {msg.channel.mention} сомнительную ссылку, которой нет в вайлисте:```{msg.content}```") - mess = await msg.reply(embed=disnake.Embed(description=f'Этой ссылки нет в белом списке. Чтобы её туда добавили, свяжитесь с разработчиком или модераторами.', colour=0xff9900)) + mess = await msg.reply(embed=self.ErrEmbed(description=f'Этой ссылки нет в белом списке. Чтобы её туда добавили, свяжитесь с разработчиком или модераторами.', colour=0xff9900)) await msg.delete() await asyncio.sleep(20) await mess.delete() @@ -572,7 +591,7 @@ class MainBot(AnyBots): inv = await self.fetch_invite(url = "https://discord.gg/"+message_words[i+1]) if inv.guild.id != 490445877903622144: await log.send(f"{msg.author.mention}({msg.author.id}) отправил в чат {msg.channel.mention} сомнительную ссылку на сервер '{inv.guild.name}':```{msg.content}```") - mess = await msg.reply(embed=disnake.Embed(description=f'Ссылки-приглашения запрещены!', colour=0xff9900)) + mess = await msg.reply(embed=self.ErrEmbed(description=f'Ссылки-приглашения запрещены!', colour=0xff9900)) await msg.delete() await asyncio.sleep(20) await mess.delete() diff --git a/src/cogs/administrators.py b/src/cogs/administrators.py index 0d7d981..8ff1b2b 100644 --- a/src/cogs/administrators.py +++ b/src/cogs/administrators.py @@ -30,18 +30,18 @@ class AdminModule(commands.Cog): @commands.slash_command(name="bot_mod_off") async def BotModOff(self, ctx: disnake.ApplicationCommandInteraction): if self.client.me in ctx.author.roles: - await ctx.send(embed=disnake.Embed(description=f'Бот отключён', colour=0xff9900), ephemeral=True) + await ctx.send(embed=self.client.SuccessEmbed(description=f'Бот отключён', colour=0xff9900), ephemeral=True) await self.client.BotOff() else: - await ctx.send(embed=disnake.Embed(description=f'Не допустимо', colour=0xff9900), ephemeral=True) + await ctx.send(embed=self.client.ErrEmbed(description=f'Не допустимо', colour=0xff9900), ephemeral=True) @commands.slash_command(name="очистка", administrator=True) async def clear(self, ctx: disnake.AppCmdInter, count: int): if self.client.me in ctx.author.roles: await ctx.channel.purge(limit=count) - await ctx.send(embed = disnake.Embed(description = f'очищено {count} сообщений!', colour = 0xff9900), ephemeral=True) + await ctx.send(embed = self.client.SuccessEmbed(description = f'очищено {count} сообщений!', colour = 0xff9900), ephemeral=True) else: - await ctx.send(embed = disnake.Embed(description = f'Ты чего удумал?', colour = 0xff9900), ephemeral=True) + await ctx.send(embed = self.client.ErrEmbed(description = f'Ты чего удумал?', colour = 0xff9900), ephemeral=True) @commands.slash_command(description="Позволяет менять/создавать/удалять ветви", name="правка_ветви", administrator=True) async def edit_branch(self, ctx: disnake.AppCmdInter, purpose: str = commands.Param(description="Укажите цель этой ветки (например, \"модерация\" или \"администрация\")", name="цель", default=None), @@ -52,41 +52,41 @@ class AdminModule(commands.Cog): delete_branch: str = commands.Param(description="Вы уверены, что хотите удалить ветвь? Для подтверждения впишите \"уверен\"", name="удаление", default=None)): if not self.client.me in ctx.author.roles: - await ctx.send(embed = disnake.Embed(description = f'Недостаточно прав', colour = 0xff9900), ephemeral=True) + await ctx.send(embed = self.client.ErrEmbed(description = f'Недостаточно прав', colour = 0xff9900), ephemeral=True) return 1 async with self.DataBaseManager.session() as session: if delete_branch == "уверен": if branchid is None: - await ctx.send(embed = disnake.Embed(description = f'Для удаления ветки необходимо указать её id', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Для удаления ветки необходимо указать её id', colour = 0xff9900)) return 1 async with session.begin(): stmt = self.DataBaseManager.delete(self.DataBaseManager.models['staff_branches'].m).where(self.DataBaseManager.models['staff_branches'].m.id == branchid) await session.execute(stmt) - await ctx.send(embed = disnake.Embed(description = f'Ветка {branchid} успешно удалена', colour = 0xff9900)) + await ctx.send(embed = self.client.SuccessEmbed(description = f'Ветка {branchid} успешно удалена', colour = 0xff9900)) return 0 if branchid is None: if layer is None or purpose is None: - await ctx.send(embed = disnake.Embed(description = f'Для создания роли необходимо ввести все данные', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Для создания роли необходимо ввести все данные', colour = 0xff9900)) return 1 async with session.begin(): new_branch = self.DataBaseManager.models['staff_branches'].m(layer = layer, purpose = purpose, is_admin = is_admin, is_moder = is_moder) session.add(new_branch) - await ctx.send(embed = disnake.Embed(description = f'Ветвь \"{purpose}\" успешно создана. Её новый id: {new_branch.id}', colour = 0xff9900)) + await ctx.send(embed = self.client.SuccessEmbed(description = f'Ветвь \"{purpose}\" успешно создана. Её новый id: {new_branch.id}', colour = 0xff9900)) return 0 else: async with session.begin(): branch = await session.get(self.DataBaseManager.models['staff_branches'].m, branchid, with_for_update = True) if branch is None: - await ctx.send(embed = disnake.Embed(description = f'Ветви с таким идентификатором пока не существует', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Ветви с таким идентификатором пока не существует', colour = 0xff9900)) return 1 else: if purpose is None and layer is None: - await ctx.send(embed = disnake.Embed(description = f'Для изменения ветви необходимы новые значения', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Для изменения ветви необходимы новые значения', colour = 0xff9900)) return 1 if not purpose is None: @@ -95,7 +95,7 @@ class AdminModule(commands.Cog): if not layer is None: branch.layer = layer - await ctx.send(embed = disnake.Embed(description = f'Ветвь \"{branch.purpose}\"({branch.id}) успешно изменена', colour = 0xff9900)) + await ctx.send(embed = self.client.SuccessEmbed(description = f'Ветвь \"{branch.purpose}\"({branch.id}) успешно изменена', colour = 0xff9900)) return 0 @@ -106,7 +106,7 @@ class AdminModule(commands.Cog): layer: int = commands.Param(description="Укажите слой этой роли в ветке (у ролей нижних слоёв есть власть над верхними)", name="слой", default=None), delete_role: str = commands.Param(description="Вы уверены, что хотите удалить роль из системы? Для подтверждения впишите \"уверен\"", name="удаление", default=None),): if not self.client.me in ctx.author.roles: - await ctx.send(embed = disnake.Embed(description = f'Недостаточно прав', colour = 0xff9900), ephemeral=True) + await ctx.send(embed = self.client.ErrEmbed(description = f'Недостаточно прав', colour = 0xff9900), ephemeral=True) return 1 roleid = int(roleid) @@ -118,7 +118,7 @@ class AdminModule(commands.Cog): async with session.begin(): stmt = self.DataBaseManager.delete(staff_roles_model).where(staff_roles_model.id == roleid) await session.execute(stmt) - await ctx.send(embed = disnake.Embed(description = f'Роль <@&{roleid}> успешно удалена из системы', colour = 0xff9900)) + await ctx.send(embed = self.client.SuccessEmbed(description = f'Роль <@&{roleid}> успешно удалена из системы', colour = 0xff9900)) return 0 async with session.begin(): @@ -126,36 +126,36 @@ class AdminModule(commands.Cog): if not role is None: if staffsalary != 0: role.staff_salary = staffsalary - await ctx.send(embed = disnake.Embed(description = f'Зарплата роли <@&{roleid}> успешно изменена на {staffsalary}', colour = 0xff9900)) + await ctx.send(embed = self.client.SuccessEmbed(description = f'Зарплата роли <@&{roleid}> успешно изменена на {staffsalary}', colour = 0xff9900)) return 0 elif not layer is None: role.layer = layer - await ctx.send(embed = disnake.Embed(description = f'Слой роли <@&{roleid}> успешно изменён на {layer}', colour = 0xff9900)) + await ctx.send(embed = self.client.SuccessEmbed(description = f'Слой роли <@&{roleid}> успешно изменён на {layer}', colour = 0xff9900)) return 0 else: - await ctx.send(embed = disnake.Embed(description = f'Для изменения существующей роли необходимо ввести новые параметры: layer или staffsalary', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Для изменения существующей роли необходимо ввести новые параметры: layer или staffsalary', colour = 0xff9900)) return 1 else: if branchid is None: - await ctx.send(embed = disnake.Embed(description = f'Для внесения этой роли в систему необходимо указать id ветви', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Для внесения этой роли в систему необходимо указать id ветви', colour = 0xff9900)) return 1 if layer is None: - await ctx.send(embed = disnake.Embed(description = f'Для внесения этой роли в систему необходимо указать слой роли', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Для внесения этой роли в систему необходимо указать слой роли', colour = 0xff9900)) return 1 branch = await session.get(self.DataBaseManager.models['staff_branches'].m, branchid) if branch is None: - await ctx.send(embed = disnake.Embed(description = f'Ветви с таким id пока не существует', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Ветви с таким id пока не существует', colour = 0xff9900)) return 1 role = staff_roles_model(id = roleid, staff_salary = staffsalary, branch_id = branchid, layer = layer) session.add(role) - await ctx.send(embed = disnake.Embed(description = f'Роль <@&{roleid}> успешно добавлена в ветвь {branchid}', colour = 0xff9900)) + await ctx.send(embed = self.client.SuccessEmbed(description = f'Роль <@&{roleid}> успешно добавлена в ветвь {branchid}', colour = 0xff9900)) return 0 @commands.slash_command(description="Позволяет создавать/удалять пользователей в системе персонала", name="правка_пользователя", administrator=True) async def edit_member(self, ctx: disnake.AppCmdInter, userid: str = commands.Param(description="Укажите id пользователя (используются идентификаторы дискорда)", name="id"), delete_user: str = commands.Param(description="Вы уверены, что хотите удалить пользователя из системы? Для подтверждения впишите \"уверен\"", name="удаление", default=None)): if not self.client.me in ctx.author.roles: - await ctx.send(embed = disnake.Embed(description = f'Недостаточно прав', colour = 0xff9900), ephemeral=True) + await ctx.send(embed = self.client.ErrEmbed(description = f'Недостаточно прав', colour = 0xff9900), ephemeral=True) return 1 userid = int(userid) @@ -167,7 +167,7 @@ class AdminModule(commands.Cog): async with session.begin(): stmt = self.DataBaseManager.delete(staff_users_model).where(staff_users_model.id == userid) await session.execute(stmt) - await ctx.send(embed = disnake.Embed(description = f'Пользователь <@{userid}> успешно удален из системы', colour = 0xff9900)) + await ctx.send(embed = self.client.SuccessEmbed(description = f'Пользователь <@{userid}> успешно удален из системы', colour = 0xff9900)) member = await self.client.krekchat.fetch_member(userid) await member.remove_roles(self.client.staff) return 0 @@ -179,10 +179,10 @@ class AdminModule(commands.Cog): await member.add_roles(self.client.staff) user = staff_users_model(id = userid) session.add(user) - await ctx.send(embed = disnake.Embed(description = f'Пользователь <@{userid}> успешно добавлен в систему', colour = 0xff9900)) + await ctx.send(embed = self.client.SuccessEmbed(description = f'Пользователь <@{userid}> успешно добавлен в систему', colour = 0xff9900)) return 0 else: - await ctx.send(embed = disnake.Embed(description = f'Пользователь <@{userid}> уже есть в системе', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Пользователь <@{userid}> уже есть в системе', colour = 0xff9900)) return 1 @commands.slash_command(description="!!ВАЖНО!! ИСПОЛЬЗОВАНИЕ ТОЛЬКО В ЭКСТРЕННЫХ СЛУЧАЯХ! Назначает пользователей на роль", name="назначить_пользователя", administrator=True) @@ -190,7 +190,7 @@ class AdminModule(commands.Cog): roleid: str = commands.Param(description="Укажите id роли (используются идентификаторы дискорда)", name="роль"), description: str = commands.Param(description="Описание", name="описание", default=None)): if not self.client.me in ctx.author.roles: - await ctx.send(embed = disnake.Embed(description = f'Недостаточно прав', colour = 0xff9900), ephemeral=True) + await ctx.send(embed = self.client.ErrEmbed(description = f'Недостаточно прав', colour = 0xff9900), ephemeral=True) return 1 userid = int(userid) @@ -206,5 +206,5 @@ class AdminModule(commands.Cog): await session.flush() user_role = await self.DataBaseManager.model_classes['staff_users_roles'].create_with_auto_branch(session, user_id = userid, role_id = roleid, description = description) session.add(user_role) - await ctx.send(embed = disnake.Embed(description = f'Пользователю <@{userid}> успешно назначена роль <@&{roleid}>. \n```diff\n- Эта функция не выдаёт роли автоматически, поэтому требуется выдача вручную.```', colour = 0xff9900)) + await ctx.send(embed = self.client.SuccessEmbed(description = f'Пользователю <@{userid}> успешно назначена роль <@&{roleid}>. \n```diff\n- Эта функция не выдаёт роли автоматически, поэтому требуется выдача вручную.```', colour = 0xff9900)) return 0 \ No newline at end of file diff --git a/src/cogs/moderators.py b/src/cogs/moderators.py index 246fb95..0ba7dde 100644 --- a/src/cogs/moderators.py +++ b/src/cogs/moderators.py @@ -136,7 +136,7 @@ class ModerModule(commands.Cog): await member.edit(nick=newnick) await interaction.response.defer(ephemeral=True) - embed = disnake.Embed(title=f"{translate[self.title.split(':')[0]]}", description = f"{self.member.mention} ({self.member.id})") + embed = self.client.AnswEmbed(title=f"{translate[self.title.split(':')[0]]}", description = f"{self.member.mention} ({self.member.id})") bans_channel = disnake.utils.get(interaction.guild.channels, id = 1219644103973671035) warns_channel = disnake.utils.get(interaction.guild.channels, id = 1219644151184887838) muts_channel = disnake.utils.get(interaction.guild.channels, id = 1219644125469474889) @@ -225,7 +225,7 @@ class ModerModule(commands.Cog): counter += count_translate[i] * len(result) if counter>=18: await ban(interaction, self.member, 0, "Набрал больше 18 'очков наказаний'") - await bans_channel.send(embed=disnake.Embed(title=f"Достойное достижение!", description = f"Поздравляем! {self.member.mention}({self.member.id}) наконец набрал целых {counter} очков наказания и получил свою награду: вечный бан!")) + await bans_channel.send(embed=self.client.AnswEmbed(title=f"Достойное достижение!", description = f"Поздравляем! {self.member.mention}({self.member.id}) наконец набрал целых {counter} очков наказания и получил свою награду: вечный бан!")) await interaction.edit_original_response(embed=embed) @@ -329,12 +329,12 @@ class ModerModule(commands.Cog): await self.client.bt_send({"type": "unpunishment", "options": {"severity": "warning", "member": int(member)}}) view = disnake.ui.View(timeout=30) - embed = disnake.Embed(title="Выберите наказание для снятия", description = f"{self.member.mention}\n({self.member.id})", colour = 0x008000) + embed = self.client.AnswEmbed(title="Выберите наказание для снятия", description = f"{self.member.mention}\n({self.member.id})") view.add_item(await DeletePenaltiesSelect(self.member).initialization(embed)) await interaction.response.edit_message(embed = embed, view=view) - await interaction.followup.send(embed = disnake.Embed(description = f"Наказание {pentype} успешно аннулировано!", colour = 0x008000), ephemeral=True) - await logs_channel.send(embed = disnake.Embed(description = f"{interaction.author.mention}({interaction.author.id}) успешно аннулировал наказание {pentype}({penaltid}) у пользователя {member}", colour = 0x008000),) + await interaction.followup.send(embed = self.client.AnswEmbed(description = f"Наказание {pentype} успешно аннулировано!"), ephemeral=True) + await logs_channel.send(embed = self.client.AnswEmbed(description = f"{interaction.author.mention}({interaction.author.id}) успешно аннулировал наказание {pentype}({penaltid}) у пользователя {member}"),) if "textmute" in self.values[0] or "voicemute" in self.values[0] or "ban" in self.values[0] or\ @@ -343,7 +343,7 @@ class ModerModule(commands.Cog): await interaction.response.send_modal(modal) elif "deletepenalties" in self.values[0]: view = disnake.ui.View(timeout=30) - embed = disnake.Embed(title="Выберите наказание для снятия", description = f"{self.member.mention}\n({self.member.id})", colour = 0x008000) + embed = self.client.AnswEmbed(title="Выберите наказание для снятия", description = f"{self.member.mention}\n({self.member.id})") view.add_item(await DeletePenaltiesSelect(self.member).initialization(embed)) await interaction.response.send_message(embed = embed, ephemeral=True, view=view) await ctx.response.defer(ephemeral=True) @@ -353,7 +353,7 @@ class ModerModule(commands.Cog): stmt = self.max_strength_role(ctx.author.id) author_strenght = (await session.execute(stmt)).first() if author_strenght is None: - await ctx.edit_original_message(embed = disnake.Embed(description = f"Вы должны иметь должность в персонале полей, чтобы действовать", colour = 0xff9900)) + await ctx.edit_original_message(embed = self.client.ErrEmbed(description = f"Вы должны иметь должность в персонале полей, чтобы действовать")) return stmt = ( @@ -401,10 +401,10 @@ class ModerModule(commands.Cog): await ctx.edit_original_message(view=None) if (not reprimand_branches) and (not ((not member_is_moderator) and author_is_moderator)): - await ctx.edit_original_message(embed = disnake.Embed(description = f"Вы ничего не можете сделать этому пользователю", colour = 0xff9900)) + await ctx.edit_original_message(embed = self.client.ErrEmbed(description = f"Вы ничего не можете сделать этому пользователю")) return - embed = disnake.Embed(title="Выберите действие", description = f"{member.mention}\n({member.id})", colour = 0x008000) + embed = self.client.AnswEmbed(title="Выберите действие", description = f"{member.mention}\n({member.id})") embed.set_thumbnail(url=member.avatar) view = View(timeout=30) view.add_item(ActionSelect(member = member, reprimand_branches = reprimand_branches, other_on = (not member_is_moderator) and author_is_moderator)) @@ -459,14 +459,14 @@ class ModerModule(commands.Cog): try: await member.add_roles(add_role) except disnake.errors.Forbidden: - await ctx.channel.send(ctx.author.mention, embed = disnake.Embed(description = f'Недостаточно прав. Пользователю {member.mention} необходимо ручное добавление роли {add_role.mention}', colour = 0xff9900)) + await ctx.channel.send(ctx.author.mention, embed = self.client.ErrEmbed(description = f'Недостаточно прав. Пользователю {member.mention} необходимо ручное добавление роли {add_role.mention}')) if not remove_roleid is None: remove_role = await krekchat.fetch_role(remove_roleid) try: await member.remove_roles(remove_role) except disnake.errors.Forbidden: - await ctx.channel.send(ctx.author.mention, embed = disnake.Embed(description = f'Недостаточно прав. Пользователю {member.mention} необходимо ручное удаление роли {remove_role.mention}', colour = 0xff9900)) + await ctx.channel.send(ctx.author.mention, embed = self.client.ErrEmbed(description = f'Недостаточно прав. Пользователю {member.mention} необходимо ручное удаление роли {remove_role.mention}')) @commands.slash_command(description="Позволяет повысить пользователя в указанной ветке", name="повысить", administrator=True) @@ -497,7 +497,7 @@ class ModerModule(commands.Cog): user_roles = (await session.execute(stmt)).scalars().all() if len(user_roles) != 1: - await ctx.send(embed = disnake.Embed(description = f'Для данной операции необходимо уточнение id ветки!', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Для данной операции необходимо уточнение id ветки!')) return 1 else: @@ -510,7 +510,7 @@ class ModerModule(commands.Cog): member_upper_role = (await session.execute(stmt)).first() if author_upper_role is None or ((not member_upper_role is None) and author_upper_role >= member_upper_role): - await ctx.send(embed = disnake.Embed(description = f'Вы должны быть выше должности, на которую назначаете пользователя', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Вы должны быть выше должности, на которую назначаете пользователя')) return 1 stmt = ( @@ -546,39 +546,39 @@ class ModerModule(commands.Cog): member_role_index = next((i for i, role in enumerate(branch_roles) if role.id == member_role.role.id), None) if member_role_index + 1 >= len(branch_roles): - await ctx.send(embed = disnake.Embed(description = f'Этот пользователь уже находится на самой высокой должности в данной ветви', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Этот пользователь уже находится на самой высокой должности в данной ветви')) return 1 target_role = branch_roles[member_role_index + 1] if author_upper_role >= (target_role.branch.layer, target_role.layer): - await ctx.send(embed = disnake.Embed(description = f'Вы должны быть выше должности, на которую назначаете пользователя', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Вы должны быть выше должности, на которую назначаете пользователя')) return 1 previous_role_id = member_role.role_id member_role.role_id = target_role.id - await ctx.send(embed = disnake.Embed(description = f'Пользователь <@{userid}> успешно назначен на роль <@&{target_role.id}>', colour = 0xff9900)) + await ctx.send(embed = self.client.AnswEmbed(description = f'Пользователь <@{userid}> успешно назначен на роль <@&{target_role.id}>')) await self.promotions_add_remove_role(ctx, userid, add_roleid = target_role.id, remove_roleid = previous_role_id) return 0 else: member_check = await session.get(staff_users_model, userid) if member_check is None: - await ctx.send(embed = disnake.Embed(description = f'Необходимо изначально зарегистрировать пользователя, попросите разработчика использовать \"/правка_пользователя\"', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Необходимо изначально зарегистрировать пользователя, попросите разработчика использовать \"/правка_пользователя\"')) return 1 member_role_index = 0 if member_role_index >= len(branch_roles): - await ctx.send(embed = disnake.Embed(description = f'В данной ветви пока нет ролей', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'В данной ветви пока нет ролей')) return 1 target_role = branch_roles[member_role_index] if author_upper_role >= (target_role.branch.layer, target_role.layer): - await ctx.send(embed = disnake.Embed(description = f'Вы должны быть выше должности, на которую назначаете пользователя', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Вы должны быть выше должности, на которую назначаете пользователя')) return 1 user_role = await staff_users_roles_model.create_with_auto_branch(session, user_id = userid, role_id = target_role.id) session.add(user_role) - await ctx.send(embed = disnake.Embed(description = f'Пользователь <@{userid}> успешно назначен на роль <@&{target_role.id}>', colour = 0xff9900)) + await ctx.send(embed = self.client.AnswEmbed(description = f'Пользователь <@{userid}> успешно назначен на роль <@&{target_role.id}>')) await self.promotions_add_remove_role(ctx, userid, add_roleid = target_role.id) return 0 @@ -610,7 +610,7 @@ class ModerModule(commands.Cog): user_roles = (await session.execute(stmt)).scalars().all() if len(user_roles) != 1: - await ctx.send(embed = disnake.Embed(description = f'Для данной операции необходимо уточнение id ветки!', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Для данной операции необходимо уточнение id ветки!')) return 1 else: @@ -623,7 +623,7 @@ class ModerModule(commands.Cog): member_upper_role = (await session.execute(stmt)).first() if author_upper_role is None or ((not member_upper_role is None) and author_upper_role >= member_upper_role): - await ctx.send(embed = disnake.Embed(description = f'Вы должны быть выше пользователя в должности', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Вы должны быть выше пользователя в должности')) return 1 stmt = ( @@ -668,22 +668,22 @@ class ModerModule(commands.Cog): if len(result) <= 1: stmt = self.DataBaseManager.delete(staff_users_model).where(staff_users_model.id == userid) await session.execute(stmt) - await ctx.send(embed = disnake.Embed(description = f'Пользователь <@{userid}> полностью удалён из системы', colour = 0xff9900)) + await ctx.send(embed = self.client.AnswEmbed(description = f'Пользователь <@{userid}> полностью удалён из системы')) await self.promotions_add_remove_role(ctx, userid, remove_roleid = self.client.staff.id) return 0 else: await session.delete(member_role) - await ctx.send(embed = disnake.Embed(description = f'Пользователь <@{userid}> снят со всех должностей в ветви {branchid}', colour = 0xff9900)) + await ctx.send(embed = self.client.AnswEmbed(description = f'Пользователь <@{userid}> снят со всех должностей в ветви {branchid}')) return 0 target_role = branch_roles[member_role_index - 1] previous_role_id = member_role.role_id member_role.role_id = target_role.id - await ctx.send(embed = disnake.Embed(description = f'Пользователь <@{userid}> успешно понижен до роли <@&{target_role.id}> в ветви {branchid}', colour = 0xff9900)) + await ctx.send(embed = self.client.AnswEmbed(description = f'Пользователь <@{userid}> успешно понижен до роли <@&{target_role.id}> в ветви {branchid}')) await self.promotions_add_remove_role(ctx, userid, add_roleid = target_role.id, remove_roleid = previous_role_id) return 0 else: - await ctx.send(embed = disnake.Embed(description = f'Данный пользователь не имеет роли в ветке {branchid}', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Данный пользователь не имеет роли в ветке {branchid}')) return 1 @commands.slash_command(description="Позволяет добавить домен в белый список", name="добавить_ссылку", administrator=True) @@ -719,7 +719,7 @@ class ModerModule(commands.Cog): break if not admin_flag: - await ctx.send(embed = disnake.Embed(description = f'У вас недостаточно полномочий, чтобы добавлять ссылку в белый лист. Обратитесь к любому модератору или разработчику.', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'У вас недостаточно полномочий, чтобы добавлять ссылку в белый лист. Обратитесь к любому модератору или разработчику.')) return 1 else: @@ -731,18 +731,18 @@ class ModerModule(commands.Cog): return f"{ext.domain}.{ext.suffix}".lower() new_link = extract_root_domain(link) if not new_link: - await ctx.send(embed = disnake.Embed(description = f'Некорректная ссылка!', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Некорректная ссылка!')) return 1 stmt = self.DataBaseManager.select(аllowed_domains_model).where(аllowed_domains_model.domain == new_link) link_in_wl = (await session.execute(stmt)).scalars().first() if link_in_wl is not None: - await ctx.send(embed = disnake.Embed(description = f'Этот домен уже есть в белом листе!', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Этот домен уже есть в белом листе!')) return 1 domain = аllowed_domains_model(domain = new_link, initiator_id = ctx.author.id) session.add(domain) - await ctx.send(embed = disnake.Embed(description = f'Домен {new_link} успешно добавлен в белый список', colour = 0xff9900)) + await ctx.send(embed = self.client.AnswEmbed(description = f'Домен {new_link} успешно добавлен в белый список')) return 1 \ No newline at end of file diff --git a/src/cogs/users.py b/src/cogs/users.py index e81e2fd..2fc7b1c 100644 --- a/src/cogs/users.py +++ b/src/cogs/users.py @@ -31,7 +31,7 @@ class UIModule(commands.Cog): models = self.client.DataBaseManager.model_classes if not member: member = ctx.author - embed = disnake.Embed(title="Наказания", description = f"{member.mention}", colour = 0x008000) + embed = self.client.AnswEmbed(title="Наказания", description = f"{member.mention}") embed.set_thumbnail(url=member.avatar) async with self.DataBaseManager.session() as session: @@ -83,11 +83,11 @@ class UIModule(commands.Cog): embed.set_footer(text = f"Рассмотрено в пользу исца\n{mod.author.name} ({mod.author.id})") embed.colour=0x008000 await report_message.edit(content = "", embed=embed, view=None) - await member.send(embed = disnake.Embed(title=f"", description = f"После разбора нарушения модератор {mod.author.mention} признал вас виновным", colour = 0xff9900)) + await member.send(embed = self.client.WarnEmbed(title=f"", description = f"После разбора нарушения модератор {mod.author.mention} признал вас виновным")) await self.client.bt_send({"type": "complaint", "options": {"accepted": True, "attack_member": ctx.author.id, "defence_member": member.id, "moderator": mod.author.id}}) else: - await call.send(embed = disnake.Embed(title=f"", description = f"Только судья может использовать эти команды", colour = 0xff9900), ephemeral=True) + await call.send(embed = self.client.ErrEmbed(title=f"", description = f"Только судья может использовать эти команды"), ephemeral=True) async def DenyCallback(report_message, member, embed, mod, call, channel): if call.author == mod.author: @@ -95,11 +95,11 @@ class UIModule(commands.Cog): embed.set_footer(text = f"Рассмотрено в пользу ответчика\n{mod.author.name} ({mod.author.id})") embed.colour=0x008000 await report_message.edit(content = "", embed=embed, view=None) - #await member.send(embed = disnake.Embed(title=f"", description = f"После разбора нарушения модератор {mod.author.mention} признал вас невиновным", colour = 0xff9900)) + #await member.send(embed = self.client.AnswEmbed(title=f"", description = f"После разбора нарушения модератор {mod.author.mention} признал вас невиновным", colour = 0xff9900)) await self.client.bt_send({"type": "complaint", "options": {"accepted": False, "attack_member": ctx.author.id, "defence_member": member.id, "moderator": mod.author.id}}) else: - await call.send(embed = disnake.Embed(title=f"", description = f"Только судья может использовать эти команды", colour = 0xff9900), ephemeral=True) + await call.send(embed = self.client.ErrEmbed(title=f"", description = f"Только судья может использовать эти команды"), ephemeral=True) class AttackClass: def __init__(self, member, channel, mod): @@ -110,10 +110,10 @@ class UIModule(commands.Cog): async def callback(self, mod): if mod.author == self.mod.author: await self.channel.set_permissions(self.member, read_messages = True, read_message_history=True, send_messages=self.permatt) #read_messages=self.permatt - await mod.send(embed = disnake.Embed(title=f"", description = f"{self.member.mention}-{'право ответа включено' if self.permatt else 'право ответа выключено'}", colour = 0x008000), ephemeral=True) + await mod.send(embed = self.client.SuccessEmbed(title=f"", description = f"{self.member.mention}-{'право ответа включено' if self.permatt else 'право ответа выключено'}"), ephemeral=True) self.permatt=not self.permatt else: - await mod.send(embed = disnake.Embed(title=f"", description = f"Только судья может использовать эти команды", colour = 0xff9900), ephemeral=True) + await mod.send(embed = self.client.ErrEmbed(title=f"", description = f"Только судья может использовать эти команды"), ephemeral=True) class DefenceClass: def __init__(self, member, channel, mod): self.member=member @@ -123,17 +123,17 @@ class UIModule(commands.Cog): async def callback(self, mod): if mod.author == self.mod.author: await self.channel.set_permissions(self.member, read_messages = True, read_message_history=True, send_messages=self.permdef) #read_messages=self.permdef - await mod.send(embed = disnake.Embed(title=f"", description = f"{self.member.mention}-{'право ответа включено' if self.permdef else 'право ответа выключено'}", colour = 0x008000), ephemeral=True) + await mod.send(embed = self.client.SuccessEmbed(title=f"", description = f"{self.member.mention}-{'право ответа включено' if self.permdef else 'право ответа выключено'}"), ephemeral=True) self.permdef=not self.permdef else: - await mod.send(embed = disnake.Embed(title=f"", description = f"Только судья может использовать эти команды", colour = 0xff9900), ephemeral=True) + await mod.send(embed = self.client.ErrEmbed(title=f"", description = f"Только судья может использовать эти команды"), ephemeral=True) if not any(i.mention in mentions for i in mod.author.roles): - await mod.send(embed = disnake.Embed(description = f"Вы не можете принять этот репорт", colour = 0xff9900), ephemeral=True) + await mod.send(embed = self.client.ErrEmbed(description = f"Вы не можете принять этот репорт"), ephemeral=True) return if mod.author == ctx.author: - await mod.send(embed = disnake.Embed(description = f"Вы не можете принять свой же репорт", colour = 0xff9900), ephemeral=True) + await mod.send(embed = self.client.ErrEmbed(description = f"Вы не можете принять свой же репорт"), ephemeral=True) return embed.set_footer(text = f"Принято\n{mod.author.name} ({mod.author.id})") @@ -163,7 +163,7 @@ class UIModule(commands.Cog): attack = AttackClass(ctx.author, parsing_channel, mod) defence = DefenceClass(member, parsing_channel, mod) - pin = await parsing_channel.send( f"{mod.author.mention}" ,embed = disnake.Embed(title=f"Жалоба", description = f"Вы вызвались судить {member.mention} по жалобе от {ctx.author.mention}\n\ + pin = await parsing_channel.send( f"{mod.author.mention}" ,embed = self.client.AnswEmbed(title=f"Жалоба", description = f"Вы вызвались судить {member.mention} по жалобе от {ctx.author.mention}\n\ ⚔️ - Дать {ctx.author.mention} право ответа\n\ ⚰️ - Дать {member.mention} право ответа\n\ ✅ - Виновен\n\ @@ -176,7 +176,7 @@ class UIModule(commands.Cog): await pin.pin() if member==ctx.author: - await ctx.send(embed = disnake.Embed(description = f'Нельзя подать жалобу на самого себя!', colour = 0xFF4500), ephemeral=True) + await ctx.send(embed = self.client.ErrEmbed(description = f'Нельзя подать жалобу на самого себя!', colour = 0xFF4500), ephemeral=True) return mentions = [] @@ -190,7 +190,7 @@ class UIModule(commands.Cog): if len(mentions)==0: mentions.append(f"{self.client.me.mention}") - report_embed = disnake.Embed(title=f"**Жалоба**", colour = 0xDC143C) + report_embed = self.client.AnswEmbed(title=f"**Жалоба**", colour = 0xDC143C) report_embed.add_field(name=f"Обвинитель: ", value = f"{ctx.author.mention}\n({ctx.author.id})", inline=True) report_embed.add_field(name=f"Обвиняемый: ", value = f"{member.mention}\n({member.id})", inline=True) @@ -202,7 +202,7 @@ class UIModule(commands.Cog): report_message = await report_channel.send(", ".join(mentions), embed = report_embed, view=view) btn.callback = lambda mod: ReportCallback(ctx,member,report_message,reason,report_embed,mentions,mod) - await ctx.send(embed = disnake.Embed(description = f'Жалоба на {member.mention} успешно подана', colour = 0x008000), ephemeral=True) + await ctx.send(embed = self.client.SuccessEmbed(description = f'Жалоба на {member.mention} успешно подана', colour = 0x008000), ephemeral=True) ''' @@ -231,7 +231,7 @@ class UIModule(commands.Cog): for branch in branches: branch.roles.sort(key=lambda role: role.layer) - embed = disnake.Embed(title = f"", description = f"# Общая иерархия\n", colour = 0xff9900) + embed = self.client.AnswEmbed(title = f"", description = f"# Общая иерархия\n", colour = 0xff9900) for branchcounter, branch in enumerate(branches, start=1): embed.description += f"## {branchcounter}) {branch.purpose}" if devmod: @@ -259,12 +259,12 @@ class UIModule(commands.Cog): ) branch = (await session.execute(stmt)).scalars().first() if branch is None: - await ctx.send(embed = disnake.Embed(description = f'Ветви с идентификатором {branchid} не существует', colour = 0xff9900)) + await ctx.send(embed = self.client.ErrEmbed(description = f'Ветви с идентификатором {branchid} не существует', colour = 0xff9900)) return 1 branch.roles.sort(key=lambda role: role.layer) - embed = disnake.Embed(title = f"", description = f"# Иерархия по ветви {branch.purpose}\n", colour = 0xff9900) + embed = self.client.AnswEmbed(title = f"", description = f"# Иерархия по ветви {branch.purpose}\n", colour = 0xff9900) for rolecounter, role in enumerate(branch.roles, start=1): embed.description += f"## {rolecounter}) <@&{role.id}>"