init commit

This commit is contained in:
2025-12-18 05:55:32 +09:00
commit a6817e487e
72 changed files with 13847 additions and 0 deletions

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