diff --git a/gateway/platforms/qqbot/__init__.py b/gateway/platforms/qqbot/__init__.py index 4877baa536..7119dd979e 100644 --- a/gateway/platforms/qqbot/__init__.py +++ b/gateway/platforms/qqbot/__init__.py @@ -20,6 +20,7 @@ from .adapter import ( # noqa: F401 QQCloseError, check_qq_requirements, _coerce_list, + _ssrf_redirect_guard, ) # -- Onboard (QR-code scan-to-configure) ----------------------------------- @@ -40,6 +41,7 @@ __all__ = [ "QQCloseError", "check_qq_requirements", "_coerce_list", + "_ssrf_redirect_guard", # onboard "BindStatus", "create_bind_task", diff --git a/gateway/platforms/qqbot/adapter.py b/gateway/platforms/qqbot/adapter.py index 286d8347ed..5a04834533 100644 --- a/gateway/platforms/qqbot/adapter.py +++ b/gateway/platforms/qqbot/adapter.py @@ -766,7 +766,7 @@ class QQAdapter(BasePlatformAdapter): try: payload = json.loads(raw) except Exception: - logger.debug("[%s] Failed to parse JSON: %r", self._log_tag, raw) + logger.warning("[QQBot] Failed to parse JSON: %r", raw) return None return payload if isinstance(payload, dict) else None diff --git a/tests/gateway/test_qqbot.py b/tests/gateway/test_qqbot.py index 18b1b59b75..6446762ec5 100644 --- a/tests/gateway/test_qqbot.py +++ b/tests/gateway/test_qqbot.py @@ -179,7 +179,7 @@ class TestVoiceAttachmentSSRFProtection: from gateway.platforms.qqbot import QQAdapter, _ssrf_redirect_guard client = mock.AsyncMock() - with mock.patch("gateway.platforms.qqbot.httpx.AsyncClient", return_value=client) as async_client_cls: + with mock.patch("gateway.platforms.qqbot.adapter.httpx.AsyncClient", return_value=client) as async_client_cls: adapter = QQAdapter(_make_config(app_id="a", client_secret="b")) adapter._ensure_token = mock.AsyncMock(side_effect=RuntimeError("stop after client creation")) @@ -316,7 +316,8 @@ class TestResolveSTTConfig: class TestDetectMessageType: def _fn(self, media_urls, media_types): from gateway.platforms.qqbot import QQAdapter - return QQAdapter._detect_message_type(media_urls, media_types) + adapter = QQAdapter(_make_config(app_id="a", client_secret="b")) + return adapter._detect_message_type(media_urls, media_types) def test_no_media(self): from gateway.platforms.base import MessageType