from __future__ import annotations from yuxi.channels.models import MessageType TRUNCATION_MARKER = "\n...(内容过长已截断)" def truncate_text(text: str, limit: int) -> str: if len(text) <= limit: return text return text[: limit - len(TRUNCATION_MARKER)] + TRUNCATION_MARKER def map_wecom_msg_type(msg_type: str) -> MessageType: mapping = { "text": MessageType.TEXT, "image": MessageType.IMAGE, "voice": MessageType.AUDIO, "video": MessageType.VIDEO, "file": MessageType.FILE, "location": MessageType.LOCATION, } return mapping.get(msg_type, MessageType.TEXT) def map_mp_msg_type(msg_type: str) -> MessageType: mapping = { "text": MessageType.TEXT, "image": MessageType.IMAGE, "voice": MessageType.AUDIO, "video": MessageType.VIDEO, "location": MessageType.LOCATION, } return mapping.get(msg_type, MessageType.TEXT) def map_bridge_msg_type(msg_type: int) -> MessageType: mapping = { 1: MessageType.TEXT, 3: MessageType.IMAGE, 34: MessageType.AUDIO, 43: MessageType.VIDEO, 48: MessageType.LOCATION, 49: MessageType.FILE, } return mapping.get(msg_type, MessageType.TEXT)