mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-09-29 08:39:59 +08:00
first_commit .gitignore
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
import json
|
||||
import httpx
|
||||
from pathlib import Path
|
||||
from configs.config import plugins2name_dict
|
||||
|
||||
_DATA_PATH = Path() / "data" / "manager" / "plugin_list.json"
|
||||
|
||||
|
||||
def get_store_plugin_info(plugin: str) -> str:
|
||||
store_plugin_list = _get_store_plugin_list()
|
||||
if plugin in store_plugin_list:
|
||||
plugin = store_plugin_list[plugin]
|
||||
return (
|
||||
f"ID: {plugin['id']}\n"
|
||||
f"Name: {plugin['name']}\n"
|
||||
f"Description: {plugin['desc']}\n"
|
||||
f"Version: {httpx.get('https://pypi.org/pypi/'+plugin['link']+'/json').json()['info']['version']}\n"
|
||||
f"Author: {plugin['author']}\n"
|
||||
f"Repo: https://github.com/{plugin['repo']}"
|
||||
)
|
||||
else:
|
||||
return "查无此插件!"
|
||||
|
||||
|
||||
def get_group_plugin_list(group_id: str) -> dict:
|
||||
plugin_list = _load_plugin_list()
|
||||
group_plugin_list = {}
|
||||
for plugin in plugin_list:
|
||||
if group_id in plugin_list[plugin]:
|
||||
group_plugin_list[plugin] = plugin_list[plugin][group_id]
|
||||
else:
|
||||
group_plugin_list[plugin] = plugin_list[plugin]["default"]
|
||||
return group_plugin_list
|
||||
|
||||
|
||||
def get_store_pulgin_list() -> str:
|
||||
message = "商店插件列表如下:"
|
||||
for plugin in _get_store_plugin_list():
|
||||
if plugin in _load_plugin_list() or plugin == "nonebot_plugin_manager":
|
||||
message += f"\n[o] {plugin}"
|
||||
else:
|
||||
message += f"\n[x] {plugin}"
|
||||
return message
|
||||
|
||||
|
||||
def auto_update_plugin_list(loaded_plugin_list: list, keep_history: bool = False):
|
||||
plugin_list = _load_plugin_list()
|
||||
for plugin in loaded_plugin_list:
|
||||
if plugin not in plugin_list:
|
||||
plugin_list[plugin] = {"default": True}
|
||||
if not keep_history:
|
||||
plugin_list = {
|
||||
key: plugin_list[key] for key in plugin_list if key in loaded_plugin_list
|
||||
}
|
||||
_dump_plugin_list(plugin_list)
|
||||
return plugin_list
|
||||
|
||||
|
||||
def block_plugin(group_id: str, *plugins: str):
|
||||
return _update_plugin_list(group_id, True, *plugins)
|
||||
|
||||
|
||||
def unblock_plugin(group_id: str, *plugins: str):
|
||||
return _update_plugin_list(group_id, False, *plugins)
|
||||
|
||||
|
||||
# 获取商店插件列表
|
||||
def _get_store_plugin_list() -> dict:
|
||||
store_plugin_list = {}
|
||||
for plugin in httpx.get(
|
||||
"https://cdn.jsdelivr.net/gh/nonebot/nonebot2@master/docs/.vuepress/public/plugins.json"
|
||||
).json():
|
||||
store_plugin_list.update({plugin["id"]: plugin})
|
||||
return store_plugin_list
|
||||
|
||||
|
||||
# 更新插件列表
|
||||
def _update_plugin_list(group_id: str, block: bool, *plugins: str) -> str:
|
||||
plugin_list = _load_plugin_list()
|
||||
message = "结果如下:"
|
||||
operate = "屏蔽" if block else "启用"
|
||||
for plugin in plugins:
|
||||
for values in plugins2name_dict.values():
|
||||
if plugin in values:
|
||||
plugin = list(plugins2name_dict.keys())[list(plugins2name_dict.values()).index(values)]
|
||||
# print(plugin)
|
||||
break
|
||||
message += "\n"
|
||||
if plugin in plugin_list:
|
||||
if (
|
||||
not group_id in plugin_list[plugin]
|
||||
or plugin_list[plugin][group_id] == block
|
||||
):
|
||||
plugin_list[plugin][group_id] = not block
|
||||
message += f"插件{plugin}{operate}成功!"
|
||||
print(plugin_list[plugin][group_id])
|
||||
else:
|
||||
message += f"插件{plugin}已经{operate}!"
|
||||
else:
|
||||
message += f"插件{plugin}不存在!"
|
||||
_dump_plugin_list(plugin_list)
|
||||
return message
|
||||
|
||||
|
||||
# 加载插件列表
|
||||
def _load_plugin_list() -> dict:
|
||||
try:
|
||||
return json.load(_DATA_PATH.open("r", encoding="utf-8"))
|
||||
except FileNotFoundError:
|
||||
return {}
|
||||
|
||||
|
||||
# 保存插件列表
|
||||
def _dump_plugin_list(plugin_list: dict):
|
||||
_DATA_PATH.parent.mkdir(parents=True, exist_ok=True)
|
||||
json.dump(
|
||||
plugin_list,
|
||||
_DATA_PATH.open("w", encoding="utf-8"),
|
||||
indent=4,
|
||||
separators=(",", ": "),
|
||||
)
|
||||
Reference in New Issue
Block a user