diff --git a/telegram_client.py b/telegram_client.py
index 7dbd343..e05fa40 100644
--- a/telegram_client.py
+++ b/telegram_client.py
@@ -1,6 +1,6 @@
import logging
from pyrogram import Client, errors
-from pyrogram.types import Message, Document, Audio, Video, VideoNote, Photo
+from pyrogram.types import Message, Document, Audio, Video, VideoNote, Photo, Voice, Animation, WebPage
from config import get_settings
import os
import re
@@ -16,9 +16,8 @@ import re
#http://127.0.0.1:8000/html/deckru/826 - animation
#http://127.0.0.1:8000/html/DragorWW_space/61 — links
#http://127.0.0.1:8000/html/theyforcedme/3577 - video note
-
-#audio http://127.0.0.1:8000/html/theyforcedme/3572
-# https://t.me/theyforcedme/3558 audio-note
+#http://127.0.0.1:8000/html/theyforcedme/3572 - audio
+#http://127.0.0.1:8000/html/theyforcedme/3558 audio-note
logger = logging.getLogger(__name__)
settings = get_settings()
@@ -106,6 +105,12 @@ class TelegramClient:
media_obj = message.document
elif message.audio:
media_obj = message.audio
+ elif message.voice:
+ media_obj = message.voice
+ elif message.animation:
+ media_obj = message.animation
+ elif message.web_page:
+ media_obj = message.web_page
if media_obj:
parsed_media = await self._parse_media(media_obj)
@@ -146,11 +151,46 @@ class TelegramClient:
f""
f""
)
- elif m.get('thumbnail_file_id'):
+ elif media_type == 'audio' and file_id:
+ # Audio player
+ previews.append(
+ f"
"
+ f"
"
+ f"
"
+ )
+ elif media_type == 'voice' and file_id:
+ previews.append(
+ f""
+ f"
"
+ f"
"
+ )
+ elif media_type == 'animation' and file_id:
+ previews.append(
+ f""
+ f""
+ f"
"
+ )
+ elif media_type == 'web_page' and m.get('photo_url'):
+ previews.append(
+ f""
+ )
+ elif m.get('url') and media_type == 'photo':
# Image preview without type overlay
previews.append(
f""
- f"

"
+ f"

"
f"
"
)
@@ -183,12 +223,29 @@ class TelegramClient:
async def _parse_media(self, media_obj) -> dict:
try:
# Для VideoNote используем явное определение типа
+ file_id = "" # Инициализация по умолчанию
+ media_type = "unknown"
+
if isinstance(media_obj, VideoNote):
file_id = media_obj.file_id
media_type = "video_note"
+ elif isinstance(media_obj, Animation):
+ file_id = media_obj.file_id
+ media_type = "animation"
+ elif isinstance(media_obj, Voice):
+ file_id = media_obj.file_id
+ media_type = "voice"
+ elif isinstance(media_obj, WebPage):
+ media_type = "web_page"
+ if media_obj.photo:
+ file_id = media_obj.photo.file_id
+ logger.debug(f"WebPage with photo: {file_id}")
+ else:
+ logger.warning("WebPage without photo")
else:
file_id = getattr(media_obj, "file_id", "")
media_type = media_obj.__class__.__name__.lower()
+ logger.debug(f"Generic media type: {media_type}")
result = {
"type": media_type,
@@ -206,13 +263,34 @@ class TelegramClient:
# Обработка превью
if hasattr(media_obj, "thumbs"):
- result["thumbnail_file_id"] = self._get_best_thumb(media_obj.thumbs)
+ if result["type"] == "photo":
+ result["url"] = media_obj.file_id # Используем оригинальный file_id для фото
+ else:
+ result["thumbnail_file_id"] = self._get_best_thumb(media_obj.thumbs)
# Дополнительные атрибуты
for attr in ["duration", "width", "height", "file_name", "title", "performer"]:
if hasattr(media_obj, attr):
result[attr] = getattr(media_obj, attr)
+ if isinstance(media_obj, Voice):
+ return {
+ "type": "voice",
+ "url": media_obj.file_id,
+ "duration": media_obj.duration,
+ "mime_type": media_obj.mime_type,
+ "size": media_obj.file_size
+ }
+
+ if isinstance(media_obj, WebPage):
+ return {
+ "type": "web_page",
+ "url": media_obj.url,
+ "title": getattr(media_obj, "title", ""),
+ "description": getattr(media_obj, "description", ""),
+ "photo_url": f"{settings['pyrogram_bridge_url'].rstrip('/')}/media/{media_obj.photo.file_id}" if media_obj.photo else None
+ }
+
return result
except Exception as e:
logger.error(f"Media parse failed: {type(e).__name__} - {str(e)}")