import asyncio import random from datetime import datetime from app.connectors.fansifter import FansifterConnector from app.models import SenderType, TextMessage, User class TwilioConnector: def __init__(self) -> None: self.fansifter_connector = FansifterConnector() def _create(self, text: str) -> TextMessage: return TextMessage( sender=SenderType.twilio, text=text, ts=datetime.now().strftime("%H:%M"), ) async def handle_incoming_message(self, user: User, message: str) -> list[TextMessage]: norm = message.lower().strip() produced: list[TextMessage] = [] await asyncio.sleep( random.uniform( user.settings.app_settings.delay_min, user.settings.app_settings.delay_max, ) ) ts = user.settings.twilio_settings if norm in ts.opt_out_keywords: if ts.opt_out_message: produced.append(self._create(ts.opt_out_message)) elif norm in ts.help_keywords: if ts.help_message: produced.append(self._create(ts.help_message)) elif norm in ts.opt_in_keywords and ts.opt_in_message: produced.append(self._create(ts.opt_in_message)) produced.extend(await self.fansifter_connector.handle_incoming_message(message, user)) return produced