Исправление 'A transaction is already begun on this Session'

This commit is contained in:
2025-08-05 12:39:47 +03:00
parent 3f8a240771
commit ccd853d237
2 changed files with 22 additions and 22 deletions

View File

@@ -543,7 +543,7 @@ class MainBot(AnyBots):
if link_in_wl is None: if link_in_wl is None:
await log.send(f"{msg.author.mention}({msg.author.id}) отправил в чат {msg.channel.mention} сомнительную ссылку, которой нет в вайлисте:```{msg.content}```") await log.send(f"{msg.author.mention}({msg.author.id}) отправил в чат {msg.channel.mention} сомнительную ссылку, которой нет в вайлисте:```{msg.content}```")
mess = await msg.reply(embed=self.ErrEmbed(description=f'Этой ссылки нет в белом списке. Чтобы её туда добавили, свяжитесь с разработчиком или модераторами.', colour=0xff9900)) mess = await msg.reply(embed=self.ErrEmbed(description=f'Этой ссылки нет в белом списке, но заявка на добавление уже отправлена. Если это срочно, свяжитесь с разработчиком или модераторами.', colour=0xff9900))
await msg.delete() await msg.delete()
await asyncio.sleep(20) await asyncio.sleep(20)
await mess.delete() await mess.delete()

View File

@@ -689,32 +689,32 @@ class ModerModule(commands.Cog):
@commands.slash_command(description="Позволяет добавить домен в белый список", name="добавить_ссылку", administrator=True) @commands.slash_command(description="Позволяет добавить домен в белый список", name="добавить_ссылку", administrator=True)
async def add_domain(self, ctx: disnake.AppCmdInter, link: str = commands.Param(description="Укажите ссылку или домен", name="ссылка")): async def add_domain(self, ctx: disnake.AppCmdInter, link: str = commands.Param(description="Укажите ссылку или домен", name="ссылка")):
async with self.DataBaseManager.session() as session: async with self.DataBaseManager.session() as session:
if not (await self.DataBaseManager.model_classes['staff_users'].is_admin_or_moder_by_id(ctx.author.id, self.DataBaseManager, session)): async with session.begin():
await ctx.send(embed = self.client.ErrEmbed(description = f'У вас недостаточно полномочий, чтобы добавлять ссылку в белый лист. Обратитесь к любому модератору или разработчику.')) if not (await self.DataBaseManager.model_classes['staff_users'].is_admin_or_moder_by_id(ctx.author.id, self.DataBaseManager, session)):
return 1 await ctx.send(embed = self.client.ErrEmbed(description = f'У вас недостаточно полномочий, чтобы добавлять ссылку в белый лист. Обратитесь к любому модератору или разработчику.'))
else:
def extract_root_domain(url):
ext = tldextract.extract(url)
if not ext.domain or not ext.suffix:
return None
return f"{ext.domain}.{ext.suffix}".lower()
new_link = extract_root_domain(link)
if not new_link:
await ctx.send(embed = self.client.ErrEmbed(description = f'Некорректная ссылка!'))
return 1 return 1
аllowed_domains_model = self.DataBaseManager.model_classes['аllowed_domains'] else:
stmt = self.DataBaseManager.select(аllowed_domains_model).where(аllowed_domains_model.domain == new_link) def extract_root_domain(url):
link_in_wl = (await session.execute(stmt)).scalars().first() ext = tldextract.extract(url)
if not ext.domain or not ext.suffix:
return None
return f"{ext.domain}.{ext.suffix}".lower()
new_link = extract_root_domain(link)
if not new_link:
await ctx.send(embed = self.client.ErrEmbed(description = f'Некорректная ссылка!'))
return 1
if link_in_wl is not None: аllowed_domains_model = self.DataBaseManager.model_classes['аllowed_domains']
await ctx.send(embed = self.client.ErrEmbed(description = f'Этот домен уже есть в белом листе!'))
return 1 stmt = self.DataBaseManager.select(аllowed_domains_model).where(аllowed_domains_model.domain == new_link)
link_in_wl = (await session.execute(stmt)).scalars().first()
if link_in_wl is not None:
await ctx.send(embed = self.client.ErrEmbed(description = f'Этот домен уже есть в белом листе!'))
return 1
async with session.begin():
domain = аllowed_domains_model(domain = new_link, initiator_id = ctx.author.id) domain = аllowed_domains_model(domain = new_link, initiator_id = ctx.author.id)
session.add(domain) session.add(domain)