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