mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2026-05-10 18:57:56 +08:00
🔀 merge
This commit is contained in:
@@ -3,8 +3,9 @@ from pkgutil import iter_modules
|
||||
from collections import defaultdict
|
||||
from importlib import import_module
|
||||
|
||||
from .platform import Platform, make_no_target_group
|
||||
from ..utils import Site
|
||||
from ..plugin_config import plugin_config
|
||||
from .platform import Platform, make_no_target_group
|
||||
|
||||
_package_dir = str(Path(__file__).resolve().parent)
|
||||
for _, module_name, _ in iter_modules([_package_dir]):
|
||||
@@ -25,9 +26,20 @@ for name, platform_list in _platform_list.items():
|
||||
platform_manager[name] = make_no_target_group(platform_list)
|
||||
|
||||
|
||||
def _get_unavailable_platforms() -> dict[str, str]:
|
||||
res = {}
|
||||
for name, platform in platform_manager.items():
|
||||
if platform.site.require_browser and not plugin_config.bison_use_browser:
|
||||
res[name] = "需要启用 bison_use_browser"
|
||||
return res
|
||||
|
||||
|
||||
# platform => reason for not available
|
||||
unavailable_paltforms: dict[str, str] = _get_unavailable_platforms()
|
||||
|
||||
|
||||
site_manager: dict[str, type[Site]] = {}
|
||||
for site in Site.registry:
|
||||
if not hasattr(site, "name"):
|
||||
continue
|
||||
site_manager[site.name] = site
|
||||
|
||||
|
||||
@@ -236,15 +236,19 @@ def retry_for_352(api_func: Callable[[TBilibili, Target], Awaitable[list[DynRawP
|
||||
case RetryState.NROMAL | RetryState.REFRESH | RetryState.RAISE:
|
||||
try:
|
||||
res = await api_func(bls, *args, **kwargs)
|
||||
except ApiCode352Error:
|
||||
logger.error("API 352 错误")
|
||||
except ApiCode352Error as e:
|
||||
logger.warning("本次 Bilibili API 请求返回 352 错误码")
|
||||
await _retry_fsm.emit(RetryEvent.REQUEST_AND_RAISE)
|
||||
|
||||
if _retry_fsm.current_state == RetryState.RAISE:
|
||||
raise e
|
||||
|
||||
return []
|
||||
else:
|
||||
await _retry_fsm.emit(RetryEvent.REQUEST_AND_SUCCESS)
|
||||
return res
|
||||
case RetryState.BACKOFF:
|
||||
logger.warning("回避中,不请求")
|
||||
logger.warning("本次 Bilibili 请求回避中,不请求")
|
||||
await _retry_fsm.emit(RetryEvent.IN_BACKOFF_TIME)
|
||||
return []
|
||||
case _:
|
||||
|
||||
@@ -68,7 +68,7 @@ class BilibiliClientManager(ClientManager):
|
||||
|
||||
class BilibiliSite(Site):
|
||||
name = "bilibili.com"
|
||||
schedule_setting = {"seconds": 50}
|
||||
schedule_setting = {"seconds": 60}
|
||||
schedule_type = "interval"
|
||||
client_mgr = BilibiliClientManager
|
||||
require_browser = True
|
||||
|
||||
@@ -9,8 +9,8 @@ from bs4 import BeautifulSoup as bs
|
||||
from ..post import Post
|
||||
from .platform import NewMessage
|
||||
from ..types import Target, RawPost
|
||||
from ..utils import Site, text_similarity
|
||||
from ..utils.site import create_cookie_client_manager
|
||||
from ..utils import Site, text_fletten, text_similarity
|
||||
|
||||
|
||||
class RssSite(Site):
|
||||
@@ -34,7 +34,7 @@ class RssPost(Post):
|
||||
for p in soup.find_all("p"):
|
||||
p.insert_after("\n")
|
||||
|
||||
return text_fletten(soup.get_text())
|
||||
return soup.get_text()
|
||||
|
||||
|
||||
class Rss(NewMessage):
|
||||
@@ -84,7 +84,7 @@ class Rss(NewMessage):
|
||||
async def parse(self, raw_post: RawPost) -> Post:
|
||||
title = raw_post.get("title", "")
|
||||
soup = bs(raw_post.description, "html.parser")
|
||||
desc = soup.text.strip()
|
||||
desc = raw_post.description
|
||||
title, desc = self._text_process(title, desc)
|
||||
pics = [x.attrs["src"] for x in soup("img")]
|
||||
if raw_post.get("media_content"):
|
||||
|
||||
Reference in New Issue
Block a user