From 8d3fea29089ce974a4d9c9fcb3488df1ee936e4a Mon Sep 17 00:00:00 2001 From: HypoxiE Date: Thu, 21 Aug 2025 21:37:26 +0700 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=B2=D1=81=D0=B5=20PyLance=20?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=B8=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=BE=D1=81=D1=82=D1=8C=D1=8E=20=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D1=91=D0=BD=20ErrorHelper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/CoreFun.py | 79 ++++---- src/cogs/admin.py | 90 ++++----- src/cogs/designer.py | 11 +- src/cogs/economy.py | 96 ++++++---- src/cogs/rimagochi.py | 270 ++++++++++++++++----------- src/cogs/roles.py | 212 +++++++++++---------- src/constants/rimagochi_constants.py | 26 +-- src/managers/DataBaseManager.py | 12 +- src/test.py | 4 +- 9 files changed, 430 insertions(+), 370 deletions(-) diff --git a/src/CoreFun.py b/src/CoreFun.py index 934e395..00309a0 100644 --- a/src/CoreFun.py +++ b/src/CoreFun.py @@ -1,3 +1,5 @@ +import logging +import typing import disnake from disnake.ext import commands from disnake.ext import tasks @@ -52,7 +54,7 @@ class AnyBots(commands.Bot): async def on_ready(self, inherited = False): self.krekchat = await self.fetch_guild(constants["krekchat"]) - print(self.krekchat.name) + logging.info(self.krekchat.name) self.sponsors = [disnake.utils.get(self.krekchat.roles, id=i) for i in constants["sponsors"]] self.mutes = [disnake.utils.get(self.krekchat.roles, id=i) for i in constants["mutes"]] self.ban_role = disnake.utils.get(self.krekchat.roles, id=constants["ban_role"]) @@ -70,7 +72,7 @@ class AnyBots(commands.Bot): await self.change_presence(status=disnake.Status.online, activity=disnake.Game("Работаю")) if not inherited: - print(f"{datetime.datetime.now().strftime('%H:%M:%S %d-%m-%Y')}:: KrekFunBot activated") + logging.info(f"{datetime.datetime.now().strftime('%H:%M:%S %d-%m-%Y')}:: KrekFunBot activated") async def RimagochiUserUpdate(self, member, session = None): if session is None: @@ -308,42 +310,31 @@ class AnyBots(commands.Bot): return FormatedTime(time_units) - class ErrorOutHelper: - def __init__(self, send_function, err_name: str = "", err_description: str = "", ephemeral: bool = False, echo: bool = False, thumbnail = None): - self.err_name = err_name - self.err_description = err_description - self.send_function = send_function - self.ephemeral = ephemeral - self.echo = echo - self.thumbnail = thumbnail - self.colour = 0xff0000 + class ErrEmbed(disnake.Embed): + def __init__(self, err_func: typing.Callable[..., typing.Awaitable[None]] | None = None, err_func_kwargs: dict | None = None, **kwargs): + color = kwargs.pop('color', 0x2F3136) + super().__init__(color=color, **kwargs) + self.err_func_kwargs: dict = err_func_kwargs or {} + self.err_func = err_func - async def out(self, err_description: str = "", err_name: str = "", d: str = "", n: str = ""): - if d: - err_description = d - if n: - err_name = n + async def send(self, description: str | None = None): + if self.err_func is None: + raise ValueError("err_func не задана") + + if description is not None: + self.description = description - embed = disnake.Embed(title="", description="", colour = self.colour) - if err_name: - embed.title = err_name - else: - embed.title = self.err_name + await self.err_func(embed = self, **self.err_func_kwargs) - if err_description: - embed.description = err_description - else: - embed.description = self.err_description + class InfoEmbed(disnake.Embed): + def __init__(self, **kwargs): + color = kwargs.pop('color', 0x2F3136) + super().__init__(color = color, **kwargs) - if not self.thumbnail is None: - embed.set_thumbnail(url = self.thumbnail) - - if self.echo: - print(f"{embed.title}: {embed.description}") - if 'ephemeral' in inspect.signature(self.send_function).parameters: - await self.send_function(embed = embed, ephemeral = self.ephemeral) - else: - await self.send_function(embed = embed) + class WarnEmbed(disnake.Embed): + def __init__(self, **kwargs): + color = kwargs.pop('color', 0xFFFF00) + super().__init__(color = color, **kwargs) class AdminBot(AnyBots): ''' @@ -372,7 +363,7 @@ class AdminBot(AnyBots): else: self.UpdatingTournamentData.start() # Удалить обязательно!!! - print(f"{datetime.datetime.now().strftime('%H:%M:%S %d-%m-%Y')}:: KrekFunLoopsBot activated") + logging.info(f"{datetime.datetime.now().strftime('%H:%M:%S %d-%m-%Y')}:: KrekFunLoopsBot activated") async def BotOff(self): self.VoiceXpAdder.cancel() @@ -385,7 +376,7 @@ class AdminBot(AnyBots): if self.stop_event.is_set(): pass else: - print(f"{datetime.datetime.now().strftime('%H:%M:%S %d-%m-%Y')}:: Соединение с дискордом разорвано") + logging.error(f"{datetime.datetime.now().strftime('%H:%M:%S %d-%m-%Y')}:: Соединение с дискордом разорвано") await self.BotOff() async def check_bt_channel(self): @@ -467,7 +458,7 @@ class AdminBot(AnyBots): except json.JSONDecodeError as e: await message.add_reaction("❎") except Exception as exc: - print(data, exc) + logging.error(f"{data} {exc}") if msg_stopflag: stopflag = True break @@ -708,7 +699,7 @@ class AdminBot(AnyBots): await self.LevelRolesGiver(member, self.CalculateLevel(period_messages, period_voice_activity)) except Exception as e: - print(f"{datetime.datetime.now().strftime('%H:%M:%S %d-%m-%Y')}:: err VoiceXpAdder: {e}") + logging.error(f"{datetime.datetime.now().strftime('%H:%M:%S %d-%m-%Y')}:: err VoiceXpAdder: {e}") @tasks.loop(seconds=3600) async def CheckDataBase(self): @@ -755,7 +746,7 @@ class AdminBot(AnyBots): await backups_channel.send(content=f"Бэкап бд за {datetime.datetime.now()}:", file=disnake.File(backup_file)) except Exception as e: - print(f"err CheckDataBase: {e}") + logging.error(f"err CheckDataBase: {e}") async def init_db(): DataBaseEngine = create_async_engine( @@ -775,19 +766,19 @@ async def run_bot(bot, token, stop_event): try: await bot.start(token) except Exception as e: - print(f"Бот {bot.user.name if hasattr(bot, 'user') else 'Unknown'} упал с ошибкой: {e}") + logging.info(f"Бот {bot.user.name if hasattr(bot, 'user') else 'Unknown'} упал с ошибкой: {e}") stop_event.set() # Сигнализируем об остановке async def monitor_stop(stop_event, bots): await stop_event.wait() - print(f"{datetime.datetime.now().strftime('%H:%M:%S %d-%m-%Y')}:: Получен сигнал остановки, завершаю всех ботов...") + logging.info(f"{datetime.datetime.now().strftime('%H:%M:%S %d-%m-%Y')}:: Получен сигнал остановки, завершаю всех ботов...") for bot in bots: if not bot.is_closed(): try: await bot.close() except Exception as e: - print(f"Ошибка при закрытии бота: {e}") + logging.error(f"Ошибка при закрытии бота: {e}") await asyncio.sleep(0.1) @@ -824,9 +815,9 @@ async def main(): await asyncio.gather(*bot_tasks, monitor_task) except KeyboardInterrupt: - print("Боты остановлены по запросу пользователя") + logging.info("Боты остановлены по запросу пользователя") except Exception as e: - print(f"Произошла критическая ошибка: {e}") + logging.error(f"Произошла критическая ошибка: {e}") finally: if admin_bot is not None: await admin_bot.BotOff() diff --git a/src/cogs/admin.py b/src/cogs/admin.py index 24d7f3a..42704f0 100644 --- a/src/cogs/admin.py +++ b/src/cogs/admin.py @@ -37,11 +37,15 @@ class MainAdminModule(commands.Cog): @commands.slash_command(name="bot_fun_off") async def BotFunOff(self, ctx: disnake.ApplicationCommandInteraction): + if isinstance(ctx.author, disnake.User) or ctx.guild is None: + await ctx.send(embed=self.client.ErrEmbed(description=f'Не допустимо в личных сообщениях'), ephemeral=True) + return + if self.me in ctx.author.roles: - await ctx.send(embed=disnake.Embed(description=f'Бот отключён', colour=0xff9900), ephemeral=True) + await ctx.send(embed=self.client.InfoEmbed(description=f'Бот отключён'), 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'Не допустимо'), ephemeral=True) @commands.slash_command(name="зарегистрировать_призовую_роль") @@ -49,7 +53,7 @@ class MainAdminModule(commands.Cog): await ctx.response.defer(ephemeral=True) if not self.me in ctx.author.roles: await ctx.edit_original_message( - embed=disnake.Embed(description=f'Эта команда доступна только администратору', colour=0x2F3136)) + embed=self.client.ErrEmbed(description=f'Эта команда доступна только администратору')) return async with self.DataBaseManager.session() as session: @@ -60,9 +64,9 @@ class MainAdminModule(commands.Cog): if role_prize is None: prize_role = roles_prize_model(id = role.id) session.add(prize_role) - await ctx.edit_original_message(embed=disnake.Embed(description=f'Теперь роль {role.mention} зарегистрирована!',colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.InfoEmbed(description=f'Теперь роль {role.mention} зарегистрирована!')) else: - await ctx.edit_original_message(embed=disnake.Embed(description=f'Эта роль уже зарегистрирована!',colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.ErrEmbed(description=f'Эта роль уже зарегистрирована!')) @@ -70,7 +74,7 @@ class MainAdminModule(commands.Cog): async def GiveAPrizeRoleSlash(self, ctx, role: disnake.Role, member: disnake.Member): await ctx.response.defer(ephemeral=True) if not self.me in ctx.author.roles: - await ctx.edit_original_message(embed=disnake.Embed(description=f'Эта команда доступна только администратору', colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.ErrEmbed(description=f'Эта команда доступна только администратору')) return async with self.DataBaseManager.session() as session: @@ -81,7 +85,7 @@ class MainAdminModule(commands.Cog): stmt = self.DataBaseManager.select(roles_prize_model).where(roles_prize_model.id == role.id) role_prize = (await session.execute(stmt)).scalars().first() if role_prize is None: - await ctx.edit_original_message(embed=disnake.Embed(description=f'Данная роль не зарегистрирована как призовая', colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.ErrEmbed(description=f'Данная роль не зарегистрирована как призовая')) return 1 async with self.DataBaseManager.models['received_roles_prize'] as received_roles_prize_model: @@ -91,13 +95,13 @@ class MainAdminModule(commands.Cog): ) received_roles_prize = (await session.execute(stmt)).scalars().first() if not received_roles_prize is None: - await ctx.edit_original_message(embed=disnake.Embed(description=f'У {member.mention} уже есть роль {role.mention}', colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.ErrEmbed(description=f'У {member.mention} уже есть роль {role.mention}')) return 1 received_roles_prize = received_roles_prize_model(role_id = role.id, user_id = member.id) session.add(received_roles_prize) - embed = disnake.Embed(description=f'Роль {role.mention} успешно передана {member.mention}!', colour=0x2F3136) + embed = self.client.InfoEmbed(description=f'Роль {role.mention} успешно передана {member.mention}!') await member.add_roles(role) await ctx.edit_original_message(embed=embed) @@ -106,7 +110,7 @@ class MainAdminModule(commands.Cog): async def TakeAwayAPrizeRoleSlash(self, ctx, role: disnake.Role, member: disnake.Member): await ctx.response.defer(ephemeral=True) if not self.me in ctx.author.roles: - await ctx.edit_original_message(embed=disnake.Embed(description=f'Эта команда доступна только администратору', colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.ErrEmbed(description=f'Эта команда доступна только администратору')) return async with self.DataBaseManager.session() as session: @@ -118,32 +122,36 @@ class MainAdminModule(commands.Cog): ).with_for_update() user_role = (await session.execute(stmt)).scalars().first() if user_role is None: - await ctx.edit_original_message(embed=disnake.Embed(description=f'Данный пользователь не связан с этой ролью', colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.ErrEmbed(description=f'Данный пользователь не связан с этой ролью')) return await session.delete(user_role) - embed = disnake.Embed(description=f'Роль {role.mention} удалена из инвентаря {member.mention}!', colour=0x2F3136) + embed = self.client.InfoEmbed(description=f'Роль {role.mention} удалена из инвентаря {member.mention}!') await member.remove_roles(role) await ctx.edit_original_message(embed=embed) @commands.slash_command(name="удалить_роль") async def DeleteRoleSlash(self, ctx: disnake.AppCmdInter, roleid: str): + if isinstance(ctx.author, disnake.User) or ctx.guild is None: + await ctx.send(embed=self.client.ErrEmbed(description=f'Не допустимо в личных сообщениях'), ephemeral=True) + return + if not self.me in ctx.author.roles: - await ctx.send(embed=disnake.Embed(description=f'Эта команда доступна только администратору', colour=0x2F3136)) + await ctx.send(embed=self.client.ErrEmbed(description=f'Эта команда доступна только администратору')) return try: res = await self.client.DeleteRole(int(roleid)) - await ctx.send(embed=disnake.Embed(description=f'{res[1]}', colour=0xff9900), ephemeral=True) + await ctx.send(embed=self.client.InfoEmbed(description=f'{res[1]}'), ephemeral=True) except ValueError: - await ctx.send(embed=disnake.Embed(description=f'Введён неверный id', colour=0xff9900), ephemeral=True) + await ctx.send(embed=self.client.ErrEmbed(description=f'Введён неверный id'), ephemeral=True) @commands.slash_command(name="установить_описание_роли") async def RoleDescriptoinSetSlash(self, ctx, role: disnake.Role, description: str): await ctx.response.defer(ephemeral=True) if not self.me in ctx.author.roles: - await ctx.edit_original_message(embed=disnake.Embed(description=f'Эта команда доступна только администратору', colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.ErrEmbed(description=f'Эта команда доступна только администратору')) return async with self.DataBaseManager.session() as session: @@ -158,15 +166,19 @@ class MainAdminModule(commands.Cog): session.add(role) else: role_static.description = description - await ctx.edit_original_message(embed=disnake.Embed(description=f'Для роли {role.mention} успешно установлено описание\n```{description}```', colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.InfoEmbed(description=f'Для роли {role.mention} успешно установлено описание\n```{description}```')) return @commands.slash_command(name = "изменить_параметр") async def ChangeParamSlash(self, ctx: disnake.AppCmdInter, member: disnake.Member, vector: int, parameter: str = commands.Param(description="Какой параметр хотите изменить?", name="параметр", choices=['крошки', 'сообщения', 'секунды в голосовом канале', 'репутация', 'зарплата'])): + if isinstance(ctx.author, disnake.User) or ctx.guild is None: + await ctx.send(embed=self.client.ErrEmbed(description=f'Не допустимо в личных сообщениях'), ephemeral=True) + return + if not self.me in ctx.author.roles: - await ctx.edit_original_message(embed=disnake.Embed(description=f'Эта команда доступна только администратору', colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.ErrEmbed(description=f'Эта команда доступна только администратору')) return async with self.DataBaseManager.session() as session: @@ -196,16 +208,20 @@ class MainAdminModule(commands.Cog): case 'зарплата': user.staff_salary += vector count = user.staff_salary - await ctx.send(embed=disnake.Embed(description=f'Количество {parameter} пользователя {member.mention} успешно изменено до `{count}`', colour=0xff9900), ephemeral=True) + await ctx.send(embed=self.client.InfoEmbed(description=f'Количество {parameter} пользователя {member.mention} успешно изменено до `{count}`'), ephemeral=True) @commands.slash_command(name = "дать_зверя") async def GiveRimagochiAnimalSlash(self, ctx: disnake.AppCmdInter, member: disnake.Member, animal_id: int): + if isinstance(ctx.author, disnake.User) or ctx.guild is None: + await ctx.send(embed=self.client.ErrEmbed(description=f'Не допустимо в личных сообщениях'), ephemeral=True) + return + if not self.me in ctx.author.roles: - await ctx.edit_original_message(embed=disnake.Embed(description=f'Эта команда доступна только администратору', colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.ErrEmbed(description=f'Эта команда доступна только администратору')) return if not animal_id in rimagochi_animals.keys(): - await ctx.send(embed=disnake.Embed(description=f'Некорректный идентификатор животного', colour=0xff9900), ephemeral=True) + await ctx.send(embed=self.client.ErrEmbed(description=f'Некорректный идентификатор животного'), ephemeral=True) return async with self.DataBaseManager.session() as session: @@ -214,12 +230,16 @@ class MainAdminModule(commands.Cog): async with self.DataBaseManager.models['rimagochi_animals'] as rimagochi_animals_model: animal = rimagochi_animals_model(model_animal_id = animal_id, initial_owner_id = ctx.author.id, owner_id = member.id) session.add(animal) - await ctx.send(embed=disnake.Embed(description=f'{member.mention} успешно получил `{rimagochi_animals[animal_id]["name"]}`', colour=0xff9900), ephemeral=True) + await ctx.send(embed=self.client.InfoEmbed(description=f'{member.mention} успешно получил `{rimagochi_animals[animal_id]["name"]}`'), ephemeral=True) @commands.slash_command(name = "удалить_зверя") async def RemoveRimagochiAnimalSlash(self, ctx: disnake.AppCmdInter, inventory_id: int): + if isinstance(ctx.author, disnake.User) or ctx.guild is None: + await ctx.send(embed=self.client.ErrEmbed(description=f'Не допустимо в личных сообщениях'), ephemeral=True) + return + if not self.me in ctx.author.roles: - await ctx.edit_original_message(embed=disnake.Embed(description=f'Эта команда доступна только администратору', colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.ErrEmbed(description=f'Эта команда доступна только администратору')) return async with self.DataBaseManager.session() as session: @@ -231,29 +251,9 @@ class MainAdminModule(commands.Cog): animal = (await session.execute(stmt)).scalars().first() if animal is None: - await ctx.send(embed=disnake.Embed(description=f'Животного с таким идентификатором не обнаружено', colour=0x2F3136), ephemeral=True) + await ctx.send(embed=self.client.ErrEmbed(description=f'Животного с таким идентификатором не обнаружено'), ephemeral=True) return 1 else: await session.delete(animal) - await ctx.send(embed=disnake.Embed(description=f"<@{animal.owner_id}> лишился `{rimagochi_animals[animal.model_animal_id]['name']}` с id `{inventory_id}`", - colour=0xff9900), ephemeral=True) + await ctx.send(embed=self.client.InfoEmbed(description=f"<@{animal.owner_id}> лишился `{rimagochi_animals[animal.model_animal_id]['name']}` с id `{inventory_id}`"), ephemeral=True) return 0 - - @commands.slash_command(name = "температура") - async def RaspberryTemperature(self, ctx: disnake.AppCmdInter): - if not self.me in ctx.author.roles: - await ctx.send(embed=disnake.Embed(description=f'Эта команда доступна только администратору', colour=0x2F3136)) - return - def redgreen(temper, minimum, maximum): - if temper == ((maximum+minimum)/2): - return [255, 255, 0] - if temper > ((maximum+minimum)/2): - return [255, max(0, min(int((1-((temper-minimum)/(maximum-minimum)))*255), 255)), 0] - if temper < ((maximum+minimum)/2): - return [max(0, min(int(((temper-minimum)/(maximum-minimum))*255), 255)), 255, 0] - try: - with open('/sys/class/thermal/thermal_zone0/temp', 'r') as f: - temp = f.read() - except: - temp = "0" - await ctx.send(embed=disnake.Embed(description=f"Температура CPU {str(int(temp) / 1000)} °C", colour=disnake.Color.from_rgb(*redgreen(int(temp)/1000, 30, 70)))) diff --git a/src/cogs/designer.py b/src/cogs/designer.py index 5f9efc7..e2ff834 100644 --- a/src/cogs/designer.py +++ b/src/cogs/designer.py @@ -1,3 +1,4 @@ +import logging import disnake from disnake.ext import commands from disnake.ext import tasks @@ -32,7 +33,7 @@ class MainDesignerModule(commands.Cog): self.krekchat = await self.client.fetch_guild(constants["krekchat"]) self.sponsors = [disnake.utils.get(self.krekchat.roles, id=i) for i in constants["sponsors"]] self.me = disnake.utils.get(self.krekchat.roles, id=constants["me"]) - print(f'KrekFunBot designer module activated') + logging.info(f'KrekFunBot designer module activated') @commands.slash_command(name = "профиль", description="Ваш профиль на сервере") async def Profile(self, ctx: disnake.AppCmdInter, @@ -49,7 +50,8 @@ class MainDesignerModule(commands.Cog): user = await session.get(users_model, member.id) if user is None: - await self.client.ErrorOutHelper(send_function = ctx.edit_original_message).out(n="Ошибка профиля", d=f"{'Вас' if member == ctx.author else 'Этого пользователя'} пока нет в базе данных{', напишите хотя бы одно сообщение' if member == ctx.author else ''}") + embed = self.client.ErrEmbed(title="Ошибка профиля", description=f"{'Вас' if member == ctx.author else 'Этого пользователя'} пока нет в базе данных{', напишите хотя бы одно сообщение' if member == ctx.author else ''}") + await ctx.edit_original_message(embed=embed) return rating = users_model.period_messages + (users_model.period_voice_activity / 180.0) @@ -78,7 +80,7 @@ class MainDesignerModule(commands.Cog): design = design.design if old_style: - embed = disnake.Embed(title=f"Профиль **{member.display_name}**", description=f'') + embed = self.client.InfoEmbed(title=f"Профиль **{member.display_name}**", description=f'') embed.colour = 0x2F3136 embed.set_thumbnail(url=member.avatar) @@ -103,7 +105,8 @@ class MainDesignerModule(commands.Cog): data = {} if design.render_profile_code is None: - await self.client.ErrorOutHelper(send_function = ctx.edit_original_message).out(n="Ошибка профиля", d=f"Для этой темы профиля не определена функция render. Свяжитесь с разработчиком для решения этой проблемы") + embed = self.client.ErrEmbed(title="Ошибка профиля", description=f"Для этой темы профиля не определена функция render. Свяжитесь с разработчиком для решения этой проблемы") + await ctx.edit_original_message(embed=embed) return avatar_asset = member.avatar or member.default_avatar diff --git a/src/cogs/economy.py b/src/cogs/economy.py index 891daa0..a7d5fb6 100644 --- a/src/cogs/economy.py +++ b/src/cogs/economy.py @@ -1,3 +1,4 @@ +import logging import disnake from disnake.ext import commands from disnake.ext import tasks @@ -28,7 +29,7 @@ class MainEconomyModule(commands.Cog): self.krekchat = await self.client.fetch_guild(constants["krekchat"]) self.sponsors = [disnake.utils.get(self.krekchat.roles, id=i) for i in constants["sponsors"]] self.me = disnake.utils.get(self.krekchat.roles, id=constants["me"]) - print(f'KrekFunBot economy module activated') + logging.info(f'KrekFunBot economy module activated') @commands.slash_command(name = "статистика", description="Статистика отображает все данные о пользователе") async def UserStatistic(self, ctx: disnake.AppCmdInter, @@ -37,11 +38,11 @@ class MainEconomyModule(commands.Cog): member = ctx.author if ctx.guild is None: - embed = disnake.Embed(title=f"Статистика **{member.name}**", description=f'') + embed = self.client.InfoEmbed(title=f"Статистика **{member.name}**", description=f'') elif member.nick != None: - embed = disnake.Embed(title=f"Статистика **{member.nick}**", description=f'') + embed = self.client.InfoEmbed(title=f"Статистика **{member.nick}**", description=f'') else: - embed = disnake.Embed(title=f"Статистика **{member.name}**", description=f'') + embed = self.client.InfoEmbed(title=f"Статистика **{member.name}**", description=f'') embed.set_thumbnail(url=member.avatar) @@ -54,7 +55,8 @@ class MainEconomyModule(commands.Cog): async with session.begin(): user = await session.get(users_model, member.id) if user is None: - await self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка статистики").out(d="Такого пользователя нет в базе данных") + embed = self.client.ErrEmbed(title="Ошибка статистики", description="Такого пользователя нет в базе данных") + await ctx.edit_original_message(embed=embed) return stmt = self.DataBaseManager.select(users_model).options( @@ -126,10 +128,12 @@ class MainEconomyModule(commands.Cog): order_by = [self.DataBaseManager.desc(users_model.period_voice_activity), self.DataBaseManager.desc(users_model.period_messages)] case "по количеству крошек": order_by = [self.DataBaseManager.desc(users_model.crumbs), self.DataBaseManager.desc(users_model.period_messages), self.DataBaseManager.desc(users_model.period_voice_activity)] + if order_by is None: + return stmt = self.DataBaseManager.select(users_model).order_by(*order_by).limit(20) users = (await session.execute(stmt)).scalars().all() - embed = disnake.Embed(title=f"Общий топ {parameter}", description=f'', colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"Общий топ {parameter}", description=f'') users_counter = 0 for user in users: try: @@ -176,9 +180,10 @@ class MainEconomyModule(commands.Cog): name="награда") async def DailyCrumbsSub(self, ctx: disnake.AppCmdInter): await ctx.response.defer() - error_helper = self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка начисления ежедневной награды") + err_embed = self.client.ErrEmbed(title="Ошибка начисления ежедневной награды") if ctx.guild is None: - await error_helper.out(d="Эта команда не работает в личных сообщениях!") + err_embed.description = "Эта команда не работает в личных сообщениях!" + await ctx.edit_original_message(embed=err_embed) return async with self.DataBaseManager.session() as session: await self.client.UserUpdate(member = ctx.author, session = session) @@ -192,10 +197,11 @@ class MainEconomyModule(commands.Cog): if result['success']: history = self.DataBaseManager.models['transaction_history_crumbs'].m(recipient_id = ctx.author.id, amount = result['count'], description = f"Ежедневная награда за {result['date'].strftime('%d.%m.%Y')}") session.add(history) - await ctx.edit_original_message(embed=disnake.Embed(description=result['output'], colour=0x2F3136)) + await ctx.edit_original_message(embed=self.client.InfoEmbed(description=result['output'])) return else: - await error_helper.out(d=result['output']) + err_embed.description = result['output'] + await ctx.edit_original_message(embed=err_embed) return @@ -203,11 +209,13 @@ class MainEconomyModule(commands.Cog): async def HistoryCrumbsSlash(self, ctx: disnake.AppCmdInter): pass @HistoryCrumbsSlash.sub_command(description="Показывает историю транзакций", name="транзакций") - async def HistoryCrumbsSub(self, ctx: disnake.AppCmdInter, member: disnake.Member = commands.Param( + async def HistoryCrumbsSub(self, ctx: disnake.AppCmdInter, member_inp: disnake.Member = commands.Param( description="Чью историю хотите посмотреть?(только для администраторов)", name="участник", default=None)): - if not (member != None and self.me in ctx.author.roles): - member = ctx.author + + member = ctx.author + if isinstance(ctx.author, disnake.Member) and (member_inp is not None) and (self.me in ctx.author.roles): + member = member_inp class HistoryButtons(disnake.ui.View): def __init__(self, ctx, transactions, member, embed): super().__init__(timeout=180) @@ -276,7 +284,7 @@ class MainEconomyModule(commands.Cog): embed.add_field(name=f"", value=f"Страница {selfpage}/{maxpage}", inline=False) return embed await ctx.response.defer(ephemeral = True) - embed = disnake.Embed(title=f'История транзакций {member.name}', description=f"", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f'История транзакций {member.name}', description=f"") async with self.DataBaseManager.session() as session: async with session.begin(): @@ -307,9 +315,11 @@ class MainEconomyModule(commands.Cog): description=f"Количество круток(целое число от 1 до {constants['casinospinslimit']}({constants['casinospinslimit']*2} для спонсоров))", name="количество", default=1)): await ctx.response.defer() - error_helper = self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка казино") - if ctx.guild is None: - await error_helper.out(d="Эта команда не работает в личных сообщениях!") + + err_embed = self.client.ErrEmbed(title="Ошибка казино") + if isinstance(ctx.author, disnake.User): + err_embed.description = "Эта команда не работает в личных сообщениях!" + await ctx.edit_original_message(embed=err_embed) return def get_dynamic_fee(count: int) -> float: if count < 1_000: @@ -349,21 +359,25 @@ class MainEconomyModule(commands.Cog): user_is_sponsor = await user.in_role(member = ctx.author, roles = self.sponsors) casinospinslimit = constants['casinospinslimit'] if quantity <= 0: - await error_helper.out(d=f'Количество круток должно быть > 0') + err_embed.description = f'Количество круток должно быть > 0' + await ctx.edit_original_message(embed=err_embed) return if quantity > casinospinslimit * (user_is_sponsor + 1) and (not self.me in ctx.author.roles): - await error_helper.out(d=f'Вы не можете крутить казино больше {casinospinslimit * (user_is_sponsor + 1)} раз в день!') + err_embed.description = f'Вы не можете крутить казино больше {casinospinslimit * (user_is_sponsor + 1)} раз в день!' + await ctx.edit_original_message(embed=err_embed) return if not 0 < possibility < 100: - await error_helper.out(d=f'Шанс должен быть от 1% до 99%') + err_embed.description = f'Шанс должен быть от 1% до 99%' + await ctx.edit_original_message(embed=err_embed) return - possibility = possibility / 100 + possibility = possibility // 100 if count <= 0: - await error_helper.out(d=f'Ставка должна быть больше 0') + err_embed.description = f'Ставка должна быть больше 0' + await ctx.edit_original_message(embed=err_embed) return - if user.crumbs < count * quantity: - await error_helper.out(d=f'Для такой ставки вам необходимо иметь {quantity*count} крошек') + err_embed.description = f'Для такой ставки вам необходимо иметь {quantity*count} крошек' + await ctx.edit_original_message(embed=err_embed) return now = datetime.datetime.now().timestamp() @@ -374,9 +388,11 @@ class MainEconomyModule(commands.Cog): if casino_user.spins_today_count + quantity > casinospinslimit * (user_is_sponsor + 1) and (not self.me in ctx.author.roles): if casino_user.spins_today_count >= casinospinslimit * (user_is_sponsor + 1): - await error_helper.out(d=f'У вас не осталось круток, возобновление лимита будет ') + err_embed.description = f'У вас не осталось круток, возобновление лимита будет ' + await ctx.edit_original_message(embed=err_embed) else: - await error_helper.out(d=f'У вас осталось только {casinospinslimit * (user_is_sponsor + 1) - (casino_user.spins_today_count)} круток, возобновление лимита будет ') + err_embed.description = f'У вас осталось только {casinospinslimit * (user_is_sponsor + 1) - (casino_user.spins_today_count)} круток, возобновление лимита будет ' + await ctx.edit_original_message(embed=err_embed) return results = [random.random() < possibility for _ in range(quantity)] @@ -389,14 +405,16 @@ class MainEconomyModule(commands.Cog): if int(totalcrumbs)>0: history = self.DataBaseManager.models['transaction_history_crumbs'].m(recipient_id = ctx.author.id, amount = int(totalcrumbs), description = f"Выигрыш в казино с шансом {int(possibility * 100)}% и ставкой {count} крошек ({totalwins} побед, {quantity-totalwins} поражений)") session.add(history) - embed=disnake.Embed(title=f'Вы в плюсе!', description=f"Ваш выигрыш составил {int(totalcrumbs)}!", colour=0x2F3136) + embed=self.client.InfoEmbed(title=f'Вы в плюсе!', description=f"Ваш выигрыш составил {int(totalcrumbs)}!") elif int(totalcrumbs) == 0: - embed=disnake.Embed(title=f'Вы вышли в 0',description=f"", colour=0x2F3136) + embed=self.client.InfoEmbed(title=f'Вы вышли в 0',description=f"") else: history = self.DataBaseManager.models['transaction_history_crumbs'].m(sender_id = ctx.author.id, amount = int(abs(totalcrumbs)), description = f"Проигрыш в казино с шансом {int(possibility * 100)}% и ставкой {count} крошек ({totalwins} побед, {quantity-totalwins} поражений)") session.add(history) - embed=disnake.Embed(title=f'Вы в минусе(', description=f"Ваш проигрыш составил {int(-totalcrumbs)}", colour=0x2F3136) + embed=self.client.InfoEmbed(title=f'Вы в минусе(', description=f"Ваш проигрыш составил {int(-totalcrumbs)}") + if embed.description is None: + raise ValueError("embed.description в казино = None") embed.description += (f"\n-# У вас осталось {casinospinslimit * (user_is_sponsor + 1) - (casino_user.spins_today_count)} круток") await ctx.edit_original_message(embed = embed) @@ -414,16 +432,17 @@ class MainEconomyModule(commands.Cog): default="Перевод"), commission: float = commands.Param(description="Доля комиссии(доступно только админам)", name="комиссия", default=None)): - error_helper = self.client.ErrorOutHelper(send_function = ctx.response.send_message, err_name = "Ошибка перевода") - if ctx.guild is None: - await error_helper.out(d="Эта команда не работает в личных сообщениях!") + + err_embed = self.client.ErrEmbed(err_func = ctx.response.send_message, title="Ошибка перевода") + if isinstance(ctx.author, disnake.User): + await err_embed.send("Эта команда не работает в личных сообщениях!") return if comment != "Перевод": comment = "Перевод | " + comment if (commission == None) or (not self.me in ctx.author.roles) or (ctx.author.id == 515542927158804480): commission = constants['givecrumbscommission'] if count <= 0: - await error_helper.out(d="Количество крошек должно быть больше 0") + await err_embed.send("Количество крошек должно быть больше 0") return users_model = self.DataBaseManager.models['users'].m async with self.DataBaseManager.session() as session: @@ -432,15 +451,15 @@ class MainEconomyModule(commands.Cog): member_data = await session.get(users_model, member.id, with_for_update = True) if author_data is None: - await error_helper.out(d=f'Вас нет в базе данных') + await err_embed.send(f'Вас нет в базе данных') return if member_data is None: - await error_helper.out(d=f'Такого пользователя нет в базе данных') + await err_embed.send(f'Такого пользователя нет в базе данных') return if author_data.crumbs - count < 0: - await error_helper.out(d=f'У вас не хватает крошек') + await err_embed.send(f'У вас не хватает крошек') return history_write = self.DataBaseManager.models["transaction_history_crumbs"].m(sender_id = ctx.author.id, recipient_id = member.id, commission_fraction = commission, description = comment, amount = count) @@ -448,6 +467,5 @@ class MainEconomyModule(commands.Cog): author_data.crumbs -= count member_data.crumbs += count * (1 - commission) - await ctx.response.send_message(embed=disnake.Embed( - description=f'{count} крошек успешно отправлено на счёт {member.mention}, комиссия составила {int(commission * 100)}%({int(count * commission)} крошек)', - colour=0x2F3136)) \ No newline at end of file + await ctx.response.send_message(embed=self.client.InfoEmbed( + description=f'{count} крошек успешно отправлено на счёт {member.mention}, комиссия составила {int(commission * 100)}%({int(count * commission)} крошек)')) \ No newline at end of file diff --git a/src/cogs/rimagochi.py b/src/cogs/rimagochi.py index 3e0ed1a..02ac97e 100644 --- a/src/cogs/rimagochi.py +++ b/src/cogs/rimagochi.py @@ -1,4 +1,5 @@ +import logging import disnake from disnake.ext import commands from disnake.ext import tasks @@ -34,7 +35,7 @@ class MainRimagochiModule(commands.Cog): @commands.Cog.listener() async def on_ready(self): - print(f'KrekFunBot rimagochi module activated') + logging.info(f'KrekFunBot rimagochi module activated') krekchat = await self.client.fetch_guild(constants["krekchat"]) self.me = disnake.utils.get(krekchat.roles, id=constants["me"]) @@ -54,7 +55,7 @@ class MainRimagochiModule(commands.Cog): async def RimagochiPlayerProfileSub(self, ctx: disnake.AppCmdInter, member: disnake.Member = commands.Param(description="Чей профиль хотите посмотреть?", name="игрок", default=None)): - if member == None: + if member is None: member = ctx.author async with self.DataBaseManager.session() as session: if member == ctx.author: @@ -62,7 +63,8 @@ class MainRimagochiModule(commands.Cog): else: user = await session.get(self.DataBaseManager.models['rimagochi_users'].m, member.id) if user is None: - await self.client.ErrorOutHelper(send_function = ctx.response.send_message, err_name = "Ошибка профиля", thumbnail = member.avatar).out(d=f"Этот пользователь скрывает свои данные") + err_embed = self.client.ErrEmbed(title = "Ошибка профиля", thumbnail = member.avatar, description = f"Пользователь не найден") + await ctx.response.send_message(embed = err_embed) return async with session.begin(): async with self.DataBaseManager.models['rimagochi_users'] as rimagochi_users_model: @@ -74,13 +76,20 @@ class MainRimagochiModule(commands.Cog): ) user = (await session.execute(stmt)).scalars().first() - if member != ctx.author and user.settings['hide_the_animals'] and (not self.client.me in ctx.author.roles): - await self.client.ErrorOutHelper(send_function = ctx.response.send_message, err_name = "Ошибка профиля", thumbnail = member.avatar).out(d=f"Этот пользователь скрывает свои данные") - return + if not isinstance(ctx.author, disnake.Member): + if (member != ctx.author and user.settings['hide_the_animals']): + err_embed = self.client.ErrEmbed(title = "Ошибка профиля", thumbnail = member.avatar, description = f"Этот пользователь скрывает свои данные") + await ctx.response.send_message(embed = err_embed) + return + else: + if (member != ctx.author and user.settings['hide_the_animals']) and (not self.client.me in ctx.author.roles): + err_embed = self.client.ErrEmbed(title = "Ошибка профиля", thumbnail = member.avatar, description = f"Этот пользователь скрывает свои данные") + await ctx.response.send_message(embed = err_embed) + return await ctx.response.defer(ephemeral = user.settings['hide_the_animals']) strength = await self.client.CalculateRimagochiBattleStrength(user.battle_slots_animals) - embed = disnake.Embed(title=f"", description=f"### Профиль игрока {member.mention}", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"", description=f"### Профиль игрока {member.mention}") embed.set_thumbnail(url=member.avatar) embed.add_field(name=f"Победы в битвах", value=f"{user.wins}", inline=False) embed.add_field(name=f"Cила отряда", value=f"{strength}", inline=True) @@ -111,7 +120,8 @@ class MainRimagochiModule(commands.Cog): @disnake.ui.button(label="1", style=disnake.ButtonStyle.primary) async def button1_callback(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): if ctx.author != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, err_name = "Ошибка доступа", ephemeral = True).out(d=f"Вы не можете менять настройки другого пользователя") + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Вы не можете менять настройки другого пользователя") + await inter.response.send_message(embed=err_embed, ephemeral=True) return await inter.response.defer() self.settings['hide_the_animals'] = not self.settings['hide_the_animals'] @@ -121,7 +131,8 @@ class MainRimagochiModule(commands.Cog): @disnake.ui.button(label="2", style=disnake.ButtonStyle.primary) async def button2_callback(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): if ctx.author != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, err_name = "Ошибка доступа", ephemeral = True).out(d=f"Вы не можете менять настройки другого пользователя") + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Вы не можете менять настройки другого пользователя") + await inter.response.send_message(embed=err_embed, ephemeral=True) return await inter.response.defer() self.settings['always_use_crumbs_for_feeding'] = not self.settings['always_use_crumbs_for_feeding'] @@ -131,7 +142,8 @@ class MainRimagochiModule(commands.Cog): @disnake.ui.button(label="3", style=disnake.ButtonStyle.primary) async def button3_callback(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): if ctx.author != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, err_name = "Ошибка доступа", ephemeral = True).out(d=f"Вы не можете менять настройки другого пользователя") + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Вы не можете менять настройки другого пользователя") + await inter.response.send_message(embed=err_embed, ephemeral=True) return await inter.response.defer() self.settings['accept_the_challenge'] = not self.settings['accept_the_challenge'] @@ -149,7 +161,7 @@ class MainRimagochiModule(commands.Cog): await ctx.edit_original_message(view=None) def SettingsEmbedMaker(settings): - embed = disnake.Embed(title=f"Глобальные настройки", description=f'') + embed = self.client.InfoEmbed(title=f"Глобальные настройки", description=f'') embed.set_thumbnail(url=ctx.author.avatar) embed.add_field(name=f"1) Скрывать свои данные", value="Отключено" if not settings['hide_the_animals'] else "Включено", inline=False) embed.add_field(name=f"2) Всегда использовать крошки для кормления животных", value="Отключено" if not settings['always_use_crumbs_for_feeding'] else "Включено", inline=False) @@ -179,7 +191,7 @@ class MainRimagochiModule(commands.Cog): @OpenGachaSlash.sub_command(description="После открытия капсулы, вы получаете боевого питомца", name="капсулу") async def OpenGachaSub(self, ctx: disnake.AppCmdInter, - capsule: int = commands.Param(description="Название капсулы", + capsule_id: int = commands.Param(description="Название капсулы", name="капсула", choices=[disnake.OptionChoice(name=f"{i['name']} - {i['cost']} крошек", value=i['id']) for i in rimagochi_capsules.values()])): def get_random_rarity(chances): @@ -207,11 +219,11 @@ class MainRimagochiModule(commands.Cog): user = (await session.execute(stmt)).scalars().first() await ctx.response.defer(ephemeral = user.rimagochi_account.settings['hide_the_animals']) - error_helper = self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка открытия капсулы") - capsule = rimagochi_capsules[capsule] + err_embed = self.client.ErrEmbed(err_func = ctx.edit_original_message, title = "Ошибка открытия капсулы") + capsule = rimagochi_capsules[capsule_id] if user.crumbs < capsule['cost']: - await error_helper.out(d=f"Для открытия этой капсулы необходимо иметь {capsule['cost']} крошек") + await err_embed.send(f"Для открытия этой капсулы необходимо иметь {capsule['cost']} крошек") return timed_animals = {} @@ -236,7 +248,7 @@ class MainRimagochiModule(commands.Cog): new_animal_id = new_animal.id - embed = disnake.Embed(title=f"{rarity['emoji']} {animal['name'].capitalize()} ({(chance*100):.02f}%)", description=f"{animal['description']}", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"{rarity['emoji']} {animal['name'].capitalize()} ({(chance*100):.02f}%)", description=f"{animal['description']}", colour=0x2F3136) embed.set_thumbnail(url = animal['params']['image_url']) class SlaughterView(disnake.ui.View): @@ -248,7 +260,8 @@ class MainRimagochiModule(commands.Cog): @disnake.ui.button(label="Оставить", style=disnake.ButtonStyle.success, emoji="<:A_risworld_rislove:759009763840622622>") async def button1_callback(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): if ctx.author != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, err_name = "Ошибка доступа", ephemeral = True).out(d=f"Вы не можете выбирать за другого игрока") + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Вы не можете выбирать за другого игрока") + await inter.response.send_message(embed=err_embed, ephemeral = True) return self.stop() await self.on_timeout() @@ -256,7 +269,8 @@ class MainRimagochiModule(commands.Cog): @disnake.ui.button(label="Забить", style=disnake.ButtonStyle.danger, emoji="<:A_risworld_risantilove:760082727356727297>") async def button2_callback(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): if ctx.author != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, err_name = "Ошибка доступа", ephemeral = True).out(d=f"Вы не можете выбирать за другого игрока") + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Вы не можете выбирать за другого игрока") + await inter.response.send_message(embed=err_embed, ephemeral = True) return await ctx.edit_original_message(view=None) self.stop() @@ -270,7 +284,8 @@ class MainRimagochiModule(commands.Cog): new_animal = (await session.execute(stmt)).scalars().first() if new_animal is None: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, err_name = "Ошибка операции", ephemeral = True).out(d=f"Животное не найдено") + err_embed = self.client.ErrEmbed(title = "Ошибка операции", description = f"Животное не найдено") + await inter.response.send_message(embed=err_embed, ephemeral = True) await self.on_timeout() return @@ -290,7 +305,7 @@ class MainRimagochiModule(commands.Cog): await session.delete(new_animal) user.rimagochi_account.items = items - embed = disnake.Embed(title=f"~~{rarity['emoji']} {animal['name'].capitalize()} ({(chance*100):.02f}%)~~", description=",\n".join(f"{i} - {receiveditems[i]}" for i in receiveditems.keys()), colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"~~{rarity['emoji']} {animal['name'].capitalize()} ({(chance*100):.02f}%)~~", description=",\n".join(f"{i} - {receiveditems[i]}" for i in receiveditems.keys()), colour=0x2F3136) embed.set_thumbnail(url = "https://static.wikia.nocookie.net/rimworld/images/a/ad/Мясо.png/revision/latest?cb=20190130152311&path-prefix=ru") await ctx.edit_original_message(embed=embed) @@ -321,10 +336,10 @@ class MainRimagochiModule(commands.Cog): user = (await session.execute(stmt)).scalars().first() await ctx.response.defer(ephemeral = user.rimagochi_account.settings['hide_the_animals']) - error_helper = self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка продажи") + err_embed = self.client.ErrEmbed(err_func = ctx.edit_original_message, title = "Ошибка продажи") if not (str(item) in user.rimagochi_account.items.keys() and user.rimagochi_account.items[str(item)] >= num): - await error_helper.out(d=f"У вас недостаточно {rimagochi_items[item]['name']}") + await err_embed.send(f"У вас недостаточно {rimagochi_items[item]['name']}") return items = copy.deepcopy(user.rimagochi_account.items) items[str(item)] -= num @@ -333,7 +348,7 @@ class MainRimagochiModule(commands.Cog): history_write = self.DataBaseManager.models['transaction_history_crumbs'].m(recipient_id = ctx.author.id, amount = num * rimagochi_items[item]["sell_cost"], description = f"Продажа {rimagochi_items[item]['name']}({num} шт)") session.add(history_write) - embed = disnake.Embed(title=f"{rimagochi_items[item]['name'].capitalize()}(x{num}) продано! Вы получили {num * rimagochi_items[item]['sell_cost']} крошек", description=f"", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"{rimagochi_items[item]['name'].capitalize()}(x{num}) продано! Вы получили {num * rimagochi_items[item]['sell_cost']} крошек", description=f"", colour=0x2F3136) embed.set_thumbnail(url=ctx.author.avatar) await ctx.edit_original_message(embed=embed) @@ -351,9 +366,9 @@ class MainRimagochiModule(commands.Cog): @ShopSlash.sub_command(name="генов", description="Купите гены, чтобы улучшить ваших зверей! Информация о генах: \"/информация гены\"") async def GenesShopSub(self, ctx: disnake.AppCmdInter, - gene: int = commands.Param(description="Какой ген желаете приобрести?", name="ген", + gene_id: int = commands.Param(description="Какой ген желаете приобрести?", name="ген", choices=[disnake.OptionChoice(name=f"{i['name']} - {i['cost']} крошек", value=i['id']) for i in rimagochi_genes.values()])): - gene = rimagochi_genes[gene] + gene = rimagochi_genes[gene_id] async with self.DataBaseManager.session() as session: await self.client.RimagochiUserUpdate(member = ctx.author, session = session) @@ -366,8 +381,8 @@ class MainRimagochiModule(commands.Cog): await ctx.response.defer(ephemeral = user.rimagochi_account.settings['hide_the_animals']) if user.crumbs < gene['cost']: - error_helper = self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка покупки гена") - await error_helper.out(d=f"Для покупки этого гена необходимо иметь {gene['cost']} крошек") + err_embed = self.client.ErrEmbed(title = "Ошибка покупки гена", description = f"Для покупки этого гена необходимо иметь {gene['cost']} крошек") + await ctx.edit_original_message(err_embed) return genes = copy.deepcopy(user.rimagochi_account.genes) @@ -380,7 +395,7 @@ class MainRimagochiModule(commands.Cog): history_write = self.DataBaseManager.models['transaction_history_crumbs'].m(sender_id = ctx.author.id, amount = gene['cost'], description = f"Покупка гена \"{gene['name']}\"") session.add(history_write) - embed = disnake.Embed(title=f"Ген \"{gene['name']}\" успешно приобретён!", description=f"Описание:\n{gene['description']}", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"Ген \"{gene['name']}\" успешно приобретён!", description=f"Описание:\n{gene['description']}", colour=0x2F3136) embed.set_thumbnail(url = "https://static.wikia.nocookie.net/rimworld/images/f/fc/GeneBackground_Xenogene.png/revision/latest?cb=20221216070153&path-prefix=ru") await ctx.edit_original_message(embed=embed) @@ -452,7 +467,7 @@ class MainRimagochiModule(commands.Cog): if crumbs_amout!=0: history_write = self.DataBaseManager.models['transaction_history_crumbs'].m(sender_id = ctx.author.id, amount = crumbs_amout, description = f"Корм для " + ", ".join(feeded_animals)) session.add(history_write) - embed = disnake.Embed(title=f"Всего удалось потратить {crumbs_amout:.0f} крошек на {len(feeded_animals)} животных.", description="", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"Всего удалось потратить {crumbs_amout:.0f} крошек на {len(feeded_animals)} животных.", description="", colour=0x2F3136) stmt = self.DataBaseManager.select(self.DataBaseManager.models['rimagochi_users'].m.settings).where(self.DataBaseManager.models['rimagochi_users'].m.id == ctx.author.id) settings = (await session.execute(stmt)).scalars().first() if not settings['hide_the_animals']: embed.description = f"Покормлены:\n"+",\n".join(feeded_animals) @@ -483,13 +498,19 @@ class MainRimagochiModule(commands.Cog): async with session.begin(): user = await session.get(self.DataBaseManager.models['rimagochi_users'].m, member.id) - if user.settings['hide_the_animals'] and member != ctx.author and (not self.client.me in ctx.author.roles): - error_helper = self.client.ErrorOutHelper(send_function = ctx.response.send_message, err_name = "Ошибка инвентаря", thumbnail = member.avatar) - await error_helper.out(d=f"Пользователь {member.mention} скрыл свой инвентарь") - return + err_embed = self.client.ErrEmbed(err_func = ctx.response.send_message, title = "Ошибка инвентаря", description = f"Пользователь {member.mention} скрыл свой инвентарь") + if isinstance(ctx.author, disnake.Member): + if user.settings['hide_the_animals'] and member != ctx.author and (not self.client.me in ctx.author.roles): + await err_embed.send() + return + else: + if user.settings['hide_the_animals'] and member != ctx.author: + await err_embed.send() + return + await ctx.response.defer(ephemeral = user.settings['hide_the_animals']) - embed = disnake.Embed(title=f"", description=f"### Инвентарь {member.mention}\n", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"", description=f"### Инвентарь {member.mention}\n", colour=0x2F3136) embed.set_thumbnail(url=member.avatar) if len([i for i in user.items.keys() if user.items[i]>0]) > 0: @@ -528,14 +549,14 @@ class MainRimagochiModule(commands.Cog): user.animals.sort(key=lambda animal: animal.creation_time, reverse=True) await ctx.response.defer(ephemeral = user.settings['hide_the_animals']) - error_helper = self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка профиля", thumbnail = member.avatar) + err_embed = self.client.ErrEmbed(err_func = ctx.edit_original_message, title = "Ошибка профиля", thumbnail = member.avatar) - if user.settings['hide_the_animals'] and member != ctx.author and (not self.client.me in ctx.author.roles): - await error_helper.out(d=f"Пользователь {member.mention} скрыл свой профиль") + if user.settings['hide_the_animals'] and member != ctx.author and (isinstance(ctx.author, disnake.User) or not self.client.me in ctx.author.roles): + await err_embed.send(f"Пользователь {member.mention} скрыл свой профиль") return if len(user.animals) == 0: - await error_helper.out(d=f"Кажется, тут зверей пока нет") + await err_embed.send(f"Кажется, тут зверей пока нет") return async def AnimalsEmbeder(num: int, review = False): @@ -543,7 +564,7 @@ class MainRimagochiModule(commands.Cog): animal_data = user.animals[num-1] animal = rimagochi_animals[animal_data.model_animal_id] - embed = disnake.Embed(title=f"Инвентарь {member.name}", description=f"\n### {animal['params']['rarity']['emoji']} {animal['name'].capitalize()}", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"Инвентарь {member.name}", description=f"\n### {animal['params']['rarity']['emoji']} {animal['name'].capitalize()}", colour=0x2F3136) embed.set_footer(text = f"id: {animal_data.id}") embed.set_thumbnail(url=animal['params']['image_url']) animal = copy.deepcopy(animal) @@ -604,7 +625,7 @@ class MainRimagochiModule(commands.Cog): return animal, animal_data, user.settings async def feed_animal(inter, animal, animal_id, food = None): - error_helper = self.client.ErrorOutHelper(send_function = inter.response.send_message, err_name = "Ошибка инвентаря", ephemeral=True) + err_embed = self.client.ErrEmbed(err_func = inter.response.send_message, err_func_kwargs = {'ephemeral': True}, title = "Ошибка инвентаря") async with self.DataBaseManager.session() as session: async with session.begin(): stmt = self.DataBaseManager.select(rimagochi_users_model).options( @@ -618,11 +639,11 @@ class MainRimagochiModule(commands.Cog): animal = copy.deepcopy(animal) if animal_data.feed_today_count >= 4 and (now() - animal_data.first_today_feed_time) < (24 * 60 * 60): - await error_helper.out(d=f"Вы уже покормили своего зверя 4 раза за сегодня, обновление лимитов будет ") + await err_embed.send(f"Вы уже покормили своего зверя 4 раза за сегодня, обновление лимитов будет ") return if (now() - animal_data.last_feeding_time) < (3 * 60 * 60): - await error_helper.out(d=f"Следующий раз можно покормить ") + await err_embed.send(f"Следующий раз можно покормить ") return genes = [] @@ -638,14 +659,14 @@ class MainRimagochiModule(commands.Cog): if food: items = copy.deepcopy(rimagochi_user.items) if (not str(food['id']) in items.keys()) or items[str(food['id'])] < hunger / 10: - await error_helper.out(d=f"У вас недостаточно {food['name']}") + await err_embed.send(f"У вас недостаточно {food['name']}") return items[str(food['id'])] = items[str(food['id'])] - hunger / 10 rimagochi_user.items = items else: if rimagochi_user.user.crumbs < hunger: - await error_helper.out(d=f"У вас недостаточно крошек") + await err_embed.send(f"У вас недостаточно крошек") return rimagochi_user.user.crumbs -= hunger @@ -661,7 +682,7 @@ class MainRimagochiModule(commands.Cog): animal_data.last_feeding_time = now() animal_data.experience, animal_data.level, remains = self.client.AnimalLevelAdder(animal_data.experience+100, animal_data.level) - embed = disnake.Embed(description=f"{animal['name'].capitalize()} покормлен, до следующего уровня ему осталось всего {remains} опыта", title=f"", colour=0x2F3136) + embed = self.client.InfoEmbed(description=f"{animal['name'].capitalize()} покормлен, до следующего уровня ему осталось всего {remains} опыта", title=f"", colour=0x2F3136) await inter.response.send_message(embed = embed, ephemeral=True) nonlocal user @@ -714,7 +735,8 @@ class MainRimagochiModule(commands.Cog): @disnake.ui.button(label="Покормить", style=disnake.ButtonStyle.success, row=1) async def feed_modal(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): if member != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, ephemeral=True).out(n="Ошибка доступа", d=f"Нельзя кормить чужих животных!!!") + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Нельзя кормить чужих животных!!!") + await inter.response.send_message(embed=err_embed, ephemeral=True) return if len(self.animal["params"]["can_eate"])==0 or self.settings['always_use_crumbs_for_feeding']: await feed_animal(inter, self.animal, self.animal_data.id) @@ -728,7 +750,8 @@ class MainRimagochiModule(commands.Cog): @disnake.ui.button(label="Забить", style=disnake.ButtonStyle.danger, row=1) async def kill_button(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): if member != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, ephemeral=True).out(n="Ошибка доступа", d=f"Нельзя убивать чужих животных!!!") + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Нельзя убивать чужих животных!!!") + await inter.response.send_message(embed=err_embed, ephemeral=True) return await inter.response.defer() self.stop() @@ -741,16 +764,17 @@ class MainRimagochiModule(commands.Cog): super().__init__(timeout = 60) self.add_item(disnake.ui.Button(label="Забить!!!", style=disnake.ButtonStyle.danger, custom_id="accept")) self.add_item(disnake.ui.Button(label="Нет, отменяй", style=disnake.ButtonStyle.success, custom_id="reject")) - async def interaction_check(self, inter): - if member != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, ephemeral=True).out(n="Ошибка доступа", d=f"Нельзя убивать чужих животных!!!") - return - if inter.data.custom_id == "accept": + async def interaction_check(self, interaction): + if member != interaction.author: + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Нельзя убивать чужих животных!!!") + await interaction.response.send_message(embed=err_embed, ephemeral=True) + return True + if interaction.data.custom_id == "accept": async with self.DataBaseManager.session() as session: async with session.begin(): animal = await session.get(rimagochi_animals_model, self.animal_data.id, with_for_update = True) if animal is None: - return + return True await session.delete(animal) user = await session.get(rimagochi_users_model, member.id, with_for_update = True) @@ -764,27 +788,29 @@ class MainRimagochiModule(commands.Cog): items[str(item['item']['id'])] += receive user.items = items - embed = disnake.Embed(title=f"~~{self.animal['name'].capitalize()}~~", description=",\n".join(f"{i} - {receiveditems[i]}" for i in receiveditems.keys()), colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"~~{self.animal['name'].capitalize()}~~", description=",\n".join(f"{i} - {receiveditems[i]}" for i in receiveditems.keys()), colour=0x2F3136) embed.set_thumbnail(url = "https://static.wikia.nocookie.net/rimworld/images/a/ad/Мясо.png/revision/latest?cb=20190130152311&path-prefix=ru") await ctx.edit_original_message(embed=embed, view=None) - if inter.data.custom_id == "reject": - await inter.response.defer() - embed = disnake.Embed(title=f"", description=f"В этот раз {self.animal['name']} остался в живых", colour=0x2F3136) + if interaction.data.custom_id == "reject": + await interaction.response.defer() + embed = self.client.InfoEmbed(title=f"", description=f"В этот раз {self.animal['name']} остался в живых", colour=0x2F3136) await ctx.edit_original_message(embed=embed, view=None) self.stop() + return False async def on_timeout(self): - embed = disnake.Embed(title=f"Выбор не сделан", description=f"В этот раз {self.animal['name']} остался в живых", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"Выбор не сделан", description=f"В этот раз {self.animal['name']} остался в живых", colour=0x2F3136) await ctx.edit_original_message(embed=embed, view=None) - embed = disnake.Embed(title=f"Вы вменяемы?", description=f"{self.animal['name']} умрёт и вы потеряете все гены и опыт с него!!!", colour=0x2F3136) + embed = self.client.WarnEmbed(title=f"Вы вменяемы?", description=f"{self.animal['name']} умрёт и вы потеряете все гены и опыт с него!!!", colour=0x2F3136) await ctx.edit_original_message(embed=embed, view=MixedView()) @disnake.ui.button(label = ".", style=disnake.ButtonStyle.primary, row=1) async def battle_button(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): if member != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, ephemeral=True).out(n="Ошибка доступа", d=f"Вы не можете управлять чужим отрядом") + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Вы не можете управлять чужим отрядом") + await inter.response.send_message(embed=err_embed, ephemeral=True) return async with self.DataBaseManager.session() as session: async with session.begin(): @@ -805,7 +831,7 @@ class MainRimagochiModule(commands.Cog): else: if busy_battle_slots + self.animal['params']['required_slots'] > rimagochi_constants['max_battle_slots']: - embed = disnake.Embed(title=f"у вас нет столько свободного места в отряде!!!", description=f"", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"у вас нет столько свободного места в отряде!!!", description=f"", colour=0x2F3136) await inter.response.send_message(embed=embed, ephemeral=True) return animal_data.in_battle_slots = True @@ -827,7 +853,8 @@ class MainRimagochiModule(commands.Cog): @disnake.ui.button(label="Применить ген", style=disnake.ButtonStyle.primary, row=1) async def apply_genes_button(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): if member != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, ephemeral=True).out(n="Ошибка доступа", d=f"Вы не можете управлять чужим отрядом") + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Вы не можете управлять чужим отрядом") + await inter.response.send_message(embed=err_embed, ephemeral=True) return class ApplyGenesView(disnake.ui.View): client = self.client @@ -844,8 +871,11 @@ class MainRimagochiModule(commands.Cog): )) async def interaction_check(self, interaction: disnake.MessageInteraction): if member != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, ephemeral=True).out(n="Ошибка доступа", d=f"Вы не можете управлять чужим отрядом") - return + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Вы не можете управлять чужим отрядом") + await inter.response.send_message(embed=err_embed, ephemeral=True) + return True + if interaction.data.values is None: + raise ValueError("rimagochi.py: interaction.data.values None type") selected_value = interaction.data.values[0] async with self.DataBaseManager.session() as session: @@ -856,8 +886,9 @@ class MainRimagochiModule(commands.Cog): suitable_genes = [i for i in rimagochi_user.genes.keys() if (not int(i) in animal_data.genes) and rimagochi_user.genes[i] > 0] if not selected_value in suitable_genes: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, ephemeral=True).out(n="Ошибка применения генов", d="У вас больше нет этого гена или ген уже был применён") - return + err_embed = self.client.ErrEmbed(title = "Ошибка применения генов", description = "У вас больше нет этого гена или ген уже был применён") + await inter.response.send_message(embed=err_embed, ephemeral=True) + return True animal_genes = copy.deepcopy(self.animal_data.genes) animal_genes.append(int(selected_value)) @@ -869,12 +900,14 @@ class MainRimagochiModule(commands.Cog): suitable_genes.remove(selected_value) - embed = disnake.Embed(title=f"", description=f"В животное `{self.animal['name']}` успешно вставлен ген {rimagochi_genes[int(selected_value)]['name']}", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"", description=f"В животное `{self.animal['name']}` успешно вставлен ген {rimagochi_genes[int(selected_value)]['name']}", colour=0x2F3136) await interaction.response.send_message(embed = embed, ephemeral=True) if len(suitable_genes) != 0: await ctx.edit_original_message(view=ApplyGenesView(suitable_genes)) else: await ctx.edit_original_message(view=None) + + return False async def on_timeout(self): await ctx.edit_original_message(view=None) @@ -887,18 +920,20 @@ class MainRimagochiModule(commands.Cog): suitable_genes = [i for i in rimagochi_user.genes.keys() if (not int(i) in animal_data.genes) and rimagochi_user.genes[i] > 0] if len(suitable_genes) == 0: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, ephemeral=True).out(n="Ошибка применения генов", d=f"У вас пока нет генов, которые можно применить на {self.animal['name']}") + err_embed = self.client.ErrEmbed(title = "Ошибка применения генов", description = f"У вас пока нет генов, которые можно применить на {self.animal['name']}") + await inter.response.send_message(embed=err_embed, ephemeral=True) return self.stop() await inter.response.defer() - embed = disnake.Embed(title=f"Какие гены хотите применить на животное {self.animal['name']}?", description=f"Будьте внимательны, вернуть использованные генопаки уже не выйдет", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"Какие гены хотите применить на животное {self.animal['name']}?", description=f"Будьте внимательны, вернуть использованные генопаки уже не выйдет", colour=0x2F3136) await ctx.edit_original_message(embed=embed, view=ApplyGenesView(suitable_genes)) @disnake.ui.button(label="<", style=disnake.ButtonStyle.secondary, row=2) async def backward_button(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): if ctx.author != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, ephemeral=True).out(n="Ошибка доступа", d=f"Вы не можете управлять чужим инвентарём") + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Вы не можете управлять чужим инвентарём") + await inter.response.send_message(embed=err_embed, ephemeral=True) return await inter.response.defer() self.page = max(self.page-1, 1) @@ -909,7 +944,8 @@ class MainRimagochiModule(commands.Cog): @disnake.ui.button(label=">", style=disnake.ButtonStyle.secondary, row=2) async def forward_button(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): if ctx.author != inter.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, ephemeral=True).out(n="Ошибка доступа", d=f"Вы не можете управлять чужим инвентарём") + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Вы не можете управлять чужим инвентарём") + await inter.response.send_message(embed=err_embed, ephemeral=True) return await inter.response.defer() self.page = min(self.page+1, self.max_page) @@ -949,9 +985,10 @@ class MainRimagochiModule(commands.Cog): name="ставка"), member: disnake.Member = commands.Param(description="Кому хотите бросить вызов?", name="игрок", default=None)): - error_helper = self.client.ErrorOutHelper(send_function = ctx.response.send_message, err_name = "Ошибка вызова", ephemeral = True) + + err_embed = self.client.ErrEmbed(err_func = ctx.response.send_message, err_func_kwargs = {'ephemeral': True}, title = "Ошибка вызова") if ctx.author == member: - await error_helper.out(d=f"Нельзя бросить вызов самому себе") + await err_embed.send(f"Нельзя бросить вызов самому себе") return rimagochi_users_model = self.DataBaseManager.models['rimagochi_users'].m @@ -965,15 +1002,15 @@ class MainRimagochiModule(commands.Cog): author_user = (await session.execute(stmt)).scalars().first() if author_user.user.crumbs < bet: - await error_helper.out(d=f"Вам не хватает крошек на такую ставку") + await err_embed.send(f"Вам не хватает крошек на такую ставку") return if len(author_user.battle_slots_animals)==0: - await error_helper.out(d=f"У вас нет экипированных зверей") + await err_embed.send(f"У вас нет экипированных зверей") return if not author_user.settings['accept_the_challenge']: - await error_helper.out(d=f"Чтобы бросить вызов, у вас должна быть включена настройка 'получать вызовы'") + await err_embed.send(f"Чтобы бросить вызов, у вас должна быть включена настройка 'получать вызовы'") return if not member is None: @@ -984,19 +1021,19 @@ class MainRimagochiModule(commands.Cog): member_user = (await session.execute(stmt)).scalars().first() if member_user is None: - await error_helper.out(d=f"У этого пользователя пока нет профиля") + await err_embed.send(f"У этого пользователя пока нет профиля") return if member_user.user.crumbs < bet: - await error_helper.out(d=f"Вашему оппоненту не хватает крошек на такую ставку") + await err_embed.send(f"Вашему оппоненту не хватает крошек на такую ставку") return if len(member_user.battle_slots_animals)==0: - await error_helper.out(d=f"У вашего оппонента нет экипированных зверей") + await err_embed.send(f"У вашего оппонента нет экипированных зверей") return if not member_user.settings['accept_the_challenge']: - await error_helper.out(d=f"Этот пользователь не принимает вызовы") + await err_embed.send(f"Этот пользователь не принимает вызовы") return class ButtonsView(disnake.ui.View): @@ -1011,13 +1048,14 @@ class MainRimagochiModule(commands.Cog): @disnake.ui.button(label="Принять вызов", style=disnake.ButtonStyle.success, row=1) async def take_challenge(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): - error_helper = self.client.ErrorOutHelper(send_function = inter.response.send_message, err_name = "Ошибка", ephemeral = True) + + err_embed = self.client.ErrEmbed(err_func = inter.response.send_message, err_func_kwargs = {'ephemeral': True}, title = "Ошибка вызова") if self.member: if self.member != inter.author: - await error_helper.out(d=f"Этот вызов был брошен не вам, к сожалению, вы не сможете его принять") + await err_embed.send(f"Этот вызов был брошен не вам, к сожалению, вы не сможете его принять") return elif inter.author == self.author: - await error_helper.out(d=f"Вы не можете принять свой же вызов!!!") + await err_embed.send(f"Вы не можете принять свой же вызов!!!") return else: self.member = inter.author @@ -1037,26 +1075,27 @@ class MainRimagochiModule(commands.Cog): member_user = (await session.execute(stmt)).scalars().first() if member_user is None: - await error_helper.out(d=f"У вас пока нет профиля, напишите хотя бы одно сообщение") + await err_embed.send(f"У вас пока нет профиля, напишите хотя бы одно сообщение") return if not member_user.settings['accept_the_challenge']: - await error_helper.out(d=f"Чтобы принять вызов, у вас должна быть включена настройка 'получать вызовы'") + await err_embed.send(f"Чтобы принять вызов, у вас должна быть включена настройка 'получать вызовы'") return if member_user.user.crumbs < self.bet: - await error_helper.out(d=f"Вам не хватает крошек, чтобы принять этот вызов") + await err_embed.send(f"Вам не хватает крошек, чтобы принять этот вызов") return if len([animal for animal in member_user.animals if animal.in_battle_slots]) == 0: - await error_helper.out(d=f"У вас нет экипированных зверей") + await err_embed.send(f"У вас нет экипированных зверей") return self.stop() await ctx.edit_original_message("", view = None) if author_user.user.crumbs < self.bet: - await self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка").out(d=f"{self.author.mention} не хватает крошек на ставку, бой отменяется") + err_embed = self.client.ErrEmbed(title = err_embed.title, description = f"{self.author.mention} не хватает крошек на ставку, бой отменяется") + await ctx.edit_original_message(embed=err_embed) return players_list = [self.author, self.member] @@ -1083,11 +1122,11 @@ class MainRimagochiModule(commands.Cog): await inter.response.defer() for i in range(10, 0, -1): - embed = disnake.Embed(title=f"", description=f"### Вызов принят {self.member.mention}\nИдёт подсчёт сил и рассчёт победителя...\n-# Результат будет через {i} секунд", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"", description=f"### Вызов принят {self.member.mention}\nИдёт подсчёт сил и рассчёт победителя...\n-# Результат будет через {i} секунд", colour=0x2F3136) embed.set_thumbnail(url="https://media.discordapp.net/attachments/887735863734313000/1357768401195634728/confused-cat-confused.gif?ex=67f167dc&is=67f0165c&hm=bebc160fac83107c143b93c825b926cbf83caf9d5eb56535c4c11ada09e57103&=") await ctx.edit_original_message(embed=embed) await asyncio.sleep(1) - embed = disnake.Embed(title=f"", description=f"### Победил {players_list[chosen_player].mention}!\n\nИздалека все могли видеть сражающихся животных:\n" + embed = self.client.InfoEmbed(title=f"", description=f"### Победил {players_list[chosen_player].mention}!\n\nИздалека все могли видеть сражающихся животных:\n" f"На стороне {self.author.mention}: {', '.join(rimagochi_animals[animal.model_animal_id]['name'] for animal in author_user.animals if animal.in_battle_slots)}\n" f"На стороне {self.member.mention}: {', '.join(rimagochi_animals[animal.model_animal_id]['name'] for animal in member_user.animals if animal.in_battle_slots)}", colour=0x2F3136) embed.set_thumbnail(url=players_list[chosen_player].avatar) @@ -1096,19 +1135,20 @@ class MainRimagochiModule(commands.Cog): @disnake.ui.button(label="Отменить вызов", style=disnake.ButtonStyle.danger, row=1) async def off_challenge(self, button: disnake.ui.Button, inter: disnake.MessageInteraction): if inter.author != self.author: - await self.client.ErrorOutHelper(send_function = inter.response.send_message, err_name = "Ошибка доступа", ephemeral = True).out(d=f"Отменить этот вызов может только {self.author.mention}") + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = f"Отменить этот вызов может только {self.author.mention}") + await inter.response.send_message(embed=err_embed, ephemeral = True) return - embed = disnake.Embed(title=f"", description=f"### {self.author.mention} отменил вызов на бой", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"", description=f"### {self.author.mention} отменил вызов на бой", colour=0x2F3136) embed.set_thumbnail(url=self.author.avatar) self.stop() await ctx.edit_original_message("", embed = embed, view = None) async def on_timeout(self): - embed = disnake.Embed(title=f"", description=f"\n### Вызов от {ctx.author.mention}(просрочено)\nВы уже не можете принять вызов, нажав на кнопку ниже.\n-# Ставка `{bet}` крошек", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"", description=f"\n### Вызов от {ctx.author.mention}(просрочено)\nВы уже не можете принять вызов, нажав на кнопку ниже.\n-# Ставка `{bet}` крошек", colour=0x2F3136) embed.set_thumbnail(url=ctx.author.avatar) await ctx.edit_original_message(embed=embed, view=None) - embed = disnake.Embed(title=f"", description=f"### Вызов от {ctx.author.mention}\nВы можете принять вызов, нажав на кнопку ниже!\n-# Ставка `{bet}` крошек", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"", description=f"### Вызов от {ctx.author.mention}\nВы можете принять вызов, нажав на кнопку ниже!\n-# Ставка `{bet}` крошек", colour=0x2F3136) embed.set_thumbnail(url=ctx.author.avatar) await ctx.response.send_message(f"{member.mention}" if member else None, embed=embed, view = ButtonsView(ctx.author, member, bet)) @@ -1124,7 +1164,8 @@ class MainRimagochiModule(commands.Cog): async def InformationSubGroup(self, ctx: disnake.AppCmdInter): pass - async def animal_autocomplete(inter: disnake.ApplicationCommandInteraction, user_input: str): + @staticmethod + async def animal_autocomplete(interaction: disnake.ApplicationCommandInteraction, user_input: str): animals = [ animal["name"] for animal in rimagochi_animals.values() @@ -1134,41 +1175,42 @@ class MainRimagochiModule(commands.Cog): @InformationSubGroup.sub_command(description="Показывает информацию о выбранном животном", name="животные") async def RimagochiBestiarySub(self, ctx: disnake.AppCmdInter, - animal: str = commands.Param(description="Название животного или его ID", name="животное", + animal_str: str = commands.Param(description="Название животного или его ID", name="животное", autocomplete=animal_autocomplete)): matches = {} - animal = animal.lower() + animal_formated = animal_str.lower() finded_flag = False - if animal.isnumeric() and int(animal) in rimagochi_animals.keys(): - animal = rimagochi_animals[int(animal)] + animal = {} + if animal_formated.isnumeric() and int(animal_formated) in rimagochi_animals.keys(): + animal = rimagochi_animals[int(animal_formated)] finded_flag = True else: for key, value in rimagochi_animals.items(): - if animal in value['name'].lower(): + if animal_formated in value['name'].lower(): matches.setdefault(key, value['name']) - if animal == value['name'].lower(): + if animal_formated == value['name'].lower(): animal = rimagochi_animals[key] finded_flag = True break if (not finded_flag) and (not matches): for key, value in rimagochi_animals.items(): - if animal in value['description'].lower(): + if animal_formated in value['description'].lower(): matches.setdefault(key, value['name']) if len(matches)==1 and (not finded_flag): animal = rimagochi_animals[list(matches.keys())[0]] finded_flag = True if not finded_flag and len(matches)==0: - embed = disnake.Embed(title=f"", description=f"Мы искали как могли, но не смогли найти такого зверя", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"", description=f"Мы искали как могли, но не смогли найти такого зверя", colour=0x2F3136) await ctx.response.send_message(embed = embed) return elif not finded_flag: - embed = disnake.Embed(title=f"", description=f"Мы нашли много совпадений, но ничего конкретного, уточните запрос\n-# Найдено совпадений: {', '.join([i for i in matches.values()])}", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"", description=f"Мы нашли много совпадений, но ничего конкретного, уточните запрос\n-# Найдено совпадений: {', '.join([i for i in matches.values()])}", colour=0x2F3136) await ctx.response.send_message(embed = embed) return await ctx.response.defer() - embed = disnake.Embed(title=f"{animal['name'].capitalize()}", description=f"{animal['description']}", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"{animal['name'].capitalize()}", description=f"{animal['description']}", colour=0x2F3136) embed.set_thumbnail(url = animal['params']['image_url']) embed.set_footer(text = f"id: {animal['id']}") embed.add_field(name=f"Редкость:", @@ -1199,12 +1241,12 @@ class MainRimagochiModule(commands.Cog): @InformationSubGroup.sub_command(description="Показывает информацию о выбранном предмете", name="предметы") async def RimagochiItemsInfoSub(self, ctx: disnake.AppCmdInter, - item: str = commands.Param(description="Название предмета", + item_id: str = commands.Param(description="Название предмета", name="предмет", choices=[disnake.OptionChoice(name=f"{i['name']}", value=str(i['id'])) for i in rimagochi_items.values()])): - item = rimagochi_items[int(item)] + item = rimagochi_items[int(item_id)] await ctx.response.defer() - embed = disnake.Embed(title=f"{item['name'].capitalize()}", description=f"{item['description']}", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"{item['name'].capitalize()}", description=f"{item['description']}", colour=0x2F3136) embed.set_footer(text = f"id: {item['id']}") embed.add_field(name=f"Основные характеристики".center(40, '-'),value=f"",inline=False) embed.add_field(name=f"Стоимость при продаже:", @@ -1221,12 +1263,12 @@ class MainRimagochiModule(commands.Cog): @InformationSubGroup.sub_command(description="Показывает информацию о выбранном генопаке", name="генопаки") async def RimagochiGenesInfoSub(self, ctx: disnake.AppCmdInter, - gene: str = commands.Param(description="Название гена", + gene_id: str = commands.Param(description="Название гена", name="ген", choices=[disnake.OptionChoice(name=f"{i['name']}", value=str(i['id'])) for i in rimagochi_genes.values()])): - gene = rimagochi_genes[int(gene)] + gene = rimagochi_genes[int(gene_id)] await ctx.response.defer() - embed = disnake.Embed(title=f"{gene['name'].capitalize()}", description=f"{gene['description']}", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"{gene['name'].capitalize()}", description=f"{gene['description']}", colour=0x2F3136) embed.set_footer(text = f"id: {gene['id']}") embed.set_thumbnail(url = "https://static.wikia.nocookie.net/rimworld/images/f/fc/GeneBackground_Xenogene.png/revision/latest?cb=20221216070153&path-prefix=ru") @@ -1234,12 +1276,12 @@ class MainRimagochiModule(commands.Cog): @InformationSubGroup.sub_command(description="Показывает информацию о выбранной капсуле криптосна", name="капсулы") async def RimagochiCapsuleInfoSub(self, ctx: disnake.AppCmdInter, - capsule: str = commands.Param(description="Название капсулы", + capsule_id: str = commands.Param(description="Название капсулы", name="капсула", choices=[disnake.OptionChoice(name=f"{i['name']}", value=str(i['id'])) for i in rimagochi_capsules.values()])): - capsule = rimagochi_capsules[int(capsule)] + capsule = rimagochi_capsules[int(capsule_id)] await ctx.response.defer() - embed = disnake.Embed(title=f"{capsule['name'].capitalize()}", description=f"Цена: {capsule['cost']}", colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"{capsule['name'].capitalize()}", description=f"Цена: {capsule['cost']}", colour=0x2F3136) embed.set_footer(text = f"id: {capsule['id']}") for i in capsule['chances']: embed.add_field(name=f"",value=f"{i['rarity']['emoji']} {i['rarity']['name']} - {i['chance']*100:.02f}%",inline=False) diff --git a/src/cogs/roles.py b/src/cogs/roles.py index ac8b41a..e290d12 100644 --- a/src/cogs/roles.py +++ b/src/cogs/roles.py @@ -1,4 +1,5 @@ +import logging import disnake from disnake.ext import commands from disnake.ext import tasks @@ -32,7 +33,7 @@ class MainRolesModule(commands.Cog): @commands.Cog.listener() async def on_ready(self): - print(f'KrekFunBot roles module activated') + logging.info(f'KrekFunBot roles module activated') krekchat = await self.client.fetch_guild(constants["krekchat"]) self.me = disnake.utils.get(krekchat.roles, id=constants["me"]) @@ -50,9 +51,9 @@ class MainRolesModule(commands.Cog): description="цвет роли (указывается в hex формате, например: #ff9900)", name="цвет", default=0xff9900)): await ctx.response.defer() - error_helper = self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка создания роли") - if ctx.guild is None: - await error_helper.out(d="Эта команда не работает в личных сообщениях!") + err_embed = self.client.ErrEmbed(err_func = ctx.edit_original_message, title = "Ошибка создания роли") + if ctx.guild is None or not isinstance(ctx.author, disnake.Member): + await err_embed.send("Эта команда не работает в личных сообщениях!") return async with self.DataBaseManager.session() as session: await self.client.UserUpdate(member = ctx.author, session = session) @@ -65,7 +66,7 @@ class MainRolesModule(commands.Cog): custom_role = (await session.execute(stmt)).scalars().first() if not custom_role is None: - await error_helper.out(d=f'Вы уже владеете кастомной ролью') + await err_embed.send(f'Вы уже владеете кастомной ролью') return krekchat = await self.client.fetch_guild(constants["krekchat"]) @@ -73,24 +74,24 @@ class MainRolesModule(commands.Cog): borderbottom = krekchat.get_role(1221400071908753480) if not (100 < cost < 2147483647): - await error_helper.out(d=f"Минимальная стоимость: 100 крошек") + await err_embed.send(f"Минимальная стоимость: 100 крошек") return if disnake.utils.get(ctx.guild.roles, name=name): - await error_helper.out(d=f"Роль с таким названием уже есть на сервере") + await err_embed.send(f"Роль с таким названием уже есть на сервере") return stmt = self.DataBaseManager.select(self.DataBaseManager.func.count()).select_from(roles_custom_model) count = (await session.execute(stmt)).scalars().first() if count >= 50: - await error_helper.out(d=f"На сервере сейчас максимальное количество кастомных ролей ({count}), попробуйте позже") + await err_embed.send(f"На сервере сейчас максимальное количество кастомных ролей ({count}), попробуйте позже") return async with session.begin(): stmt = self.DataBaseManager.select(users_model).where(users_model.id == ctx.author.id).with_for_update() user = (await session.execute(stmt)).scalars().first() if user.crumbs < self.costrolecreate: - await error_helper.out(d=f"Для создания роли необходимо заплатить {self.costrolecreate} крошек, а у вас есть только {round(user.crumbs)}") + await err_embed.send(f"Для создания роли необходимо заплатить {self.costrolecreate} крошек, а у вас есть только {round(user.crumbs)}") return role = await ctx.guild.create_role(name=name, colour=colour) @@ -105,7 +106,7 @@ class MainRolesModule(commands.Cog): await session.flush() received_role_custom = received_roles_custom_model(role_id = role.id, user_id = ctx.author.id) session.add(received_role_custom) - await ctx.edit_original_message(embed=disnake.Embed( + await ctx.edit_original_message(embed=self.client.InfoEmbed( title=f"Роль успешно создана! Вы можете проверить её статус или поменять настройки через команду /изменить роль", description=f'', colour=0x2F3136)) @@ -118,7 +119,8 @@ class MainRolesModule(commands.Cog): role: disnake.Role = commands.Param(description="О какой роли хотите получить информацию?", name="роль", default=None)): await ctx.response.defer() - error_helper = self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка") + err_embed = self.client.ErrEmbed(err_func = ctx.edit_original_message, title = "Ошибка") + krekchat = await self.client.fetch_guild(constants["krekchat"]) roles_custom_model = self.DataBaseManager.model_classes['roles_custom'] roles_static_model = self.DataBaseManager.model_classes['roles_static'] @@ -129,18 +131,18 @@ class MainRolesModule(commands.Cog): stmt = self.DataBaseManager.select(roles_custom_model).options(self.DataBaseManager.selectinload(roles_custom_model.users)).where(roles_custom_model.creator_id == ctx.author.id) custom_role = (await session.execute(stmt)).scalars().first() if custom_role is None: - await error_helper.out(d=f'Вы не создавали кастомных ролей.\nЧтобы получить информацию о статичной роли, введите целевую роль в поле "роль" при вызове команды "/роль инфо"') + await err_embed.send(f'Вы не создавали кастомных ролей.\nЧтобы получить информацию о статичной роли, введите целевую роль в поле "роль" при вызове команды "/роль инфо"') return role = krekchat.get_role(custom_role.id) if role is None: - await error_helper.out(d=f'Вашей роли нет на сервере, вероятно, произошла ошибка, обратитесь к администратору') + await err_embed.send(f'Вашей роли нет на сервере, вероятно, произошла ошибка, обратитесь к администратору') return else: stmt = self.DataBaseManager.select(roles_static_model).where(roles_static_model.id == role.id) static_role = (await session.execute(stmt)).scalars().first() if not static_role is None: - embed = disnake.Embed(title=f"", description=f'### Информация о статичной роли {role.mention}', colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"", description=f'### Информация о статичной роли {role.mention}', colour=0x2F3136) embed.add_field(name=f"Описание", value=f"> {static_role.description}", inline=True) await ctx.edit_original_message(embed=embed) return @@ -148,10 +150,10 @@ class MainRolesModule(commands.Cog): stmt = self.DataBaseManager.select(roles_custom_model).options(self.DataBaseManager.selectinload(roles_custom_model.users)).where(roles_custom_model.id == role.id) custom_role = (await session.execute(stmt)).scalars().first() if custom_role is None: - await error_helper.out(d=f'Описания этой роли пока не существует.') + await err_embed.send(f'Описания этой роли пока не существует.') return - embed = disnake.Embed(title=f"", description=f'### Информация о кастомной роли {role.mention}', colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"", description=f'### Информация о кастомной роли {role.mention}', colour=0x2F3136) embed.add_field(name=f"Время продления", value=f"> ", inline=True) embed.add_field(name=f"Цена продления", value=f"> {constants['costrolerenewal']}", inline=True) embed.add_field(name=f"", value=f"", inline=False) @@ -172,10 +174,10 @@ class MainRolesModule(commands.Cog): @RoleChangeSlash.sub_command(description="Позволяет изменить вашу роль", name="роль") async def RoleChangeSub(self, ctx: disnake.AppCmdInter): await ctx.response.defer() - error_helper = self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка изменения роли") + err_embed = self.client.ErrEmbed(err_func = ctx.edit_original_message, title = "Ошибка изменения роли") if ctx.guild is None: - await error_helper.out(d="Эта команда не работает в личных сообщениях!") + await err_embed.send("Эта команда не работает в личных сообщениях!") return krekchat = await self.client.fetch_guild(constants["krekchat"]) @@ -193,8 +195,8 @@ class MainRolesModule(commands.Cog): @disnake.ui.button(label="Стоимость", custom_id="cost", style=disnake.ButtonStyle.blurple) async def cost(self, button, inter): if inter.author != self.ctx.author: - error = self.client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете редактировать эту роль", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете редактировать эту роль") + await inter.send(embed=err_embed, ephemeral = True) return modal = ActionModal(self.role, self.ctx, self.embed, "cost") await inter.response.send_modal(modal) @@ -202,8 +204,8 @@ class MainRolesModule(commands.Cog): @disnake.ui.button(label="Цвет", custom_id="color", style=disnake.ButtonStyle.blurple) async def color(self, button, inter): if inter.author != self.ctx.author: - error = self.client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете редактировать эту роль", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете редактировать эту роль") + await inter.send(embed=err_embed, ephemeral = True) return modal = ActionModal(self.role, self.ctx, self.embed, "color") await inter.response.send_modal(modal) @@ -211,8 +213,8 @@ class MainRolesModule(commands.Cog): @disnake.ui.button(label="Название", custom_id="name", style=disnake.ButtonStyle.blurple) async def name(self, button, inter): if inter.author != self.ctx.author: - error = self.client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете редактировать эту роль", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете редактировать эту роль") + await inter.send(embed=err_embed, ephemeral = True) return modal = ActionModal(self.role, self.ctx, self.embed, "name") await inter.response.send_modal(modal) @@ -220,8 +222,8 @@ class MainRolesModule(commands.Cog): @disnake.ui.button(label="Иконку", custom_id="icon", style=disnake.ButtonStyle.blurple) async def icon(self, button, inter): if inter.author != self.ctx.author: - error = self.client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете редактировать эту роль", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете редактировать эту роль") + await inter.send(embed=err_embed, ephemeral = True) return modal = ActionModal(self.role, self.ctx, self.embed, "icon") await inter.response.send_modal(modal) @@ -234,11 +236,13 @@ class MainRolesModule(commands.Cog): class ActionModal(disnake.ui.Modal): DataBaseManager = self.DataBaseManager + client = self.client def __init__(self, role, ctx, embed, operation): self.role = role self.ctx = ctx self.embed = embed self.operation = operation + components = [] if operation == "name": components = [ disnake.ui.TextInput(label="Новое название", placeholder="Например: abc", custom_id="name", @@ -262,9 +266,10 @@ class MainRolesModule(commands.Cog): super().__init__(title=operation, components=components, timeout=300) - async def callback(self, interaction: disnake.Interaction): + async def callback(self, interaction: disnake.ModalInteraction): ctx = self.ctx - error_helper.send_function = interaction.send + err_embed = self.client.ErrEmbed(err_func = interaction.send, title = "Ошибка изменения роли") + async with self.DataBaseManager.session() as session: key, value, = list(interaction.text_values.items())[0] await interaction.response.defer(ephemeral=True) @@ -276,7 +281,7 @@ class MainRolesModule(commands.Cog): if self.operation == "cost": cost = abs(int(value)) if not 100 < cost < 2147483647: - await error_helper.out(d = "Нельзя ставить стоимость роли меньше 100") + await err_embed.send("Нельзя ставить стоимость роли меньше 100") return async with session.begin(): async with self.DataBaseManager.models['roles_custom'] as roles_custom_model: @@ -286,47 +291,47 @@ class MainRolesModule(commands.Cog): image_url = value TRUSTED_DOMAINS = ["imgur.com", "cdn.discordapp.com", "i.imgur.com"] if ctx.guild.premium_tier < 2: - await error_helper.out(d = "Этот сервер должен быть уровня 2 буста для изменения иконок ролей") + await err_embed.send("Этот сервер должен быть уровня 2 буста для изменения иконок ролей") return if not any(domain in image_url for domain in TRUSTED_DOMAINS): - await error_helper.out(d = "Загрузка изображений разрешена только с ресурса https://imgur.com/") + await err_embed.send("Загрузка изображений разрешена только с ресурса https://imgur.com/") return if not image_url.lower().endswith((".png", ".jpg", ".jpeg")): - await error_helper.out(d = "Разрешены только файлы с расширением .png, .jpg или .jpeg") + await err_embed.send("Разрешены только файлы с расширением .png, .jpg или .jpeg") return - async with aiohttp.ClientSession() as session: + async with aiohttp.ClientSession() as http_session: try: headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } - async with session.get(image_url, headers=headers) as resp: + async with http_session.get(image_url, headers=headers) as resp: if resp.status != 200: - await error_helper.out(d = "Не удалось загрузить изображение") + await err_embed.send("Не удалось загрузить изображение") return content_type = resp.headers.get("Content-Type", "").lower() if content_type not in ("image/png", "image/jpeg"): - await error_helper.out(d = "Файл должен быть изображением в формате PNG или JPEG") + await err_embed.send("Файл должен быть изображением в формате PNG или JPEG") return # Проверка размера файла (не более 5 МБ) content_length = int(resp.headers.get("Content-Length", 0)) if content_length > 5 * 1024 * 1024: # 5 МБ - await error_helper.out(d = "Размер файла не должен превышать 5 МБ") + await err_embed.send("Размер файла не должен превышать 5 МБ") return image_data = await resp.read() # Получаем изображение в виде bytes except aiohttp.ClientError as e: - await error_helper.out(d = f"Ошибка при загрузке изображения: {e}") + await err_embed.send(f"Ошибка при загрузке изображения: {e}") return try: await self.role.edit(icon=image_data, reason=f"Иконка изменена пользователем {ctx.author}") except disnake.Forbidden: - await error_helper.out(d = "У бота недостаточно прав для изменения роли") + await err_embed.send("У бота недостаточно прав для изменения роли") return except disnake.HTTPException as e: - await error_helper.out(d = f"Ошибка при изменении роли: {e}") + await err_embed.send(f"Ошибка при изменении роли: {e}") return krekchat = await client.fetch_guild(constants["krekchat"]) @@ -339,7 +344,7 @@ class MainRolesModule(commands.Cog): custom_role = (await session.execute(stmt)).scalars().first() self.embed.description = f"**Укажите, какой параметр вы хотите изменить у роли {role.mention}:**\n\n**1) Стоимость: **```{custom_role.cost} крошек```\n**2) Цвет: **```{role.color}```\n**3) Название: **```{role.name}```" - await interaction.edit_original_message(embed=disnake.Embed(title="Роль успешно изменена!", description=f'', colour=0x2F3136)) + await interaction.edit_original_message(embed=self.client.InfoEmbed(title="Роль успешно изменена!", description=f'', colour=0x2F3136)) await self.ctx.edit_original_message(embed=self.embed) @@ -349,15 +354,15 @@ class MainRolesModule(commands.Cog): stmt = self.DataBaseManager.select(users_model).options(self.DataBaseManager.joinedload(users_model.creation_role)).where(users_model.id == ctx.author.id) user = (await session.execute(stmt)).scalars().first() if user.creation_role is None: - await error_helper.out(d=f"Вы не создавали кастомных ролей") + await err_embed.send(f"Вы не создавали кастомных ролей") return role = krekchat.get_role(user.creation_role.id) if not role: - await error_helper.out(d=f'Вашей роли нет на сервере') + await err_embed.send(f'Вашей роли нет на сервере') return - embed = disnake.Embed(title=f"Управление ролью", + embed = self.client.InfoEmbed(title=f"Управление ролью", description=f'**Укажите, какой параметр вы хотите изменить у роли {role.mention}:**\n\n**1) Стоимость: **```{user.creation_role.cost} крошек```\n**2) Цвет: **```{role.color}```\n**3) Название: **```{role.name}```', colour=0x2F3136) embed.set_thumbnail(ctx.author.avatar) @@ -373,9 +378,9 @@ class MainRolesModule(commands.Cog): @RoleInventorySlash.sub_command(description="Показывает все роли, которыми вы владеете", name="ролей") async def RoleInventorySub(self, ctx: disnake.AppCmdInter): await ctx.response.defer() - error_helper = self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка инвентаря") + err_embed = self.client.ErrEmbed(err_func = ctx.edit_original_message, title = "Ошибка инвентаря") if ctx.guild is None: - await error_helper.out(d="Эта команда не работает в личных сообщениях!") + await err_embed.send("Эта команда не работает в личных сообщениях!") return krekchat = await self.client.fetch_guild(constants["krekchat"]) @@ -396,48 +401,48 @@ class MainRolesModule(commands.Cog): @disnake.ui.button(label="1", custom_id="1", style=disnake.ButtonStyle.blurple) async def one(self, button, inter): if inter.author != self.ctx.author: - error = self.client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете управлять ролями другого участника", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете управлять ролями другого участника") + await inter.send(embed = err_embed, ephemeral = True) return await self.ToggleRoles(inter, button) @disnake.ui.button(label="2", custom_id="2", style=disnake.ButtonStyle.blurple) async def two(self, button, inter): if inter.author != self.ctx.author: - error = self.client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете управлять ролями другого участника", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете управлять ролями другого участника") + await inter.send(embed = err_embed, ephemeral = True) return await self.ToggleRoles(inter, button) @disnake.ui.button(label="3", custom_id="3", style=disnake.ButtonStyle.blurple) async def three(self, button, inter): if inter.author != self.ctx.author: - error = self.client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете управлять ролями другого участника", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете управлять ролями другого участника") + await inter.send(embed = err_embed, ephemeral = True) return await self.ToggleRoles(inter, button) @disnake.ui.button(label="4", custom_id="4", style=disnake.ButtonStyle.blurple) async def four(self, button, inter): if inter.author != self.ctx.author: - error = self.client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете управлять ролями другого участника", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете управлять ролями другого участника") + await inter.send(embed = err_embed, ephemeral = True) return await self.ToggleRoles(inter, button) @disnake.ui.button(label="5", custom_id="5", style=disnake.ButtonStyle.blurple) async def five(self, button, inter): if inter.author != self.ctx.author: - error = self.client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете управлять ролями другого участника", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете управлять ролями другого участника") + await inter.send(embed = err_embed, ephemeral = True) return await self.ToggleRoles(inter, button) @disnake.ui.button(label="<", custom_id="left", style=disnake.ButtonStyle.secondary) async def left(self, button, inter): if inter.author != self.ctx.author: - error = self.client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете управлять ролями другого участника", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете управлять ролями другого участника") + await inter.send(embed = err_embed, ephemeral = True) return self.page -= 1 self.left.disabled = (self.page == 1) @@ -448,8 +453,8 @@ class MainRolesModule(commands.Cog): @disnake.ui.button(label=">", custom_id="right", style=disnake.ButtonStyle.secondary) async def right(self, button, inter): if inter.author != self.ctx.author: - error = self.client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете управлять ролями другого участника", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете управлять ролями другого участника") + await inter.send(embed = err_embed, ephemeral = True) return self.page += 1 self.left.disabled = (self.page == 1) @@ -458,13 +463,13 @@ class MainRolesModule(commands.Cog): await inter.response.edit_message(embed=self.embed, view=self) async def ToggleRoles(self, inter, button): - error_helper = self.client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка инвентаря", ephemeral = True) + err_embed = self.client.ErrEmbed(err_func = inter.send, err_func_kwargs = {'ephemeral': True}, title = "Ошибка инвентаря") if len(self.inventory) < 1: - await error_helper.out(d=f'Роли с таким номером нет на странице') + await err_embed.send(f'Роли с таким номером нет на странице') return if len(self.inventory[self.page - 1]) < int(button.custom_id): - await error_helper.out(d=f'Роли с таким номером нет на странице') + await err_embed.send(f'Роли с таким номером нет на странице') return role = self.inventory[self.page - 1][int(button.custom_id) - 1] role = krekchat.get_role(role) @@ -491,7 +496,7 @@ class MainRolesModule(commands.Cog): roles_inventory_ids += [role.role_id for role in prize_roles if not role.role_id in roles_inventory_ids] if not role.id in roles_inventory_ids: - await error_helper.out(d=f"Эта роль пропала из вашего инвентаря") + await err_embed.send(f"Эта роль пропала из вашего инвентаря") return await self.ctx.author.add_roles(role) self.embed = await EmbedRoleInventoryChanger(self.inventory, self.embed, self.page, self.ctx.author) @@ -546,7 +551,7 @@ class MainRolesModule(commands.Cog): roles_inventory_sorted_ids += [role.role_id for role in custom_roles if not role.role_id in roles_inventory_sorted_ids] ready_array = self.client.PartitioningEmbeder(roles_inventory_sorted_ids) - embed = disnake.Embed(title=f"Инвентарь ролей", description=f'', colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"Инвентарь ролей", description=f'', colour=0x2F3136) embed.set_thumbnail(ctx.author.avatar) view = RolesInventoryButtons(ctx, ready_array, embed) @@ -567,17 +572,17 @@ class MainRolesModule(commands.Cog): ''' await ctx.response.defer() - error_helper = self.client.ErrorOutHelper(send_function = ctx.edit_original_message, err_name = "Ошибка магазина") + err_embed = self.client.ErrEmbed(err_func = ctx.edit_original_message, title = "Ошибка магазина") DataBaseManager = self.DataBaseManager if ctx.guild is None: - await error_helper.out(d="Эта команда не работает в личных сообщениях!") + await err_embed.send("Эта команда не работает в личных сообщениях!") return PartitioningEmbeder = self.client.PartitioningEmbeder - client = self.client - krekchat = await client.fetch_guild(constants["krekchat"]) + krekchat = await self.client.fetch_guild(constants["krekchat"]) class ShopView(disnake.ui.View): + client = self.client def __init__(self, ctx, embed): super().__init__(timeout=180) self.ctx = ctx @@ -619,8 +624,8 @@ class MainRolesModule(commands.Cog): async def leftmax(self, button, inter): await inter.response.defer() if inter.author != self.ctx.author: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли") + await inter.send(embed = err_embed, ephemeral = True) return self.page = 1 self.leftmax.disabled = (self.page == 1) @@ -636,8 +641,8 @@ class MainRolesModule(commands.Cog): async def left(self, button, inter): await inter.response.defer() if inter.author != self.ctx.author: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли") + await inter.send(embed = err_embed, ephemeral = True) return self.page = max(self.page - 1, 1) self.leftmax.disabled = (self.page == 1) @@ -653,8 +658,8 @@ class MainRolesModule(commands.Cog): async def right(self, button, inter): await inter.response.defer() if inter.author != self.ctx.author: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли") + await inter.send(embed = err_embed, ephemeral = True) return self.page = min(self.page + 1, self.maxpage) self.leftmax.disabled = (self.page == 1) @@ -670,8 +675,8 @@ class MainRolesModule(commands.Cog): async def rightmax(self, button, inter): await inter.response.defer() if inter.author != self.ctx.author: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли") + await inter.send(embed = err_embed, ephemeral = True) return self.page = self.maxpage self.leftmax.disabled = (self.page == 1) @@ -699,8 +704,8 @@ class MainRolesModule(commands.Cog): async def sort(self, select: disnake.ui.StringSelect, inter: disnake.MessageInteraction): await inter.response.defer() if inter.author != self.ctx.author: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли") + await inter.send(embed = err_embed, ephemeral = True) return self.page = 1 self.leftmax.disabled = (self.page == 1) @@ -721,40 +726,40 @@ class MainRolesModule(commands.Cog): @disnake.ui.button(label="1", custom_id="1", style=disnake.ButtonStyle.blurple, row=3) async def one(self, button, inter): if inter.author != self.ctx.author: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли") + await inter.send(embed = err_embed, ephemeral = True) return await self.BuyRoles(inter, button) @disnake.ui.button(label="2", custom_id="2", style=disnake.ButtonStyle.blurple, row=3) async def two(self, button, inter): if inter.author != self.ctx.author: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли") + await inter.send(embed = err_embed, ephemeral = True) return await self.BuyRoles(inter, button) @disnake.ui.button(label="3", custom_id="3", style=disnake.ButtonStyle.blurple, row=3) async def three(self, button, inter): if inter.author != self.ctx.author: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли") + await inter.send(embed = err_embed, ephemeral = True) return await self.BuyRoles(inter, button) @disnake.ui.button(label="4", custom_id="4", style=disnake.ButtonStyle.blurple, row=3) async def four(self, button, inter): if inter.author != self.ctx.author: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли") + await inter.send(embed = err_embed, ephemeral = True) return await self.BuyRoles(inter, button) @disnake.ui.button(label="5", custom_id="5", style=disnake.ButtonStyle.blurple, row=3) async def five(self, button, inter): if inter.author != self.ctx.author: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли") + await inter.send(embed = err_embed, ephemeral = True) return await self.BuyRoles(inter, button) @@ -765,7 +770,7 @@ class MainRolesModule(commands.Cog): await self.ctx.edit_original_message(view=self) async def BuyRoles(self, inter, button): - error_helper = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка покупки", ephemeral = True) + err_embed = self.client.ErrEmbed(err_func = inter.send, err_func_kwargs = {'ephemeral': True}, title = "Ошибка покупки") async with DataBaseManager.session() as session: async with session.begin(): async with DataBaseManager.models['users'] as users_model: @@ -777,24 +782,25 @@ class MainRolesModule(commands.Cog): self.page - 1] if len(page) < int(button.custom_id): - await error_helper.out(d=f'Роли с таким номером нет на странице') + await err_embed.send(f'Роли с таким номером нет на странице') return custom_role = page[int(button.custom_id) - 1] if user.crumbs < custom_role.cost: - await error_helper.out(d=f'У вас недостаточно крошек') + await err_embed.send(f'У вас недостаточно крошек') return if custom_role.id in [role.id for role in user.custom_roles]: - await error_helper.out(d=f'У вас уже есть эта роль') + await err_embed.send(f'У вас уже есть эта роль') return role = krekchat.get_role(custom_role.id) - confirmembed = disnake.Embed(description=f'Вы уверены, что хотите преобрести роль {role.mention if role else custom_role.id} за {custom_role.cost} крошек?', + confirmembed = self.client.InfoEmbed(description=f'Вы уверены, что хотите преобрести роль {role.mention if role else custom_role.id} за {custom_role.cost} крошек?', colour=0x2F3136) ConfMessage = ConfirmView(self.ctx, role, custom_role) await inter.response.edit_message(view=ConfMessage, embed=confirmembed) class ConfirmView(disnake.ui.View): + client = self.client def __init__(self, ctx, role, custom_role): super().__init__(timeout=180) self.ctx = ctx @@ -804,12 +810,12 @@ class MainRolesModule(commands.Cog): @disnake.ui.button(label="Да", custom_id="yes", style=disnake.ButtonStyle.green) async def yes(self, button, inter): if inter.author != self.ctx.author: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете покупать роли за другого участника. Используйте команду `/магазин ролей`, чтобы купить роли", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли") + await inter.send(embed = err_embed, ephemeral = True) return if not self.role: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка покупки", err_description = "Такая роль не найдена на сервере. Возможно, это ошибка базы данных", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка покупки", description = "Такая роль не найдена на сервере. Возможно, это ошибка базы данных") + await inter.send(embed = err_embed, ephemeral = True) return ctx = self.ctx @@ -826,19 +832,19 @@ class MainRolesModule(commands.Cog): session.add(receive) history = DataBaseManager.models['transaction_history_crumbs'].m(sender_id = user.id, recipient_id = creator.id, amount = self.custom_role.cost, description = f"Покупка роли {self.role.mention}") await self.ctx.author.add_roles(self.role) - embed = disnake.Embed(description=f'Роль {self.role.mention} успешно преобретена!', colour=0x2F3136) + embed = self.client.InfoEmbed(description=f'Роль {self.role.mention} успешно преобретена!', colour=0x2F3136) await self.ctx.edit_original_message(embed=embed, view=None) @disnake.ui.button(label="Нет", custom_id="no", style=disnake.ButtonStyle.red) async def no(self, button, inter): if inter.author != self.ctx.author: - error = client.ErrorOutHelper(send_function = inter.send, err_name = "Ошибка доступа", err_description = "Вы не можете покупать роли за другого участника. Используйте команду `/магазин ролей`, чтобы купить роли", ephemeral = True) - await error.out() + err_embed = self.client.ErrEmbed(title = "Ошибка доступа", description = "Вы не можете покупать роли в магазине другого участника. Используйте команду `/магазин ролей`, чтобы купить роли") + await inter.send(embed = err_embed, ephemeral = True) return ctx = self.ctx - embed = disnake.Embed(title=f"Магазин ролей", description=f'', colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"Магазин ролей", description=f'', colour=0x2F3136) ShopMessage = ShopView(ctx, embed) await ShopMessage.initialize() ShopMessage.leftmax.disabled = (ShopMessage.page == 1) @@ -902,7 +908,7 @@ class MainRolesModule(commands.Cog): inline=False) c += 1 return embed - embed = disnake.Embed(title=f"Магазин ролей", description=f'', colour=0x2F3136) + embed = self.client.InfoEmbed(title=f"Магазин ролей", description=f'', colour=0x2F3136) async with DataBaseManager.session() as session: await self.client.UserUpdate(ctx.author, session = session) async with session.begin(): diff --git a/src/constants/rimagochi_constants.py b/src/constants/rimagochi_constants.py index 572fe24..e079911 100644 --- a/src/constants/rimagochi_constants.py +++ b/src/constants/rimagochi_constants.py @@ -113,19 +113,19 @@ rimagochi_capsules = { {"rarity": rimagochi_rarity[36], "chance": rimagochi_rarity[36]["standart_chance"]}, ], }, - 52: { - 'id': 52, - 'name': 'аномальный саркофаг криптосна', - 'cost': 3000, - 'chances': [ - {"rarity": rimagochi_rarity[31], "chance": 0.001}, - {"rarity": rimagochi_rarity[37], "chance": 0.04}, - {"rarity": rimagochi_rarity[32], "chance": 0.02}, - {"rarity": rimagochi_rarity[33], "chance": 0.2}, - {"rarity": rimagochi_rarity[34], "chance": 0.3}, - {"rarity": rimagochi_rarity[35], "chance": 0.439}, - ], - }, + # 52: { + # 'id': 52, + # 'name': 'аномальный саркофаг криптосна', + # 'cost': 3000, + # 'chances': [ + # {"rarity": rimagochi_rarity[31], "chance": 0.001}, + # {"rarity": rimagochi_rarity[37], "chance": 0.04}, + # {"rarity": rimagochi_rarity[32], "chance": 0.02}, + # {"rarity": rimagochi_rarity[33], "chance": 0.2}, + # {"rarity": rimagochi_rarity[34], "chance": 0.3}, + # {"rarity": rimagochi_rarity[35], "chance": 0.439}, + # ], + # }, } rimagochi_animals = { 261: { diff --git a/src/managers/DataBaseManager.py b/src/managers/DataBaseManager.py index a82eb43..3194c1d 100644 --- a/src/managers/DataBaseManager.py +++ b/src/managers/DataBaseManager.py @@ -97,12 +97,12 @@ class DatabaseManager: await conn.close() async def pg_restore(self, echo = False, backup_file = 'src/backups/backup_file.backup'): - conn = await self.DataBaseManager.engine.connect() - db_name = self.DataBaseManager.engine.url.database - user = self.DataBaseManager.engine.url.username - host = self.DataBaseManager.engine.url.host - port = self.DataBaseManager.engine.url.port - password = self.DataBaseManager.engine.url.password + conn = await self.engine.connect() + db_name = self.engine.url.database + user = self.engine.url.username + host = self.engine.url.host + port = self.engine.url.port + password = self.engine.url.password os.environ['PGPASSWORD'] = password # Установка пароля для подключения command = [ diff --git a/src/test.py b/src/test.py index 70ff912..2963cb0 100644 --- a/src/test.py +++ b/src/test.py @@ -52,9 +52,9 @@ async def main(): # Загрузка когов sup_bot.load_extension("cogs.resetsupcommands") #sup_bot.load_extension("cogs.economy") - sup_bot.load_extension("cogs.designer") + #sup_bot.load_extension("cogs.designer") #sup_bot.load_extension("cogs.roles") - #sup_bot.load_extension("cogs.admin") + sup_bot.load_extension("cogs.admin") #sup_bot.load_extension("cogs.rimagochi") # Запуск монитора остановки и ботов