ForcePilot/backend/package/yuxi/channel/extensions/webex/media.py

66 lines
1.9 KiB
Python
Raw Normal View History

from pathlib import Path
class WebexMedia:
MIME_MAP = {
".pdf": "application/pdf",
".doc": "application/msword",
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
".xls": "application/vnd.ms-excel",
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
".ppt": "application/vnd.ms-powerpoint",
".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
".png": "image/png",
".jpg": "image/jpeg",
".jpeg": "image/jpeg",
".gif": "image/gif",
".bmp": "image/bmp",
}
def __init__(self, api):
self._api = api
async def send_local_file(
self,
room_id: str,
file_path: str | Path,
*,
description: str = "",
parent_id: str | None = None,
) -> str:
file_path = Path(file_path)
import aiofiles
async with aiofiles.open(file_path, "rb") as f:
file_content = await f.read()
kwargs = {"roomId": room_id, "files": [file_content]}
if description:
kwargs["text"] = description
if parent_id:
kwargs["parentId"] = parent_id
msg = self._api.messages.create(**kwargs)
return msg.id
async def send_remote_file(
self,
room_id: str,
file_url: str,
*,
description: str = "",
parent_id: str | None = None,
) -> str:
kwargs = {"roomId": room_id, "files": [file_url]}
if description:
kwargs["text"] = description
if parent_id:
kwargs["parentId"] = parent_id
msg = self._api.messages.create(**kwargs)
return msg.id
@classmethod
def _guess_mime(cls, suffix: str) -> str:
return cls.MIME_MAP.get(suffix.lower(), "application/octet-stream")