diff --git a/nonebot_bison/sub_manager/add_cookie.py b/nonebot_bison/sub_manager/add_cookie.py index c10fc27..9ae36e3 100644 --- a/nonebot_bison/sub_manager/add_cookie.py +++ b/nonebot_bison/sub_manager/add_cookie.py @@ -55,8 +55,9 @@ def do_add_cookie(add_cookie: type[Matcher]): async def got_cookie(state: T_State, cookie: Message = Arg()): client_mgr: CookieClientManager = platform_manager[state["platform"]].site.client_mgr cookie_text = cookie.extract_plain_text() + if not await client_mgr.valid_cookie(cookie_text): + await add_cookie.reject("无效的 Cookie,请检查后重新输入,详情见<待添加的文档>") state["cookie"] = cookie_text - state["name"] = await client_mgr.valid_cookie(cookie_text) @add_cookie.handle() async def add_cookie_process(state: T_State): diff --git a/nonebot_bison/utils/site.py b/nonebot_bison/utils/site.py index e241f49..4aeb8de 100644 --- a/nonebot_bison/utils/site.py +++ b/nonebot_bison/utils/site.py @@ -1,5 +1,6 @@ import json from typing import Literal +from json import JSONDecodeError from abc import ABC, abstractmethod from datetime import datetime, timedelta @@ -61,30 +62,31 @@ class CookieClientManager(ClientManager): @classmethod async def init_cookie(cls, cookie: Cookie) -> Cookie: - """初始化cookie,添加用户cookie时使用""" + """初始化 cookie,添加用户 cookie 时使用""" cookie.cd = cls._cookie_cd + cookie.last_usage = datetime.now() # 使得优先使用用户 cookie return cookie @classmethod async def valid_cookie(cls, content: str) -> bool: - """验证cookie是否有效,添加cookie时考用,可根据平台的具体情况进行重写""" + """验证 cookie 内容是否有效,添加 cookie 时用,可根据平台的具体情况进行重写""" try: data = json.loads(content) if not isinstance(data, dict): - raise ValueError - except Exception: + return False + except JSONDecodeError: return False return True @classmethod async def get_cookie_friendly_name(cls, cookie: Cookie) -> str: - """获取友好的cookie名字,用于展示""" + """获取 cookie 的友好名字,用于展示""" from . import text_fletten return text_fletten(f"{cookie.platform_name} [{cookie.content[:10]}]") def _generate_hook(self, cookie: Cookie): - """hook函数生成器,用于回写请求状态到数据库""" + """hook 函数生成器,用于回写请求状态到数据库""" async def _response_hook(resp: httpx.Response): if resp.status_code == 200: