fix: sauberer Shutdown (Telegram Updater, CancelledError), WhatsApp-Polling auf 5s
This commit is contained in:
@@ -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
12
main.py
@@ -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__":
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user