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}')