import logging from typing import Dict, List from aiogram import Bot, types # Импортируем Bot из aiogram from aiogram.dispatcher import Dispatcher from config import MODERATORS_CHAT_ID # Логирование logger = logging.getLogger(__name__) # Словарь для временного хранения альбомов media_albums: Dict[str, List[types.Message]] = {} # Обработчик медиа-сообщений async def handle_media_message(message: types.Message): user_id = message.from_user.id content_type = message.content_type caption = message.caption or "Без подписи" # Если это часть медиа-группы if message.media_group_id: media_group_id = message.media_group_id # Создаем список для медиа-группы, если его еще нет if media_group_id not in media_albums: media_albums[media_group_id] = [] # Добавляем сообщение в группу media_albums[media_group_id].append(message) # Если собрано несколько элементов, отправляем альбом if len(media_albums[media_group_id]) > 1: await send_album(media_group_id, message.bot) else: # Если это одиночное медиа try: if content_type == "photo": await message.bot.send_photo( chat_id=MODERATORS_CHAT_ID, photo=message.photo[-1].file_id, caption=f"Анонимное фото:\n{caption}" ) elif content_type == "video": await message.bot.send_video( chat_id=MODERATORS_CHAT_ID, video=message.video.file_id, caption=f"Анонимное видео:\n{caption}" ) elif content_type == "audio": await message.bot.send_audio( chat_id=MODERATORS_CHAT_ID, audio=message.audio.file_id, caption=f"Анонимное аудио:\n{caption}" ) elif content_type == "document": await message.bot.send_document( chat_id=MODERATORS_CHAT_ID, document=message.document.file_id, caption=f"Анонимный документ:\n{caption}" ) elif content_type == "sticker": await message.bot.send_sticker(chat_id=MODERATORS_CHAT_ID, sticker=message.sticker.file_id) await message.bot.send_message(chat_id=MODERATORS_CHAT_ID, text=f"Анонимный стикер") elif content_type == "voice": await message.bot.send_voice( chat_id=MODERATORS_CHAT_ID, voice=message.voice.file_id, caption=f"Анонимное голосовое сообщение:\n{caption}" ) elif content_type == "video_note": await message.bot.send_video_note(chat_id=MODERATORS_CHAT_ID, video_note=message.video_note.file_id) await message.bot.send_message(chat_id=MODERATORS_CHAT_ID, text=f"Анонимное видеосообщение") await message.answer("Ваше медиа-сообщение успешно отправлено администраторам!") except Exception as e: logger.error(f"Ошибка при отправке медиа-сообщения: {e}") await message.answer("Произошла ошибка при отправке сообщения. Попробуйте позже.") # Отправка альбома async def send_album(media_group_id: str, bot: Bot): # Используем Bot из aiogram try: album = media_albums.pop(media_group_id) # Получаем и удаляем альбом из временного хранилища # Формируем медиа-группу media_group = [] caption = album[0].caption or "Без подписи" for message in album: if message.photo: media_group.append(types.InputMediaPhoto(media=message.photo[-1].file_id)) elif message.video: media_group.append(types.InputMediaVideo(media=message.video.file_id)) # Отправляем медиа-группу await bot.send_media_group( chat_id=MODERATORS_CHAT_ID, media=media_group ) await bot.send_message( chat_id=MODERATORS_CHAT_ID, text=f"Анонимная галерея:\n{caption}" ) except Exception as e: logger.error(f"Ошибка при отправке альбома: {e}") for msg in album: await msg.answer("Произошла ошибка при отправке галереи. Попробуйте позже.") # Регистрация обработчиков def register_media_handler(dp: Dispatcher): dp.register_message_handler(handle_media_message, content_types=[ types.ContentType.PHOTO, types.ContentType.VIDEO, types.ContentType.AUDIO, types.ContentType.DOCUMENT, types.ContentType.STICKER, types.ContentType.VOICE, types.ContentType.VIDEO_NOTE ])