Spaces:
Sleeping
Sleeping
| """Messaging platform component factory.""" | |
| from __future__ import annotations | |
| from dataclasses import dataclass | |
| from loguru import logger | |
| from ..limiter import MessagingRateLimiter | |
| from ..voice import Transcriber | |
| from .ports import MessagingPlatformComponents, MessagingStartupNotice | |
| class MessagingPlatformOptions: | |
| """Typed wiring from app settings into messaging platform runtimes.""" | |
| telegram_bot_token: str | None = None | |
| allowed_telegram_user_id: str | None = None | |
| telegram_proxy_url: str = "" | |
| discord_bot_token: str | None = None | |
| allowed_discord_channels: str | None = None | |
| transcriber: Transcriber | None = None | |
| messaging_rate_limit: int = 1 | |
| messaging_rate_window: float = 1.0 | |
| log_raw_messaging_content: bool = False | |
| log_messaging_error_details: bool = False | |
| log_api_error_tracebacks: bool = False | |
| def create_messaging_components( | |
| platform_type: str, | |
| options: MessagingPlatformOptions | None = None, | |
| ) -> MessagingPlatformComponents | None: | |
| """Create runtime/outbound components for the configured messaging platform.""" | |
| opts = options or MessagingPlatformOptions() | |
| if platform_type == "none": | |
| logger.info("Messaging platform disabled by configuration") | |
| return None | |
| if platform_type == "telegram": | |
| bot_token = opts.telegram_bot_token | |
| if not bot_token: | |
| logger.info("No Telegram bot token configured, skipping platform setup") | |
| return None | |
| from .telegram import TelegramRuntime | |
| limiter = MessagingRateLimiter( | |
| rate_limit=opts.messaging_rate_limit, | |
| rate_window=opts.messaging_rate_window, | |
| log_error_details=opts.log_messaging_error_details, | |
| ) | |
| runtime = TelegramRuntime( | |
| bot_token=bot_token, | |
| allowed_user_id=opts.allowed_telegram_user_id, | |
| telegram_proxy_url=opts.telegram_proxy_url, | |
| limiter=limiter, | |
| transcriber=opts.transcriber, | |
| log_raw_messaging_content=opts.log_raw_messaging_content, | |
| log_api_error_tracebacks=opts.log_api_error_tracebacks, | |
| ) | |
| startup_notice = ( | |
| MessagingStartupNotice( | |
| chat_id=opts.allowed_telegram_user_id, | |
| transport_label="Bot API", | |
| ) | |
| if opts.allowed_telegram_user_id | |
| else None | |
| ) | |
| return MessagingPlatformComponents( | |
| name=runtime.name, | |
| runtime=runtime, | |
| outbound=runtime.outbound, | |
| voice_cancellation=runtime, | |
| startup_notice=startup_notice, | |
| ) | |
| if platform_type == "discord": | |
| bot_token = opts.discord_bot_token | |
| if not bot_token: | |
| logger.info("No Discord bot token configured, skipping platform setup") | |
| return None | |
| from .discord import DiscordRuntime | |
| limiter = MessagingRateLimiter( | |
| rate_limit=opts.messaging_rate_limit, | |
| rate_window=opts.messaging_rate_window, | |
| log_error_details=opts.log_messaging_error_details, | |
| ) | |
| runtime = DiscordRuntime( | |
| bot_token=bot_token, | |
| allowed_channel_ids=opts.allowed_discord_channels, | |
| limiter=limiter, | |
| transcriber=opts.transcriber, | |
| log_raw_messaging_content=opts.log_raw_messaging_content, | |
| log_api_error_tracebacks=opts.log_api_error_tracebacks, | |
| ) | |
| return MessagingPlatformComponents( | |
| name=runtime.name, | |
| runtime=runtime, | |
| outbound=runtime.outbound, | |
| voice_cancellation=runtime, | |
| ) | |
| logger.warning( | |
| "Unknown messaging platform: '{}'. Supported: 'none', 'telegram', 'discord'", | |
| platform_type, | |
| ) | |
| return None | |