diff --git a/channels/telegram_channel.py b/channels/telegram_channel.py index dde9974..8c231fa 100644 --- a/channels/telegram_channel.py +++ b/channels/telegram_channel.py @@ -72,6 +72,13 @@ class TelegramChannel(BaseChannel): async def stop(self) -> None: if self._app: + # Korrekte PTB v20+ Shutdown-Reihenfolge: + # Erst Updater stoppen, dann Application stoppen/shutdown + try: + if self._app.updater.running: + await self._app.updater.stop() + except Exception: + pass await self._app.stop() await self._app.shutdown() logger.info("Telegram channel stopped") diff --git a/main.py b/main.py index 05a8d78..4a50bda 100644 --- a/main.py +++ b/main.py @@ -85,14 +85,22 @@ async def main(with_tui: bool = True) -> None: else: # 8b. Nur API – wartet auf Ctrl-C / SIGTERM logger.info("Running in API-only mode (no TUI)") - await api_task + try: + await api_task + except asyncio.CancelledError: + pass finally: logger.info("MCM shutting down…") scheduler.shutdown(wait=False) + api_task.cancel() + try: + await api_task + except asyncio.CancelledError: + pass await telegram.stop() await whatsapp.stop() await sms.stop() - api_task.cancel() + logger.info("MCM stopped.") if __name__ == "__main__": diff --git a/tasks/receiver.py b/tasks/receiver.py index f5f0efc..c763569 100644 --- a/tasks/receiver.py +++ b/tasks/receiver.py @@ -21,10 +21,10 @@ def build_scheduler(whatsapp: "WhatsAppChannel") -> AsyncIOScheduler: _scheduler = AsyncIOScheduler(timezone="UTC") - # WhatsApp-Polling alle 10 Sekunden (coalesce=True überspringt verpasste Läufe) + # WhatsApp-Polling alle 5 Sekunden (Green API erlaubt 100 req/s) _scheduler.add_job( _poll_whatsapp, - trigger=IntervalTrigger(seconds=10), + trigger=IntervalTrigger(seconds=5), id="whatsapp-poll", name="WhatsApp incoming messages", max_instances=1,