From 95301c5bbc0d86a04001a63f2693fbdb4458613b Mon Sep 17 00:00:00 2001 From: KawakazeNotFound Date: Fri, 7 Nov 2025 16:13:00 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E6=96=B0=E5=A2=9Ejson=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=BF=81=E7=A7=BB=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nonebot_plugin_llmchat/__init__.py | 4 ++++ nonebot_plugin_llmchat/migration.py | 36 ++++++++++++++++++----------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/nonebot_plugin_llmchat/__init__.py b/nonebot_plugin_llmchat/__init__.py index 4ea4e5a..d8b3393 100755 --- a/nonebot_plugin_llmchat/__init__.py +++ b/nonebot_plugin_llmchat/__init__.py @@ -52,6 +52,7 @@ if TYPE_CHECKING: from .db_manager import DatabaseManager from .models import ChatHistory, ChatMessage, GroupChatState, PrivateChatState +from .migration import migrate_from_json_to_db __plugin_meta__ = PluginMetadata( name="llmchat", @@ -800,6 +801,9 @@ async def load_state(): @driver.on_startup async def init_plugin(): logger.info("插件启动初始化") + # 首先进行数据迁移(如果存在 JSON 文件) + logger.info("检查是否需要进行 JSON 数据迁移...") + await migrate_from_json_to_db(Config(llmchat=plugin_config)) await load_state() # 每30分钟保存一次状态作为备份(已开启实时保存) scheduler.add_job(save_state, "interval", minutes=30) diff --git a/nonebot_plugin_llmchat/migration.py b/nonebot_plugin_llmchat/migration.py index 507d0ca..023cdaa 100644 --- a/nonebot_plugin_llmchat/migration.py +++ b/nonebot_plugin_llmchat/migration.py @@ -10,7 +10,7 @@ from datetime import datetime from nonebot import logger -from .config import Config, get_plugin_config +from .config import Config from .db_manager import DatabaseManager from .models import ChatHistory, GroupChatState, PrivateChatState @@ -35,6 +35,9 @@ async def migrate_from_json_to_db(plugin_config: Config): logger.info("未找到群组状态 JSON 文件,跳过迁移") return + total_migrated_groups = 0 + total_migrated_users = 0 + try: # 迁移群组状态 logger.info(f"正在迁移群组状态数据: {data_file}") @@ -77,7 +80,8 @@ async def migrate_from_json_to_db(plugin_config: Config): logger.error(f"迁移群组 {gid_str} 失败: {e}") logger.info(f"成功迁移 {migrated_groups} 个群组的状态") - + total_migrated_groups = migrated_groups + except Exception as e: logger.error(f"迁移群组状态失败: {e}") @@ -123,30 +127,36 @@ async def migrate_from_json_to_db(plugin_config: Config): logger.error(f"迁移用户 {uid_str} 失败: {e}") logger.info(f"成功迁移 {migrated_users} 个用户的私聊状态") + total_migrated_users = migrated_users except Exception as e: logger.error(f"迁移私聊状态失败: {e}") - logger.info("JSON 迁移完成") + # 迁移成功后,重命名 JSON 文件为 .migrated + if total_migrated_groups > 0 or total_migrated_users > 0: + logger.info("迁移成功,开始重命名 JSON 文件...") + rename_json_files_to_migrated() + + logger.info(f"JSON 迁移完成(群组: {total_migrated_groups},用户: {total_migrated_users})") -async def backup_json_files(): - """备份旧的 JSON 文件""" +def rename_json_files_to_migrated(): + """将已迁移的 JSON 文件重命名为 .migrated""" if not data_file: return if os.path.exists(data_file): - backup_file = f"{data_file}.backup" + migrated_file = f"{data_file}.migrated" try: - os.rename(data_file, backup_file) - logger.info(f"已备份群组状态文件: {backup_file}") + os.rename(data_file, migrated_file) + logger.info(f"已将群组状态文件重命名为: {migrated_file}") except Exception as e: - logger.warning(f"备份文件失败: {e}") + logger.warning(f"重命名文件失败: {e}") if private_data_file and os.path.exists(private_data_file): - backup_file = f"{private_data_file}.backup" + migrated_file = f"{private_data_file}.migrated" try: - os.rename(private_data_file, backup_file) - logger.info(f"已备份私聊状态文件: {backup_file}") + os.rename(private_data_file, migrated_file) + logger.info(f"已将私聊状态文件重命名为: {migrated_file}") except Exception as e: - logger.warning(f"备份文件失败: {e}") + logger.warning(f"重命名文件失败: {e}")