fix(telegram): preserve file extension for generic documents
This commit is contained in:
@@ -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 ""
|
||||
|
||||
Reference in New Issue
Block a user