From 4805d0d77ceaba87cd5190042d189ca12ab8d338 Mon Sep 17 00:00:00 2001 From: suyiiyii Date: Tue, 29 Oct 2024 11:33:28 +0800 Subject: [PATCH] =?UTF-8?q?:recycle:=20=E5=9C=A8=20CookieClientManager=20?= =?UTF-8?q?=E4=B8=AD=E6=B7=BB=E5=8A=A0=E5=AF=B9=E5=AF=B9=E5=BA=94=E7=9A=84?= =?UTF-8?q?=20Site=20=E7=9A=84=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nonebot_bison/scheduler/manager.py | 6 +++--- nonebot_bison/scheduler/scheduler.py | 9 +++++++-- nonebot_bison/utils/site.py | 3 +++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/nonebot_bison/scheduler/manager.py b/nonebot_bison/scheduler/manager.py index ca02a56..5a94cf1 100644 --- a/nonebot_bison/scheduler/manager.py +++ b/nonebot_bison/scheduler/manager.py @@ -33,9 +33,6 @@ async def init_scheduler(): else: _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): - client_mgr = cast(CookieClientManager, site.client_mgr) - await client_mgr.refresh_client() if not plugin_config.bison_use_browser and site.require_browser: logger.warning(f"{site.name} requires browser, it will not schedule.") continue @@ -47,6 +44,9 @@ async def init_scheduler(): ) platform_name_list = _schedule_class_platform_dict[site] scheduler_dict[site] = Scheduler(site, schedulable_args, platform_name_list) + if is_cookie_client_manager(site.client_mgr): + client_mgr = cast(CookieClientManager, scheduler_dict[site].client_mgr) + await client_mgr.refresh_client() config.register_add_target_hook(handle_insert_new_target) config.register_delete_target_hook(handle_delete_target) diff --git a/nonebot_bison/scheduler/scheduler.py b/nonebot_bison/scheduler/scheduler.py index f94ea87..1cd5ebc 100644 --- a/nonebot_bison/scheduler/scheduler.py +++ b/nonebot_bison/scheduler/scheduler.py @@ -1,3 +1,4 @@ +from typing import cast from dataclasses import dataclass from collections import defaultdict @@ -12,7 +13,7 @@ from ..send import send_msgs from ..types import Target, SubUnit from ..platform import platform_manager from ..utils import Site, ProcessContext -from ..utils.site import SkipRequestException +from ..utils.site import CookieClientManager, SkipRequestException, is_cookie_client_manager @dataclass @@ -40,8 +41,12 @@ class Scheduler: logger.error(f"scheduler config [{self.name}] not found, exiting") raise RuntimeError(f"{self.name} not found") self.scheduler_config = scheduler_config - self.client_mgr = scheduler_config.client_mgr() self.scheduler_config_obj = self.scheduler_config() + if is_cookie_client_manager(scheduler_config.client_mgr): + cookie_client_mgr = cast(type[CookieClientManager], scheduler_config.client_mgr) + self.client_mgr = cookie_client_mgr(self.scheduler_config_obj) + else: + self.client_mgr = scheduler_config.client_mgr() self.schedulable_list = [] self.batch_platform_name_targets_cache = defaultdict(list) diff --git a/nonebot_bison/utils/site.py b/nonebot_bison/utils/site.py index e570e10..2bb5bc0 100644 --- a/nonebot_bison/utils/site.py +++ b/nonebot_bison/utils/site.py @@ -45,6 +45,9 @@ class DefaultClientManager(ClientManager): class CookieClientManager(ClientManager): _site_name: str # 绑定的 site_name,需要使用 create_cookie_client_manager 创建 Client_mgr 时绑定 + def __init__(self, site: "Site") -> None: + self._site = site + @classmethod async def _generate_anonymous_cookie(cls) -> Cookie: return Cookie(