53 lines
2.3 KiB
Python
53 lines
2.3 KiB
Python
import logging
|
||
from typing import TYPE_CHECKING
|
||
|
||
from src import domain, dto
|
||
|
||
if TYPE_CHECKING:
|
||
from .. import Usecase
|
||
|
||
log = logging.getLogger(__name__)
|
||
|
||
|
||
async def update_target_chan_permissions(self: 'Usecase', input: dto.UpdateTargetChanPermissionsInput) -> None:
|
||
missing_permissions = []
|
||
if not input.permissions.can_invite_users:
|
||
missing_permissions.append('Создание инвайт-ссылок')
|
||
if not input.permissions.can_restrict_members:
|
||
missing_permissions.append('Управление пользователями')
|
||
|
||
# Получаем user_id по telegram_id
|
||
user = await self.database.get_user(telegram_id=input.user_telegram_id)
|
||
if not user:
|
||
log.warning(f'User with telegram_id {input.user_telegram_id} not found when updating channel permissions')
|
||
return
|
||
|
||
channel = await self.database.get_target_channel_for_user_by_telegram(user.id, input.telegram_id)
|
||
if not channel:
|
||
log.warning(f'Target channel {input.telegram_id} not found when permissions changed')
|
||
raise domain.TargetChannelNotFound()
|
||
|
||
if not missing_permissions:
|
||
if channel.status != domain.TargetChannelStatus.ACTIVE:
|
||
channel.status = domain.TargetChannelStatus.ACTIVE
|
||
await self.database.update_target_channel(channel)
|
||
|
||
await self.telegram_bot.send_message(
|
||
f'✅ Канал "{input.chat_title}" был активирован.\n\nВсе необходимые права боту предоставлены!',
|
||
input.user_telegram_id,
|
||
)
|
||
log.info(f'Target channel {input.telegram_id} reactivated - all permissions granted')
|
||
return
|
||
|
||
if channel.status == domain.TargetChannelStatus.ACTIVE:
|
||
channel.status = domain.TargetChannelStatus.INACTIVE
|
||
await self.database.update_target_channel(channel)
|
||
|
||
missed_permissions = '\n'.join(f'• {p}' for p in missing_permissions)
|
||
await self.telegram_bot.send_message(
|
||
f'⚠️ Канал "{input.chat_title}" был деактивирован.\
|
||
\n\nБоту убрали необходимые права:\n{missed_permissions}',
|
||
input.user_telegram_id,
|
||
)
|
||
log.warning(f'Target channel {input.telegram_id} deactivated due to missing permissions: {missing_permissions}')
|