feat: handle unsubscribe
This commit is contained in:
@@ -10,11 +10,6 @@ log = logging.getLogger(__name__)
|
||||
|
||||
@telegram_callback_router.chat_member()
|
||||
async def on_chat_member_updated(event: ChatMemberUpdated) -> None:
|
||||
"""
|
||||
Обрабатывает события подписки пользователей в канал через открытую invite_link.
|
||||
|
||||
Событие приходит когда пользователь вступает в канал напрямую (без запроса на вступление).
|
||||
"""
|
||||
if event.chat.type not in {'channel', 'supergroup'}:
|
||||
return
|
||||
|
||||
@@ -30,19 +25,22 @@ async def on_chat_member_updated(event: ChatMemberUpdated) -> None:
|
||||
is_now_member = new_status in ('member', 'administrator', 'creator')
|
||||
user_joined = was_not_member and is_now_member
|
||||
|
||||
if not user_joined:
|
||||
return
|
||||
|
||||
# Получаем invite_link, по которой пользователь присоединился
|
||||
invite_link = event.invite_link
|
||||
if not invite_link or not invite_link.invite_link:
|
||||
log.debug('No invite_link in chat member update event')
|
||||
return
|
||||
# Проверяем что пользователь покинул канал
|
||||
was_member = old_status in ('member', 'administrator', 'creator', 'restricted')
|
||||
is_now_not_member = new_status in ('left', 'kicked')
|
||||
user_left = was_member and is_now_not_member
|
||||
|
||||
usecase = dependencies.get_usecase()
|
||||
|
||||
await usecase.handle_subscription(
|
||||
user_telegram_id=event.from_user.id,
|
||||
username=event.from_user.username,
|
||||
invite_link=invite_link.invite_link,
|
||||
)
|
||||
if user_joined:
|
||||
invite_link = event.invite_link.invite_link if event.invite_link else None
|
||||
if not invite_link:
|
||||
log.debug('No invite_link in chat member update event')
|
||||
return
|
||||
|
||||
await usecase.handle_subscription(
|
||||
user_telegram_id=event.from_user.id, username=event.from_user.username, invite_link=invite_link
|
||||
)
|
||||
|
||||
elif user_left:
|
||||
await usecase.handle_unsubscription(user_telegram_id=event.from_user.id, channel_telegram_id=event.chat.id)
|
||||
|
||||
Reference in New Issue
Block a user