Реализована проверка на права суперпользователя is_admin_or_moder; Добавлен белый список людей, которым разрешены все ссылки
This commit is contained in:
@@ -520,6 +520,10 @@ class MainBot(AnyBots):
|
||||
files = files)
|
||||
return 0
|
||||
|
||||
async with self.DataBaseManager.session() as session:
|
||||
if (await self.DataBaseManager.model_classes['staff_users'].is_admin_or_moder_by_id(msg.author.id, self.DataBaseManager, session)):
|
||||
return 0
|
||||
|
||||
def extract_root_domain(url):
|
||||
ext = tldextract.extract(url)
|
||||
if not ext.domain or not ext.suffix:
|
||||
@@ -538,7 +542,6 @@ class MainBot(AnyBots):
|
||||
link_in_wl = (await session.execute(stmt)).scalars().first()
|
||||
|
||||
if link_in_wl is None:
|
||||
print("Нарушение!!!")
|
||||
await log.send(f"{msg.author.mention}({msg.author.id}) отправил в чат {msg.channel.mention} сомнительную ссылку, которой нет в вайлисте:```{msg.content}```")
|
||||
mess = await msg.reply(embed=self.ErrEmbed(description=f'Этой ссылки нет в белом списке. Чтобы её туда добавили, свяжитесь с разработчиком или модераторами.', colour=0xff9900))
|
||||
await msg.delete()
|
||||
|
||||
@@ -689,36 +689,7 @@ class ModerModule(commands.Cog):
|
||||
@commands.slash_command(description="Позволяет добавить домен в белый список", name="добавить_ссылку", administrator=True)
|
||||
async def add_domain(self, ctx: disnake.AppCmdInter, link: str = commands.Param(description="Укажите ссылку или домен", name="ссылка")):
|
||||
async with self.DataBaseManager.session() as session:
|
||||
async with session.begin():
|
||||
staff_branches_model = self.DataBaseManager.model_classes['staff_branches']
|
||||
аllowed_domains_model = self.DataBaseManager.model_classes['аllowed_domains']
|
||||
|
||||
admin_flag = False
|
||||
|
||||
stmt = (
|
||||
self.DataBaseManager.select(staff_branches_model)
|
||||
.options(
|
||||
self.DataBaseManager.selectinload(staff_branches_model.users)
|
||||
)
|
||||
.where(
|
||||
self.DataBaseManager.or_(
|
||||
staff_branches_model.is_admin == True,
|
||||
staff_branches_model.is_moder == True
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
branches = (await session.execute(stmt)).scalars().all()
|
||||
|
||||
for branch in branches:
|
||||
for user in branch.users:
|
||||
if ctx.author.id == user.user_id:
|
||||
admin_flag = True
|
||||
break
|
||||
if admin_flag:
|
||||
break
|
||||
|
||||
if not admin_flag:
|
||||
if not (await self.DataBaseManager.model_classes['staff_users'].is_admin_or_moder_by_id(ctx.author.id, self.DataBaseManager, session)):
|
||||
await ctx.send(embed = self.client.ErrEmbed(description = f'У вас недостаточно полномочий, чтобы добавлять ссылку в белый лист. Обратитесь к любому модератору или разработчику.'))
|
||||
return 1
|
||||
|
||||
@@ -734,6 +705,8 @@ class ModerModule(commands.Cog):
|
||||
await ctx.send(embed = self.client.ErrEmbed(description = f'Некорректная ссылка!'))
|
||||
return 1
|
||||
|
||||
аllowed_domains_model = self.DataBaseManager.model_classes['аllowed_domains']
|
||||
|
||||
stmt = self.DataBaseManager.select(аllowed_domains_model).where(аllowed_domains_model.domain == new_link)
|
||||
link_in_wl = (await session.execute(stmt)).scalars().first()
|
||||
|
||||
@@ -741,8 +714,9 @@ class ModerModule(commands.Cog):
|
||||
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)
|
||||
session.add(domain)
|
||||
|
||||
await ctx.send(embed = self.client.AnswEmbed(description = f'Домен {new_link} успешно добавлен в белый список'))
|
||||
return 1
|
||||
return 0
|
||||
@@ -148,6 +148,31 @@ class StaffUser(Base):
|
||||
primaryjoin="StaffUser.id==StaffCuration.curator_id"
|
||||
)
|
||||
|
||||
async def is_admin_or_moder(self, DBManager, session):
|
||||
return await self.__class__.is_admin_or_moder_by_id(self.id, DBManager, session)
|
||||
|
||||
@staticmethod
|
||||
async def is_admin_or_moder_by_id(member_id, DBManager, session):
|
||||
staff_branches_model = DBManager.model_classes['staff_branches']
|
||||
staff_users_roles_model = DBManager.model_classes['staff_users_roles']
|
||||
|
||||
stmt = (
|
||||
DBManager.select(staff_users_roles_model)
|
||||
.join(staff_branches_model, staff_branches_model.id == staff_users_roles_model.branch_id)
|
||||
.where(
|
||||
DBManager.and_(
|
||||
DBManager.or_(
|
||||
staff_branches_model.is_admin == True,
|
||||
staff_branches_model.is_moder == True,
|
||||
),
|
||||
staff_users_roles_model.user_id == member_id
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
result = await session.execute(stmt)
|
||||
return result.scalars().first() is not None
|
||||
|
||||
|
||||
class StaffUserRole(Base):
|
||||
__tablename__ = 'staff_users_roles'
|
||||
|
||||
Reference in New Issue
Block a user