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(-) 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