init commit
This commit is contained in:
64
app/handlers/group_manager.py
Normal file
64
app/handlers/group_manager.py
Normal file
@@ -0,0 +1,64 @@
|
||||
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}")
|
||||
Reference in New Issue
Block a user