diff options
| author | Kyomotoi <0w0@imki.moe> | 2023-06-17 00:44:18 +0800 | 
|---|---|---|
| committer | Kyomotoi <0w0@imki.moe> | 2023-06-17 00:44:18 +0800 | 
| commit | d32566a4880fad6502e24d01fd09d4ca341a32cd (patch) | |
| tree | 3ba4014915d1a066a00e0e72e92229de36c6f7d7 /ATRI/plugins/manage | |
| parent | 237fe0246c126456130cdd909a24dd2b67f15942 (diff) | |
| download | ATRI-d32566a4880fad6502e24d01fd09d4ca341a32cd.tar.gz ATRI-d32566a4880fad6502e24d01fd09d4ca341a32cd.tar.bz2 ATRI-d32566a4880fad6502e24d01fd09d4ca341a32cd.zip | |
🐛 修复获取 Nonebot 商店插件列表潜在的bug
Diffstat (limited to 'ATRI/plugins/manage')
| -rw-r--r-- | ATRI/plugins/manage/plugin.py | 29 | 
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): | 
