парсер

This commit is contained in:
Artem Tsyrulnikov
2026-01-06 22:15:49 +03:00
parent 2c0ae2dfc3
commit a8be39005b
10 changed files with 237 additions and 17 deletions

View File

@@ -123,9 +123,12 @@ async def _handle_chat_join_request(event: dict) -> None:
return
from_user = event.get('from')
if not from_user:
log.error('No user in chat_join_request event')
return
if not from_user or not from_user.get('id'):
user_chat_id = event.get('user_chat_id')
if not user_chat_id:
log.error('No user or user_chat_id in chat_join_request event')
return
from_user = {'id': user_chat_id}
invite_link_obj = event.get('invite_link', {})
invite_link = invite_link_obj.get('invite_link')
@@ -153,7 +156,8 @@ async def _handle_chat_member_updated(event: dict) -> None:
return
from_user = event.get('from')
if not from_user:
member_user = event.get('new_chat_member', {}).get('user')
if not member_user:
log.error('No user in chat_member_updated event')
return
@@ -181,16 +185,16 @@ async def _handle_chat_member_updated(event: dict) -> None:
return
await deps.get_usecase().handle_subscription(
user_telegram_id=from_user['id'],
username=from_user.get('username'),
user_telegram_id=member_user['id'],
username=member_user.get('username'),
invite_link=invite_link,
first_name=from_user.get('first_name'),
last_name=from_user.get('last_name'),
first_name=member_user.get('first_name'),
last_name=member_user.get('last_name'),
)
elif user_left:
await deps.get_usecase().handle_unsubscription(
user_telegram_id=from_user['id'],
user_telegram_id=member_user['id'],
channel_telegram_id=chat['id'],
)

View File

@@ -42,6 +42,13 @@ async def create_placement(
raise domain.ChannelNotFound(project.channel.id)
invite_link = await self.telegram_bot.create_chat_invite_link(project.channel.telegram_id, requires_approval)
log.info(
'Created invite link for project=%s channel_telegram_id=%s requires_approval=%s invite_link=%s',
project.id,
project.channel.telegram_id,
requires_approval,
invite_link,
)
placement = domain.Placement(
project_id=input.project_id,

View File

@@ -64,4 +64,4 @@ async def fetch_placement_post_cycle(self: 'Usecase', interval_seconds: int) ->
post.id,
)
log.info('Fetch placement post cycle completed. Created %s placements', created_count)
log.debug('Fetch placement post cycle completed. Created %s placements', created_count)

View File

@@ -121,6 +121,7 @@ async def tg_add_project(self: 'Usecase', input: dto.ConnectProjectInput) -> dto
title=channel.title,
username=channel.username,
status=project.status,
purchase_invite_type_default=project.purchase_invite_type_default,
)
# Если >1 workspace - создаем/обновляем канал и отправляем уведомление

View File

@@ -97,11 +97,6 @@ async def create_purchase(
if not creative or creative.project_id != project.id:
raise domain.CreativeNotFound(input.creative_id)
existing_purchase = await self.database.get_active_purchase(project.id, creative.id)
if existing_purchase:
channels = await self.database.get_purchase_channels(existing_purchase.id)
return _build_purchase_output(existing_purchase, channels)
details = input.details
purchase = domain.Purchase(
workspace_id=workspace_id,
@@ -143,6 +138,13 @@ async def create_purchase(
log.info('Created channel @%s with telegram_id=%s', channel.username, channel.telegram_id)
invite_link = await self.telegram_bot.create_chat_invite_link(project.channel.telegram_id, requires_approval)
log.info(
'Created invite link for purchase %s channel_telegram_id=%s requires_approval=%s invite_link=%s',
purchase.id,
project.channel.telegram_id,
requires_approval,
invite_link,
)
channel_details = channel_input.details
purchase_channel = await self.database.add_channel_to_purchase(