diff --git a/nonebot_bison/sub_manager/add_cookie.py b/nonebot_bison/sub_manager/add_cookie.py index 235c65b..505a32a 100644 --- a/nonebot_bison/sub_manager/add_cookie.py +++ b/nonebot_bison/sub_manager/add_cookie.py @@ -7,7 +7,7 @@ from nonebot.adapters import Message, MessageTemplate from ..platform import platform_manager from .utils import common_platform, gen_handle_cancel -from ..utils.site import CookieClientManager, is_cookie_client_manager +from ..utils.site import CookieSite, CookieClientManager, is_cookie_client_manager def do_add_cookie(add_cookie: type[Matcher]): @@ -52,11 +52,9 @@ def do_add_cookie(add_cookie: type[Matcher]): @add_cookie.got("cookie", MessageTemplate("{_prompt}"), [handle_cancel]) async def got_cookie(state: T_State, cookie: Message = Arg()): - client_mgr: type[CookieClientManager] = cast( - type[CookieClientManager], platform_manager[state["platform"]].site.client_mgr - ) + cookie_site = cast(type[CookieSite], platform_manager[state["platform"]].site) cookie_text = cookie.extract_plain_text() - if not await client_mgr.validate_cookie(cookie_text): + if not await cookie_site.validate_cookie(cookie_text): await add_cookie.reject(state["site"].cookie_format_prompt) state["cookie"] = cookie_text diff --git a/nonebot_bison/utils/site.py b/nonebot_bison/utils/site.py index 86a1a52..69dfc7e 100644 --- a/nonebot_bison/utils/site.py +++ b/nonebot_bison/utils/site.py @@ -65,25 +65,13 @@ class CookieClientManager(ClientManager): from ..platform import site_manager cookie_site = cast(type[CookieSite], site_manager[cls._site_name]) - if not await cls.validate_cookie(content): + if not await cookie_site.validate_cookie(content): raise ValueError() cookie = Cookie(site_name=cls._site_name, content=content) cookie.cookie_name = await cookie_site.get_cookie_name(content) cookie.cd = cls._default_cd await config.add_cookie(cookie) - @classmethod - async def validate_cookie(cls, content: str) -> bool: - """验证 cookie 内容是否有效,添加 cookie 时用,可根据平台的具体情况进行重写""" - # todo: 考虑移动到 cookie site 中 - try: - data = json.loads(content) - if not isinstance(data, dict): - return False - except JSONDecodeError: - return False - return True - def _generate_hook(self, cookie: Cookie) -> callable: """hook 函数生成器,用于回写请求状态到数据库""" @@ -172,6 +160,17 @@ class CookieSite(Site): return text_fletten(f"{cls.name} [{content[:10]}]") + @classmethod + async def validate_cookie(cls, content: str) -> bool: + """验证 cookie 内容是否有效,添加 cookie 时用,可根据平台的具体情况进行重写""" + try: + data = json.loads(content) + if not isinstance(data, dict): + return False + except JSONDecodeError: + return False + return True + def anonymous_site(schedule_type: Literal["date", "interval", "cron"], schedule_setting: dict) -> type[Site]: return type(