fix(gateway): add lazy_deps.ensure() to slack, matrix, dingtalk, feishu adapters (#25014)

Only Discord and Telegram had lazy-install hooks in their
check_*_requirements() functions. The remaining four platforms that were
moved to lazy_deps (Slack, Matrix, DingTalk, Feishu) would just return
False immediately if their packages weren't pre-installed — no attempt
to install them at runtime.

This means even with the .venv permissions fix (#24841), these four
platforms would still fail to load in Docker (or any fresh install)
unless the user manually ran pip install.

Add the same lazy_deps.ensure() pattern to all four, matching the
existing Discord/Telegram implementation.
This commit is contained in:
Siddharth Balyan 2026-05-13 19:28:50 +05:30 committed by GitHub
parent c3094b46e9
commit 5d90386baa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 84 additions and 11 deletions

View file

@ -73,8 +73,30 @@ class _ThreadContextCache:
def check_slack_requirements() -> bool:
"""Check if Slack dependencies are available."""
return SLACK_AVAILABLE
"""Check if Slack dependencies are available.
Lazy-installs slack-bolt/slack-sdk via ``tools.lazy_deps.ensure("platform.slack")``
on first call if not present.
"""
global SLACK_AVAILABLE, AsyncApp, AsyncSocketModeHandler, AsyncWebClient
if SLACK_AVAILABLE:
return True
try:
from tools.lazy_deps import ensure as _lazy_ensure
_lazy_ensure("platform.slack", prompt=False)
except Exception:
return False
try:
from slack_bolt.async_app import AsyncApp as _App
from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler as _Handler
from slack_sdk.web.async_client import AsyncWebClient as _Client
except ImportError:
return False
AsyncApp = _App
AsyncSocketModeHandler = _Handler
AsyncWebClient = _Client
SLACK_AVAILABLE = True
return True
def _extract_text_from_slack_blocks(blocks: list) -> str: