fix: Telegram-Polling-Task sauber canceln + WhatsApp CancelledError beim Shutdown unterdrücken
This commit is contained in:
@@ -21,6 +21,7 @@ class TelegramChannel(BaseChannel):
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._app: Application | None = None
|
||||
self._polling_task: asyncio.Task | None = None
|
||||
self._inbound_callback: Callable[[dict[str, Any]], Awaitable[None]] | None = None
|
||||
|
||||
def set_inbound_callback(self, cb: Callable[[dict[str, Any]], Awaitable[None]]) -> None:
|
||||
@@ -67,14 +68,21 @@ class TelegramChannel(BaseChannel):
|
||||
|
||||
await self._app.initialize()
|
||||
await self._app.start()
|
||||
# Long-Polling als Background-Task
|
||||
asyncio.create_task(self._polling_loop(), name="telegram-polling")
|
||||
# Long-Polling als Background-Task (Referenz speichern für sauberes Cancel)
|
||||
self._polling_task = asyncio.create_task(self._polling_loop(), name="telegram-polling")
|
||||
logger.info("Telegram channel started (long-polling)")
|
||||
|
||||
async def stop(self) -> None:
|
||||
# Polling-Task sauber canceln
|
||||
if self._polling_task and not self._polling_task.done():
|
||||
self._polling_task.cancel()
|
||||
try:
|
||||
await self._polling_task
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
self._polling_task = 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()
|
||||
|
||||
Reference in New Issue
Block a user