From 517c651c97a3759ed8f0002bdc3486ed8d67c6b9 Mon Sep 17 00:00:00 2001 From: felinae98 <731499577@qq.com> Date: Sun, 31 Jul 2022 23:13:59 +0800 Subject: [PATCH] provides method to avoid update status when api error --- src/plugins/nonebot_bison/platform/bilibili.py | 2 +- src/plugins/nonebot_bison/platform/platform.py | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/plugins/nonebot_bison/platform/bilibili.py b/src/plugins/nonebot_bison/platform/bilibili.py index 9f58534..7d5a763 100644 --- a/src/plugins/nonebot_bison/platform/bilibili.py +++ b/src/plugins/nonebot_bison/platform/bilibili.py @@ -201,7 +201,7 @@ class Bilibililive(StatusChange): info["cover"] = res_dict["data"]["live_room"]["cover"] return info else: - return [] + raise self.ParseTargetException(res.text) def compare_status(self, target: Target, old_status, new_status) -> list[RawPost]: if ( diff --git a/src/plugins/nonebot_bison/platform/platform.py b/src/plugins/nonebot_bison/platform/platform.py index 22c1200..d0e2cf6 100644 --- a/src/plugins/nonebot_bison/platform/platform.py +++ b/src/plugins/nonebot_bison/platform/platform.py @@ -268,6 +268,9 @@ class NewMessage(MessageProcess, abstract=True): class StatusChange(Platform, abstract=True): "Watch a status, and fire a post when status changes" + class FetchError(RuntimeError): + pass + @abstractmethod async def get_status(self, target: Target) -> Any: ... @@ -283,7 +286,11 @@ class StatusChange(Platform, abstract=True): async def fetch_new_post( self, target: Target, users: list[UserSubInfo] ) -> list[tuple[User, list[Post]]]: - new_status = await self.get_status(target) + try: + new_status = await self.get_status(target) + except self.FetchError as err: + logger.warning(f"fetching {self.name}-{target} error: {err}") + return [] res = [] if old_status := self.get_stored_data(target): diff = self.compare_status(target, old_status, new_status)