summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyomotoi <[email protected]>2023-06-17 00:44:18 +0800
committerKyomotoi <[email protected]>2023-06-17 00:44:18 +0800
commitd32566a4880fad6502e24d01fd09d4ca341a32cd (patch)
tree3ba4014915d1a066a00e0e72e92229de36c6f7d7
parent237fe0246c126456130cdd909a24dd2b67f15942 (diff)
downloadATRI-d32566a4880fad6502e24d01fd09d4ca341a32cd.tar.gz
ATRI-d32566a4880fad6502e24d01fd09d4ca341a32cd.tar.bz2
ATRI-d32566a4880fad6502e24d01fd09d4ca341a32cd.zip
🐛 修复获取 Nonebot 商店插件列表潜在的bug
-rw-r--r--ATRI/plugins/manage/plugin.py29
1 files changed, 20 insertions, 9 deletions
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):