fix(telegram): preserve file extension for generic documents

This commit is contained in:
eric
2026-02-09 21:12:16 -05:00
parent ec4340d0d8
commit 4d6f02ec0d

View File

@@ -309,7 +309,11 @@ class TelegramChannel(BaseChannel):
if media_file and self._app:
try:
file = await self._app.bot.get_file(media_file.file_id)
ext = self._get_extension(media_type, getattr(media_file, 'mime_type', None))
ext = self._get_extension(
media_type,
getattr(media_file, 'mime_type', None),
getattr(media_file, 'file_name', None)
)
# Save to workspace/media/
from pathlib import Path
@@ -386,8 +390,12 @@ class TelegramChannel(BaseChannel):
except Exception as e:
logger.debug(f"Typing indicator stopped for {chat_id}: {e}")
def _get_extension(self, media_type: str, mime_type: str | None) -> str:
"""Get file extension based on media type."""
def _get_extension(self, media_type: str, mime_type: str | None, filename: str | None = None) -> str:
"""
Get file extension based on media type.
If mime_type is unknown, try to get extension from filename.
"""
# 1. Try known mime types
if mime_type:
ext_map = {
"image/jpeg": ".jpg", "image/png": ".png", "image/gif": ".gif",
@@ -396,5 +404,14 @@ class TelegramChannel(BaseChannel):
if mime_type in ext_map:
return ext_map[mime_type]
type_map = {"image": ".jpg", "voice": ".ogg", "audio": ".mp3", "file": ""}
return type_map.get(media_type, "")
# 2. Try simple type mapping
type_map = {"image": ".jpg", "voice": ".ogg", "audio": ".mp3"}
if media_type in type_map:
return type_map[media_type]
# 3. Fallback: try to get extension from filename
if filename:
from pathlib import Path
return Path(filename).suffix
return ""