52 lines
2.4 KiB
Python
52 lines
2.4 KiB
Python
from plugins_func.register import register_function,ToolType, ActionResponse, Action
|
||
from config.logger import setup_logging
|
||
|
||
TAG = __name__
|
||
logger = setup_logging()
|
||
|
||
plugin_loader_function_desc = {
|
||
"type": "function",
|
||
"function": {
|
||
"name": "plugin_loader",
|
||
"description": "当用户想加载或卸载插件/function时,调用此函数:支持的插件列表为[plugins]",
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {
|
||
"oper": {
|
||
"type": "string",
|
||
"description": "load or unload"
|
||
},
|
||
"name":{
|
||
"type": "string",
|
||
"description": "要加载或卸载的插件名字"
|
||
}
|
||
},
|
||
"required": ["oper","name"]
|
||
}
|
||
}
|
||
}
|
||
|
||
@register_function('plugin_loader', plugin_loader_function_desc, ToolType.SYSTEM_CTL)
|
||
def plugin_loader(conn, oper: str, name: str):
|
||
"""插件加载"""
|
||
if oper not in ["load", "unload"]:
|
||
return ActionResponse(action=Action.RESPONSE, result="插件操作失败", response="不支持的操作")
|
||
|
||
cur_support = conn.func_handler.current_support_functions()
|
||
if oper == "load":
|
||
if name in cur_support:
|
||
return ActionResponse(action=Action.RESPONSE, result="插件加载失败", response=f"{name}插件已加载,无需重复加载")
|
||
func = conn.func_handler.function_registry.register_function(name)
|
||
if not func:
|
||
return ActionResponse(action=Action.RESPONSE, result="插件加载失败", response="插件未找到")
|
||
res = f"{name}插件加载成功"
|
||
else:
|
||
if name not in cur_support:
|
||
return ActionResponse(action=Action.RESPONSE, result="插件卸载失败", response=f"{name}插件未加载")
|
||
bOK = conn.func_handler.function_registry.unregister_function(name)
|
||
if not bOK:
|
||
return ActionResponse(action=Action.RESPONSE, result="插件卸载失败", response="插件未找到")
|
||
res = f"{name}插件卸载成功"
|
||
conn.func_handler.upload_functions_desc()
|
||
return ActionResponse(action=Action.RESPONSE, result="插件操作成功", response=res)
|