From d32566a4880fad6502e24d01fd09d4ca341a32cd Mon Sep 17 00:00:00 2001
From: Kyomotoi <0w0@imki.moe>
Date: Sat, 17 Jun 2023 00:44:18 +0800
Subject: =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=E8=8E=B7=E5=8F=96=20N?=
 =?UTF-8?q?onebot=20=E5=95=86=E5=BA=97=E6=8F=92=E4=BB=B6=E5=88=97=E8=A1=A8?=
 =?UTF-8?q?=E6=BD=9C=E5=9C=A8=E7=9A=84bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ATRI/plugins/manage/plugin.py | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

(limited to 'ATRI')

diff --git a/ATRI/plugins/manage/plugin.py b/ATRI/plugins/manage/plugin.py
index 044216d..c5742f0 100644
--- a/ATRI/plugins/manage/plugin.py
+++ b/ATRI/plugins/manage/plugin.py
@@ -2,6 +2,7 @@ import json
 from pathlib import Path
 from typing import Union
 from pip import main as pipmain
+from asyncio import as_completed
 
 import nonebot
 
@@ -12,9 +13,14 @@ from ATRI.service import Service, ServiceTools
 from .models import NonebotPluginInfo
 
 
-_NONEBOT_STORE_URL = (
-    "https://jsd.imki.moe/gh/nonebot/nonebot2@master/website/static/plugins.json"
-)
+_NONEBOT_STORE_URLS = [
+    "https://nonebot.dev/plugins.json",
+    "https://jsd.imki.moe/gh/nonebot/nonebot2@master/website/static/plugins.json",
+    "https://raw.fastgit.org/nonebot/nonebot2/master/website/static/plugins.json",
+    "https://cdn.jsdelivr.net/gh/nonebot/nonebot2@master/website/static/plugins.json",
+    "https://cdn.staticaly.com/gh/nonebot/nonebot2@master/website/static/plugins.json",
+    "https://jsd.cdn.zzko.cn/gh/nonebot/nonebot2@master/website/static/plugins.json",
+]
 
 _plugin_list = dict()
 
@@ -53,12 +59,17 @@ class NonebotPluginManager:
         global _plugin_list
 
         if not _plugin_list:
-            try:
-                data = await request.get(_NONEBOT_STORE_URL)
-                _plugin_list = {plugin["module_name"]: plugin for plugin in data.json()}
-                log.success("刷新 Nonebot 商店成功")
-            except Exception:
-                log.warning("刷新 Nonebot 商店失败")
+            tasks = [request.get(url) for url in _NONEBOT_STORE_URLS]
+            for future in as_completed(tasks, timeout=114514):
+                try:
+                    data = await future
+                    _plugin_list = {
+                        plugin["module_name"]: plugin for plugin in data.json()
+                    }
+                    log.success("刷新 Nonebot 商店成功")
+                    return
+                except Exception:
+                    log.warning("刷新 Nonebot 商店失败, 尝试下一个链接")
 
     def get_plugin_info(self) -> Union[NonebotPluginInfo, None]:
         if plugin_data := _plugin_list.get(self._plugin_name):
-- 
cgit v1.2.3