Merge pull request #436 from contributors/preserve-telegram-document-extension
This commit is contained in:
@@ -512,8 +512,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
|
||||||
media_dir = Path.home() / ".nanobot" / "media"
|
media_dir = Path.home() / ".nanobot" / "media"
|
||||||
@@ -625,8 +628,13 @@ class TelegramChannel(BaseChannel):
|
|||||||
"""Log polling / handler errors instead of silently swallowing them."""
|
"""Log polling / handler errors instead of silently swallowing them."""
|
||||||
logger.error("Telegram error: {}", context.error)
|
logger.error("Telegram error: {}", context.error)
|
||||||
|
|
||||||
def _get_extension(self, media_type: str, mime_type: str | None) -> str:
|
def _get_extension(
|
||||||
"""Get file extension based on media type."""
|
self,
|
||||||
|
media_type: str,
|
||||||
|
mime_type: str | None,
|
||||||
|
filename: str | None = None,
|
||||||
|
) -> str:
|
||||||
|
"""Get file extension based on media type or original filename."""
|
||||||
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",
|
||||||
@@ -636,4 +644,12 @@ class TelegramChannel(BaseChannel):
|
|||||||
return ext_map[mime_type]
|
return ext_map[mime_type]
|
||||||
|
|
||||||
type_map = {"image": ".jpg", "voice": ".ogg", "audio": ".mp3", "file": ""}
|
type_map = {"image": ".jpg", "voice": ".ogg", "audio": ".mp3", "file": ""}
|
||||||
return type_map.get(media_type, "")
|
if ext := type_map.get(media_type, ""):
|
||||||
|
return ext
|
||||||
|
|
||||||
|
if filename:
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
return "".join(Path(filename).suffixes)
|
||||||
|
|
||||||
|
return ""
|
||||||
|
|||||||
@@ -124,6 +124,13 @@ def test_derive_topic_session_key_uses_thread_id() -> None:
|
|||||||
assert TelegramChannel._derive_topic_session_key(message) == "telegram:-100123:topic:42"
|
assert TelegramChannel._derive_topic_session_key(message) == "telegram:-100123:topic:42"
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_extension_falls_back_to_original_filename() -> None:
|
||||||
|
channel = TelegramChannel(TelegramConfig(), MessageBus())
|
||||||
|
|
||||||
|
assert channel._get_extension("file", None, "report.pdf") == ".pdf"
|
||||||
|
assert channel._get_extension("file", None, "archive.tar.gz") == ".tar.gz"
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_send_progress_keeps_message_in_topic() -> None:
|
async def test_send_progress_keeps_message_in_topic() -> None:
|
||||||
config = TelegramConfig(enabled=True, token="123:abc", allow_from=["*"])
|
config = TelegramConfig(enabled=True, token="123:abc", allow_from=["*"])
|
||||||
|
|||||||
Reference in New Issue
Block a user