Files
TG_autoposter/app/handlers/group_manager.py
2025-12-18 05:55:32 +09:00

65 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from telegram import Update, ChatMember
from telegram.ext import ContextTypes
from app.database import AsyncSessionLocal
from app.database.repository import GroupRepository
import logging
logger = logging.getLogger(__name__)
async def my_chat_member(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
"""
Обработчик изменения статуса бота в группах
Срабатывает когда бот добавлен или удален из группы
"""
my_chat_member_update = update.my_chat_member
if my_chat_member_update.new_chat_member.status == "member":
# Бот был добавлен в группу
chat = my_chat_member_update.chat
logger.info(f"Бот добавлен в группу: {chat.title} (ID: {chat.id})")
# Получаем информацию о slow mode
try:
chat_full = await context.bot.get_chat(chat.id)
slow_mode_delay = chat_full.slow_mode_delay or 0
async with AsyncSessionLocal() as session:
group_repo = GroupRepository(session)
existing = await group_repo.get_group_by_chat_id(str(chat.id))
if not existing:
# Добавляем новую группу
group = await group_repo.add_group(
chat_id=str(chat.id),
title=chat.title,
slow_mode_delay=slow_mode_delay
)
logger.info(f"Группа добавлена в БД: {group}")
# Уведомляем администратора (если это приватный чат)
# Этого функционала нет, т.к. нет ID администратора
else:
# Обновляем slow mode если он изменился
if existing.slow_mode_delay != slow_mode_delay:
await group_repo.update_group_slow_mode(
existing.id,
slow_mode_delay
)
logger.info(f"Slow mode обновлен для {existing.title}")
except Exception as e:
logger.error(f"Ошибка при обработке добавления в группу: {e}")
elif my_chat_member_update.new_chat_member.status == "left":
# Бот был удален из группы
chat = my_chat_member_update.chat
logger.info(f"Бот удален из группы: {chat.title} (ID: {chat.id})")
async with AsyncSessionLocal() as session:
group_repo = GroupRepository(session)
group = await group_repo.get_group_by_chat_id(str(chat.id))
if group:
await group_repo.deactivate_group(group.id)
logger.info(f"Группа деактивирована: {group}")