Files
TelegramAnonReciever/handlers/media_handler.py
2025-08-07 01:09:33 +03:00

118 lines
5.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
])