fix: sauberer Shutdown (Telegram Updater, CancelledError), WhatsApp-Polling auf 5s

This commit is contained in:
2026-03-13 14:02:45 +01:00
parent d67479309d
commit 9046708015
3 changed files with 19 additions and 4 deletions

View File

@@ -72,6 +72,13 @@ class TelegramChannel(BaseChannel):
async def stop(self) -> None: async def stop(self) -> None:
if self._app: 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.stop()
await self._app.shutdown() await self._app.shutdown()
logger.info("Telegram channel stopped") logger.info("Telegram channel stopped")

12
main.py
View File

@@ -85,14 +85,22 @@ async def main(with_tui: bool = True) -> None:
else: else:
# 8b. Nur API wartet auf Ctrl-C / SIGTERM # 8b. Nur API wartet auf Ctrl-C / SIGTERM
logger.info("Running in API-only mode (no TUI)") logger.info("Running in API-only mode (no TUI)")
await api_task try:
await api_task
except asyncio.CancelledError:
pass
finally: finally:
logger.info("MCM shutting down…") logger.info("MCM shutting down…")
scheduler.shutdown(wait=False) scheduler.shutdown(wait=False)
api_task.cancel()
try:
await api_task
except asyncio.CancelledError:
pass
await telegram.stop() await telegram.stop()
await whatsapp.stop() await whatsapp.stop()
await sms.stop() await sms.stop()
api_task.cancel() logger.info("MCM stopped.")
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -21,10 +21,10 @@ def build_scheduler(whatsapp: "WhatsAppChannel") -> AsyncIOScheduler:
_scheduler = AsyncIOScheduler(timezone="UTC") _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( _scheduler.add_job(
_poll_whatsapp, _poll_whatsapp,
trigger=IntervalTrigger(seconds=10), trigger=IntervalTrigger(seconds=5),
id="whatsapp-poll", id="whatsapp-poll",
name="WhatsApp incoming messages", name="WhatsApp incoming messages",
max_instances=1, max_instances=1,