fix(plugin): fix reloadp command not taking effect

- Use write_plugin_config() instead of directly modifying plugin_config dict
- Add remove_plugin_config() to clear plugin config before reload
- Update plugins to use pconf() and write_plugin_config() for better config management
This commit is contained in:
Rikka
2024-12-02 16:38:21 +08:00
parent a4d0e9bbc3
commit c567641c5c
6 changed files with 19 additions and 10 deletions

View File

@@ -2,7 +2,7 @@ from bridge.context import Context, ContextType
from bridge.reply import Reply, ReplyType from bridge.reply import Reply, ReplyType
from common.log import logger from common.log import logger
from linkai import LinkAIClient, PushMsg from linkai import LinkAIClient, PushMsg
from config import conf, pconf, plugin_config, available_setting from config import conf, pconf, plugin_config, available_setting, write_plugin_config
from plugins import PluginManager from plugins import PluginManager
import time import time
@@ -51,10 +51,10 @@ class ChatClient(LinkAIClient):
local_config["voice_reply_voice"] = False local_config["voice_reply_voice"] = False
if config.get("admin_password"): if config.get("admin_password"):
if not plugin_config.get("Godcmd"): if not pconf("Godcmd"):
plugin_config["Godcmd"] = {"password": config.get("admin_password"), "admin_users": []} write_plugin_config({"Godcmd": {"password": config.get("admin_password"), "admin_users": []} })
else: else:
plugin_config["Godcmd"]["password"] = config.get("admin_password") pconf("Godcmd")["password"] = config.get("admin_password")
PluginManager().instances["GODCMD"].reload() PluginManager().instances["GODCMD"].reload()
if config.get("group_app_map") and pconf("linkai"): if config.get("group_app_map") and pconf("linkai"):

View File

@@ -341,6 +341,14 @@ def write_plugin_config(pconf: dict):
for k in pconf: for k in pconf:
plugin_config[k.lower()] = pconf[k] plugin_config[k.lower()] = pconf[k]
def remove_plugin_config(name: str):
"""
移除待重新加载的插件全局配置
:param name: 待重载的插件名
"""
global plugin_config
plugin_config.pop(name.lower(), None)
def pconf(plugin_name: str) -> dict: def pconf(plugin_name: str) -> dict:
""" """

View File

@@ -477,7 +477,7 @@ class Godcmd(Plugin):
return model return model
def reload(self): def reload(self):
gconf = plugin_config[self.name] gconf = pconf(self.name)
if gconf: if gconf:
if gconf.get("password"): if gconf.get("password"):
self.password = gconf["password"] self.password = gconf["password"]

View File

@@ -289,7 +289,7 @@ class LinkAI(Plugin):
plugin_conf = json.load(f) plugin_conf = json.load(f)
plugin_conf["midjourney"]["enabled"] = False plugin_conf["midjourney"]["enabled"] = False
plugin_conf["summary"]["enabled"] = False plugin_conf["summary"]["enabled"] = False
plugin_config["linkai"] = plugin_conf write_plugin_config({"linkai": plugin_conf})
return plugin_conf return plugin_conf
except Exception as e: except Exception as e:
logger.exception(e) logger.exception(e)

View File

@@ -1,6 +1,6 @@
import os import os
import json import json
from config import pconf, plugin_config, conf from config import pconf, plugin_config, conf, write_plugin_config
from common.log import logger from common.log import logger
@@ -24,13 +24,13 @@ class Plugin:
plugin_conf = json.load(f) plugin_conf = json.load(f)
# 写入全局配置内存 # 写入全局配置内存
plugin_config[self.name] = plugin_conf write_plugin_config({self.name: plugin_conf})
logger.debug(f"loading plugin config, plugin_name={self.name}, conf={plugin_conf}") logger.debug(f"loading plugin config, plugin_name={self.name}, conf={plugin_conf}")
return plugin_conf return plugin_conf
def save_config(self, config: dict): def save_config(self, config: dict):
try: try:
plugin_config[self.name] = config write_plugin_config({self.name: config})
# 写入全局配置 # 写入全局配置
global_config_path = "./plugins/config.json" global_config_path = "./plugins/config.json"
if os.path.exists(global_config_path): if os.path.exists(global_config_path):

View File

@@ -9,7 +9,7 @@ import sys
from common.log import logger from common.log import logger
from common.singleton import singleton from common.singleton import singleton
from common.sorted_dict import SortedDict from common.sorted_dict import SortedDict
from config import conf, write_plugin_config from config import conf, remove_plugin_config, write_plugin_config
from .event import * from .event import *
@@ -161,6 +161,7 @@ class PluginManager:
def reload_plugin(self, name: str): def reload_plugin(self, name: str):
name = name.upper() name = name.upper()
remove_plugin_config(name)
if name in self.instances: if name in self.instances:
for event in self.listening_plugins: for event in self.listening_plugins:
if name in self.listening_plugins[event]: if name in self.listening_plugins[event]: