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