根据数据库的修改对应的逻辑,同时移除多余的init_cookie和_check_cookie

This commit is contained in:
suyiiyii 2024-09-13 00:59:19 +08:00
parent af246df222
commit 16331b50d5
3 changed files with 21 additions and 25 deletions

View File

@ -1,3 +1,5 @@
from typing import cast
from nonebot.log import logger
from ..utils import Site
@ -7,7 +9,7 @@ from ..config.db_model import Target
from ..types import Target as T_Target
from ..platform import platform_manager
from ..plugin_config import plugin_config
from ..utils.site import is_cookie_client_manager
from ..utils.site import CookieClientManager, is_cookie_client_manager
scheduler_dict: dict[type[Site], Scheduler] = {}
@ -32,7 +34,8 @@ async def init_scheduler():
_schedule_class_platform_dict[site].append(platform_name)
for site, target_list in _schedule_class_dict.items():
if is_cookie_client_manager(site.client_mgr):
await site.client_mgr.refresh_universal_cookie()
client_mgr = cast(CookieClientManager, site.client_mgr)
await client_mgr.refresh_anonymous_cookie()
if not plugin_config.bison_use_browser and site.require_browser:
logger.warning(f"{site.name} requires browser, it will not schedule.")
continue

View File

@ -5,8 +5,6 @@ from nonebot.matcher import Matcher
from nonebot.params import Arg, ArgPlainText
from nonebot.adapters import Message, MessageTemplate
from ..config import config
from ..config.db_model import Cookie
from ..platform import platform_manager
from .utils import common_platform, gen_handle_cancel
from ..utils.site import CookieClientManager, is_cookie_client_manager
@ -64,10 +62,8 @@ def do_add_cookie(add_cookie: type[Matcher]):
@add_cookie.handle()
async def add_cookie_process(state: T_State):
cookie = Cookie(site_name=state["site"].name, content=state["cookie"])
client_mgr = cast(CookieClientManager, platform_manager[state["platform"]].site.client_mgr)
cookie = await client_mgr.init_cookie(cookie)
await config.add_cookie(cookie)
await client_mgr.add_user_cookie(state["cookie"])
await add_cookie.finish(
f"已添加 Cookie: {state['cookie']} 到平台 {state['platform']}" + "\n请使用“关联cookie”为 Cookie 关联订阅"
)

View File

@ -44,26 +44,27 @@ class DefaultClientManager(ClientManager):
class CookieClientManager(ClientManager):
_site_name: str
_cookie_cd: int = 10
_default_cd: int = timedelta(seconds=10)
@classmethod
async def refresh_universal_cookie(cls):
async def refresh_anonymous_cookie(cls):
"""移除已有的匿名cookie添加一个新的匿名cookie"""
universal_cookies = await config.get_unviersal_cookie(cls._site_name)
universal_cookie = Cookie(site_name=cls._site_name, content="{}", is_universal=True, tags={"temporary": True})
for cookie in universal_cookies:
if not cookie.tags.get("temporary"):
anonymous_cookies = await config.get_unviersal_cookie(cls._site_name)
anonymous_cookie = Cookie(site_name=cls._site_name, content="{}", is_universal=True, is_anonymous=True)
for cookie in anonymous_cookies:
if not cookie.is_anonymous:
continue
await config.delete_cookie_by_id(cookie.id)
universal_cookie.id = cookie.id # 保持原有的id
await config.add_cookie(universal_cookie)
anonymous_cookie.id = cookie.id # 保持原有的id
anonymous_cookie.last_usage = datetime.now() # 使得第一次请求优先使用用户 cookie
await config.add_cookie(anonymous_cookie)
@classmethod
async def init_cookie(cls, cookie: Cookie) -> Cookie:
"""初始化 cookie添加用户 cookie 时使用"""
cookie.cd = cls._cookie_cd
cookie.last_usage = datetime.now() # 使得优先使用用户 cookie
return cookie
async def add_user_cookie(cls, content: str):
"""添加用户 cookie"""
cookie = Cookie(site_name=cls._site_name, content=content)
cookie.cd = cls._default_cd
config.add_cookie(cookie)
@classmethod
async def validate_cookie(cls, content: str) -> bool:
@ -103,14 +104,10 @@ class CookieClientManager(ClientManager):
cookies = await config.get_universal_cookie(self._site_name)
if target:
cookies += await config.get_cookie(self._site_name, target)
cookies = (cookie for cookie in cookies if cookie.last_usage + timedelta(seconds=cookie.cd) < datetime.now())
cookies = (cookie for cookie in cookies if cookie.last_usage + cookie.cd < datetime.now())
cookie = min(cookies, key=lambda x: x.last_usage)
return cookie
async def _check_cookie(self, cookie: Cookie) -> Cookie:
"""检查Cookie可以做一些自定义的逻辑比如说Site的统一风控"""
return cookie
async def get_client(self, target: Target | None) -> AsyncClient:
"""获取 client根据 target 选择 cookie"""
client = http_client()