|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
报错代码:
- [ERROR] uvicorn | Traceback (most recent call last):
- File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\zhenxun-bot-BZ9TT0q4-py3.9\lib\site-packages\starlette\routing.py", line 621, in lifespan
- async with self.lifespan_context(app):
- File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\zhenxun-bot-BZ9TT0q4-py3.9\lib\site-packages\starlette\routing.py", line 518, in __aenter__
- await self._router.startup()
- File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\zhenxun-bot-BZ9TT0q4-py3.9\lib\site-packages\starlette\routing.py", line 600, in startup
- handler()
- File "C:\zhenxun_bot-main\basic_plugins\init_plugin_config\__init__.py", line 45, in _
- init_plugins_config(DATA_PATH)
- File "C:\zhenxun_bot-main\basic_plugins\init_plugin_config\init_plugins_config.py", line 99, in init_plugins_config
- if _data.get(plugin) and k in _data[plugin].keys():
- AttributeError: 'str' object has no attribute 'keys'
复制代码
文件代码:- from pathlib import Path
- from ruamel.yaml import round_trip_load, round_trip_dump, YAML
- from utils.manager import admin_manager, plugins_manager
- from configs.config import Config
- from services.log import logger
- from utils.utils import get_matchers
- from ruamel import yaml
- import nonebot
- _yaml = YAML(typ="safe")
- def init_plugins_config(data_path):
- """
- 初始化插件数据配置
- """
- plugins2config_file = data_path / "configs" / "plugins2config.yaml"
- plugins2config_file.parent.mkdir(parents=True, exist_ok=True)
- _data = {}
- if plugins2config_file.exists():
- _data = _yaml.load(open(plugins2config_file, "r", encoding="utf8"))
- _matchers = get_matchers()
- for matcher in _matchers:
- _plugin = nonebot.plugin.get_plugin(matcher.plugin_name)
- try:
- _module = _plugin.module
- except AttributeError:
- continue
- try:
- plugin_version = _module.__getattribute__("__plugin_version__")
- except AttributeError:
- plugin_version = None
- try:
- plugin_configs = _module.__getattribute__("__plugin_configs__")
- except AttributeError:
- continue
- # 插件配置版本更新或为Version为None或不在存储配置内
- if (
- plugin_version is None
- or (
- _data.get(matcher.plugin_name)
- and _data[matcher.plugin_name].keys() != plugin_configs.keys()
- )
- or plugin_version > plugins_manager.get(matcher.plugin_name)["version"]
- or matcher.plugin_name not in _data.keys()
- ):
- for key in plugin_configs:
- if isinstance(plugin_configs[key], dict):
- Config.add_plugin_config(
- matcher.plugin_name,
- key,
- plugin_configs[key].get("value"),
- help_=plugin_configs[key].get("help"),
- default_value=plugin_configs[key].get("default_value"),
- _override=True,
- )
- else:
- Config.add_plugin_config(matcher.plugin_name, key, plugin_configs[key])
- else:
- plugin_configs = _data[matcher.plugin_name]
- for key in plugin_configs:
- Config.add_plugin_config(
- matcher.plugin_name,
- key,
- plugin_configs[key]["value"],
- help_=plugin_configs[key]["help"],
- default_value=plugin_configs[key]["default_value"],
- _override=True,
- )
- if not Config.is_empty():
- Config.save()
- _data = round_trip_load(open(plugins2config_file, encoding="utf8"))
- for plugin in _data.keys():
- try:
- plugin_name = plugins_manager.get(plugin)["plugin_name"]
- except (AttributeError, TypeError):
- plugin_name = plugin
- _data[plugin].yaml_set_start_comment(plugin_name, indent=2)
- # 初始化未设置的管理员权限等级
- for k, v in Config.get_admin_level_data():
- admin_manager.set_admin_level(k, v)
- # 存完插件基本设置
- with open(plugins2config_file, "w", encoding="utf8") as wf:
- round_trip_dump(
- _data, wf, indent=2, Dumper=yaml.RoundTripDumper, allow_unicode=True
- )
- # 再开始读取用户配置
- user_config_file = Path() / "configs" / "config.yaml"
- _data = {}
- _tmp_data = {}
- if user_config_file.exists():
- with open(user_config_file, "r", encoding="utf8") as f:
- _data = _yaml.load(f)
- # 数据替换
- for plugin in Config.keys():
- _tmp_data[plugin] = {}
- for k in Config[plugin].keys():
- if _data.get(plugin) and k in _data[plugin].keys():
- Config.set_config(plugin, k, _data[plugin][k])
- if level2module := Config.get_level2module(plugin, k):
- try:
- admin_manager.set_admin_level(level2module, _data[plugin][k])
- except KeyError:
- logger.warning(f"{level2module} 设置权限等级失败:{_data[plugin][k]}")
- _tmp_data[plugin][k] = Config.get_config(plugin, k)
- Config.save()
- temp_file = Path() / "configs" / "temp_config.yaml"
- try:
- with open(temp_file, "w", encoding="utf8") as wf:
- yaml.dump(
- _tmp_data, wf, Dumper=yaml.RoundTripDumper, allow_unicode=True
- )
- with open(temp_file, "r", encoding="utf8") as rf:
- _data = round_trip_load(rf)
- # 添加注释
- for plugin in _data.keys():
- rst = ""
- plugin_name = None
- try:
- plugin_data = Config.get(plugin)
- for x in list(Config.get(plugin).keys()):
- try:
- _x = plugin_data[x].get("name")
- if _x:
- plugin_name = _x
- except AttributeError:
- pass
- except (KeyError, AttributeError):
- plugin_name = None
- if not plugin_name:
- try:
- plugin_name = plugins_manager.get(plugin)["plugin_name"]
- except (AttributeError, TypeError):
- plugin_name = plugin
- plugin_name = (
- plugin_name.replace("[Hidden]", "")
- .replace("[Superuser]", "")
- .replace("[Admin]", "")
- .strip()
- )
- rst += plugin_name + "\n"
- for k in _data[plugin].keys():
- rst += f'{k}: {Config[plugin][k]["help"]}' + "\n"
- _data[plugin].yaml_set_start_comment(rst[:-1], indent=2)
- with open(Path() / "configs" / "config.yaml", "w", encoding="utf8") as wf:
- round_trip_dump(
- _data, wf, Dumper=yaml.RoundTripDumper, allow_unicode=True
- )
- except Exception as e:
- logger.error(f"生成简易配置注释错误 {type(e)}:{e}")
- if temp_file.exists():
- temp_file.unlink()
复制代码
另一个文件的代码:
|
|