65 lines
2.9 KiB
Python
65 lines
2.9 KiB
Python
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}")
|