@@ -680,11 +680,18 @@ async def install_plugin(self, repo_url: str, proxy=""):
680680
681681 return plugin_info
682682
683- async def uninstall_plugin (self , plugin_name : str ):
683+ async def uninstall_plugin (
684+ self ,
685+ plugin_name : str ,
686+ delete_config : bool = False ,
687+ delete_data : bool = False ,
688+ ):
684689 """卸载指定的插件。
685690
686691 Args:
687692 plugin_name (str): 要卸载的插件名称
693+ delete_config (bool): 是否删除插件配置文件,默认为 False
694+ delete_data (bool): 是否删除插件数据,默认为 False
688695
689696 Raises:
690697 Exception: 当插件不存在、是保留插件时,或删除插件文件夹失败时抛出异常
@@ -714,13 +721,59 @@ async def uninstall_plugin(self, plugin_name: str):
714721
715722 await self ._unbind_plugin (plugin_name , plugin .module_path )
716723
724+ # 删除插件文件夹
717725 try :
718726 remove_dir (os .path .join (ppath , root_dir_name ))
719727 except Exception as e :
720728 raise Exception (
721729 f"移除插件成功,但是删除插件文件夹失败: { e !s} 。您可以手动删除该文件夹,位于 addons/plugins/ 下。" ,
722730 )
723731
732+ # 删除插件配置文件
733+ if delete_config and root_dir_name :
734+ config_file = os .path .join (
735+ self .plugin_config_path ,
736+ f"{ root_dir_name } _config.json" ,
737+ )
738+ if os .path .exists (config_file ):
739+ try :
740+ os .remove (config_file )
741+ logger .info (f"已删除插件 { plugin_name } 的配置文件" )
742+ except Exception as e :
743+ logger .warning (f"删除插件配置文件失败: { e !s} " )
744+
745+ # 删除插件持久化数据
746+ # 注意:需要检查两个可能的目录名(plugin_data 和 plugins_data)
747+ # data/temp 目录可能被多个插件共享,不自动删除以防误删
748+ if delete_data and root_dir_name :
749+ data_base_dir = os .path .dirname (ppath ) # data/
750+
751+ # 删除 data/plugin_data 下的插件持久化数据(单数形式,新版本)
752+ plugin_data_dir = os .path .join (
753+ data_base_dir , "plugin_data" , root_dir_name
754+ )
755+ if os .path .exists (plugin_data_dir ):
756+ try :
757+ remove_dir (plugin_data_dir )
758+ logger .info (
759+ f"已删除插件 { plugin_name } 的持久化数据 (plugin_data)"
760+ )
761+ except Exception as e :
762+ logger .warning (f"删除插件持久化数据失败 (plugin_data): { e !s} " )
763+
764+ # 删除 data/plugins_data 下的插件持久化数据(复数形式,旧版本兼容)
765+ plugins_data_dir = os .path .join (
766+ data_base_dir , "plugins_data" , root_dir_name
767+ )
768+ if os .path .exists (plugins_data_dir ):
769+ try :
770+ remove_dir (plugins_data_dir )
771+ logger .info (
772+ f"已删除插件 { plugin_name } 的持久化数据 (plugins_data)"
773+ )
774+ except Exception as e :
775+ logger .warning (f"删除插件持久化数据失败 (plugins_data): { e !s} " )
776+
724777 async def _unbind_plugin (self , plugin_name : str , plugin_module_path : str ):
725778 """解绑并移除一个插件。
726779
0 commit comments