mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-05-07 10:16:02 +00:00
fix-feishu-media-path
This commit is contained in:
parent
9fa90b1034
commit
358997554c
@ -1081,8 +1081,9 @@ class FeishuChannel(BaseChannel):
|
|||||||
if data and filename:
|
if data and filename:
|
||||||
file_path = media_dir / filename
|
file_path = media_dir / filename
|
||||||
file_path.write_bytes(data)
|
file_path.write_bytes(data)
|
||||||
logger.debug("Downloaded {} to {}", msg_type, file_path)
|
path_str = str(file_path)
|
||||||
return str(file_path), f"[{msg_type}: {filename}]"
|
logger.debug("Downloaded {} to {}", msg_type, path_str)
|
||||||
|
return path_str, f"[{msg_type}: {path_str}]"
|
||||||
|
|
||||||
return None, f"[{msg_type}: download failed]"
|
return None, f"[{msg_type}: download failed]"
|
||||||
|
|
||||||
|
|||||||
@ -445,6 +445,58 @@ async def test_on_message_no_extra_api_call_when_no_parent_id() -> None:
|
|||||||
assert len(captured) == 1
|
assert len(captured) == 1
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Inbound media tests
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_on_message_audio_publishes_downloaded_path_and_transcription() -> None:
|
||||||
|
channel = _make_feishu_channel()
|
||||||
|
channel._processed_message_ids.clear()
|
||||||
|
captured = []
|
||||||
|
|
||||||
|
async def capture(msg):
|
||||||
|
captured.append(msg)
|
||||||
|
|
||||||
|
channel.bus.publish_inbound = capture
|
||||||
|
channel._download_and_save_media = AsyncMock(
|
||||||
|
return_value=(r"C:\\Users\\dodre\\.nanobot\\media\\feishu\\voice.ogg", "[audio: voice.ogg]")
|
||||||
|
)
|
||||||
|
channel.transcribe_audio = AsyncMock(return_value="hello from voice")
|
||||||
|
channel._add_reaction = AsyncMock(return_value=None)
|
||||||
|
|
||||||
|
event = _make_feishu_event(
|
||||||
|
msg_type="audio",
|
||||||
|
content='{"file_key": "audio_key", "duration": 1000}',
|
||||||
|
message_id="om_audio",
|
||||||
|
)
|
||||||
|
await channel._on_message(event)
|
||||||
|
|
||||||
|
channel._download_and_save_media.assert_awaited_once_with(
|
||||||
|
"audio", {"file_key": "audio_key", "duration": 1000}, "om_audio"
|
||||||
|
)
|
||||||
|
channel.transcribe_audio.assert_awaited_once_with(r"C:\\Users\\dodre\\.nanobot\\media\\feishu\\voice.ogg")
|
||||||
|
assert len(captured) == 1
|
||||||
|
assert captured[0].media == [r"C:\\Users\\dodre\\.nanobot\\media\\feishu\\voice.ogg"]
|
||||||
|
assert captured[0].content == "[transcription: hello from voice]"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_download_and_save_media_returns_absolute_path_in_content(monkeypatch, tmp_path) -> None:
|
||||||
|
channel = _make_feishu_channel()
|
||||||
|
monkeypatch.setattr(feishu, "get_media_dir", lambda _channel: tmp_path)
|
||||||
|
channel._download_file_sync = MagicMock(return_value=(b"voice-bytes", None))
|
||||||
|
|
||||||
|
file_path, content_text = await channel._download_and_save_media(
|
||||||
|
"audio", {"file_key": "voice_key"}, "om_audio"
|
||||||
|
)
|
||||||
|
|
||||||
|
assert file_path == str(tmp_path / "voice_key.ogg")
|
||||||
|
assert (tmp_path / "voice_key.ogg").read_bytes() == b"voice-bytes"
|
||||||
|
assert content_text == f"[audio: {file_path}]"
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Session key derivation tests
|
# Session key derivation tests
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user