feat: creatives and external channels
This commit is contained in:
49
src/usecase/target_channel/update_target_chan_permissions.py
Normal file
49
src/usecase/target_channel/update_target_chan_permissions.py
Normal file
@@ -0,0 +1,49 @@
|
||||
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('Управление пользователями')
|
||||
|
||||
async with self.database.transaction():
|
||||
channel = await self.database.get_target_channel(user_id, telegram_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 not channel.is_active:
|
||||
channel.is_active = True
|
||||
await self.database.update_target_channel(channel)
|
||||
|
||||
await self.telegram_writer.send_message(
|
||||
f'✅ Канал "{input.chat_title}" был активирован.\n\nВсе необходимые права боту предоставлены!',
|
||||
chat_id=input.user_telegram_id,
|
||||
)
|
||||
log.info(f'Target channel {input.telegram_id} reactivated - all permissions granted')
|
||||
return
|
||||
|
||||
if channel.is_active:
|
||||
channel.is_active = False
|
||||
await self.database.update_target_channel(channel)
|
||||
|
||||
missed_permissions = '\n'.join(f'• {p}' for p in missing_permissions)
|
||||
await self.telegram_writer.send_message(
|
||||
f'⚠️ Канал "{input.chat_title}" был деактивирован.\
|
||||
\n\nБоту убрали необходимые права:\n{missed_permissions}',
|
||||
chat_id=input.user_telegram_id,
|
||||
)
|
||||
log.warning(
|
||||
f'Target channel {input.telegram_id} deactivated due to missing permissions: {missing_permissions}'
|
||||
)
|
||||
Reference in New Issue
Block a user