@@ -158,22 +158,21 @@ def _is_expected_nightly_fetch_error(exc: BaseException) -> bool:
158158 aiohttp .ClientError ,
159159 JSONDecodeError ,
160160 )
161- to_check = [exc ]
162- checked : set [int ] = set ()
163- while to_check :
164- current = to_check .pop ()
165- if id (current ) in checked :
166- continue
167- checked .add (id (current ))
168- if isinstance (current , expected_types ):
161+
162+ def _matches (error : BaseException | None ) -> bool :
163+ if error is None :
164+ return False
165+ if isinstance (error , expected_types ):
169166 return True
170- if str (current ).startswith ("请求失败,状态码:" ):
167+ if str (error ).startswith ("请求失败,状态码:" ):
171168 return True
172- if current .__cause__ :
173- to_check .append (current .__cause__ )
174- if current .__context__ :
175- to_check .append (current .__context__ )
176- return False
169+ return False
170+
171+ return (
172+ _matches (exc )
173+ or _matches (getattr (exc , "__cause__" , None ))
174+ or _matches (getattr (exc , "__context__" , None ))
175+ )
177176
178177 async def get_nightly_release (self ) -> dict | None :
179178 nightly_release_url = f"{ self .GITHUB_RELEASE_API } /tags/{ self .NIGHTLY_TAG } "
@@ -205,7 +204,7 @@ async def get_releases_with_nightly(self, latest: bool = True) -> list:
205204 releases .insert (0 , nightly_release )
206205 return releases
207206
208- async def _resolve_latest (self , releases : list ) -> tuple [str , str ]:
207+ def _resolve_latest (self , releases : list ) -> tuple [str , str ]:
209208 latest_release = next (
210209 (
211210 item
@@ -222,12 +221,12 @@ async def _resolve_latest(self, releases: list) -> tuple[str, str]:
222221 raise Exception ("当前已经是最新版本。" )
223222 return latest_version , latest_release ["zipball_url" ]
224223
225- async def _resolve_nightly (self ) -> tuple [str , str ]:
224+ def _resolve_nightly (self ) -> tuple [str , str ]:
226225 return self .NIGHTLY_TAG , (
227226 f"https://github.com/AstrBotDevs/AstrBot/archive/refs/tags/{ self .NIGHTLY_TAG } .zip"
228227 )
229228
230- async def _resolve_tag (self , releases : list , version_str : str ) -> tuple [str , str ]:
229+ def _resolve_tag (self , releases : list , version_str : str ) -> tuple [str , str ]:
231230 for data in releases :
232231 if data ["tag_name" ] == version_str :
233232 return version_str , data ["zipball_url" ]
@@ -250,12 +249,12 @@ async def update(self, reboot=False, latest=True, version=None, proxy="") -> Non
250249 version_str = str (version ) if version is not None else ""
251250 if latest :
252251 releases = await self .get_releases (latest = True )
253- target_version , file_url = await self ._resolve_latest (releases )
252+ target_version , file_url = self ._resolve_latest (releases )
254253 elif version_str .lower () == self .NIGHTLY_TAG :
255- target_version , file_url = await self ._resolve_nightly ()
254+ target_version , file_url = self ._resolve_nightly ()
256255 elif version_str .startswith ("v" ):
257256 releases = await self .get_releases (latest = False )
258- target_version , file_url = await self ._resolve_tag (releases , version_str )
257+ target_version , file_url = self ._resolve_tag (releases , version_str )
259258 else :
260259 target_version , file_url = self ._resolve_commit (version_str )
261260
0 commit comments