From 2ebf83680b7614d97f508a7ad1148c6ff78878db Mon Sep 17 00:00:00 2001 From: qsc Date: Fri, 5 Dec 2025 12:54:25 +0800 Subject: [PATCH] 11 --- core/aiosqlite.py | 24 +++++-- core/jx3_service.py | 20 +++--- api_config.json => data/api_config.json | 0 data/local_data.db | Bin 294912 -> 303104 bytes main.py | 81 ++++++++++++++++++------ 5 files changed, 88 insertions(+), 37 deletions(-) rename api_config.json => data/api_config.json (100%) diff --git a/core/aiosqlite.py b/core/aiosqlite.py index 11a4f5a..e1a6cb6 100644 --- a/core/aiosqlite.py +++ b/core/aiosqlite.py @@ -17,26 +17,26 @@ class AsyncSQLite: async def fetch_one(self, sql: str, params=None): await self.init() - async with self.conn.execute(sql, params or ()) as cursor: + async with self.conn.execute(sql, params or ()) as cursor: # type: ignore row = await cursor.fetchone() return dict(row) if row else None async def fetch_all(self, sql: str, params=None): await self.init() - async with self.conn.execute(sql, params or ()) as cursor: + async with self.conn.execute(sql, params or ()) as cursor: # type: ignore rows = await cursor.fetchall() return [dict(r) for r in rows] async def execute(self, sql: str, params=None): await self.init() - async with self.conn.execute(sql, params or ()): - await self.conn.commit() + async with self.conn.execute(sql, params or ()): # type: ignore + await self.conn.commit() # type: ignore return True async def executemany(self, sql: str, params_list): await self.init() - await self.conn.executemany(sql, params_list) - await self.conn.commit() + await self.conn.executemany(sql, params_list) # type: ignore + await self.conn.commit() # type: ignore return True async def insert_record(self, table: str, data: dict): @@ -56,3 +56,15 @@ class AsyncSQLite: where_clause = " AND ".join(f"`{k}`=?" for k in where.keys()) sql = f"DELETE FROM `{table}` WHERE {where_clause}" return await self.execute(sql, tuple(where.values())) + + async def clear_table(self, table: str): + """ + 清空指定表中的所有记录。 + Args: + table: 要清空的表名。 + Returns: + 如果操作成功则返回 True。 + """ + sql = f"DELETE FROM `{table}`" + # 使用 execute 函数执行 DELETE 语句 + return await self.execute(sql) \ No newline at end of file diff --git a/core/jx3_service.py b/core/jx3_service.py index aa04abe..a06bf56 100644 --- a/core/jx3_service.py +++ b/core/jx3_service.py @@ -4,11 +4,11 @@ from typing import Dict, Any, Optional, List, Union from astrbot.api import logger from .request import APIClient -from .async_mysql import AsyncMySQL +from .aiosqlite import AsyncSQLite from .function_basic import load_template,flatten_field,extract_fields,gold_to_string class JX3Service: - def __init__(self, api_config,db: AsyncMySQL ): + def __init__(self, api_config,db: AsyncSQLite ): self._api = APIClient() self._db = db self._api_config = api_config @@ -82,7 +82,7 @@ class JX3Service: data: Optional[Dict[str, Any]] = await self._base_request( "jx3_richang", "GET", params=params ) - + logger.info(f"richang 接口返回数据: {data}") if not data: return_data["msg"] = "获取接口信息失败" return return_data @@ -101,10 +101,10 @@ class JX3Service: ) # 安全地处理列表索引 - luck = data.get('luck', [None, None, None]) - luck_msg = f"[宠物福缘]:\n{luck[0] or '无'},{luck[1] or '无'},{luck[2] or '无'}\n" - card = data.get('card', [None, None, None]) - card_msg = f"[家园声望·加倍道具]:\n{card[0] or '无'},{card[1] or '无'},{card[2] or '无'}\n" + luck = data.get('luck', []) + luck_msg = f"[宠物福缘]:\n{', '.join(luck)}\n" + card = data.get('card', []) + card_msg = f"[家园声望·加倍道具]:\n{', '.join(card)}\n" team = data.get('team', [None, None, None]) team_msg = f"[武林通鉴·公共任务]:\n{team[0] or '无'}\n[武林通鉴·团队秘境]:\n{team[2] or '无'}\n" @@ -335,7 +335,7 @@ class JX3Service: sql = """ INSERT INTO searchdata (typeName, name, showName, picUrl, searchId, searchDescType) - VALUES (%s, %s, %s, %s, %s, %s) + VALUES (?, ?, ?, ?, ?, ?) """ # 增强数据提取的安全性 values_list = [ @@ -352,7 +352,7 @@ class JX3Service: # 插入数据 try: - await self._db.truncate_table("searchdata") + await self._db.clear_table("searchdata") await self._db.executemany(sql, values_list) except Exception as e: logger.error(f"数据插入失败: {e}") @@ -382,7 +382,7 @@ class JX3Service: # 进一步从 DB 查找 ID try: - sql = "SELECT searchId FROM searchdata WHERE showName=%s" + sql = "SELECT searchId FROM searchdata WHERE showName=?" sqldata = await self._db.fetch_one(sql, (showName,)) searchId = sqldata["searchId"] if sqldata else None except Exception as e: diff --git a/api_config.json b/data/api_config.json similarity index 100% rename from api_config.json rename to data/api_config.json diff --git a/data/local_data.db b/data/local_data.db index 5e2e853867010e6b0aa41f8dea200320e7c6c591..b7d130c3b1ac11c3e8aeabf1e25bff4f7b07ca9a 100644 GIT binary patch delta 47431 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 iXf61eU+^XE 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 diff --git a/main.py b/main.py index c8cce89..b670bbe 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,9 @@ import json +import shutil import asyncio +import pathlib from pathlib import Path +from typing import Union from datetime import datetime from astrbot.api.event import filter, AstrMessageEvent, MessageEventResult, MessageChain @@ -8,7 +11,7 @@ from astrbot.api.star import Context, Star, register, StarTools from astrbot.api import logger from astrbot.api import AstrBotConfig -from .core.async_mysql import AsyncMySQL +from .core.aiosqlite import AsyncSQLite from .core.jx3_service import JX3Service @@ -25,10 +28,22 @@ class Jx3ApiPlugin(Star): #获取配置 self.conf = config # 本地数据存储路径 - self.local_data_dir = StarTools.get_data_dir("astrbot_plugin_jx3") - # api数据文件 - self.api_file_path = Path(__file__).parent / "api_config.json" - # 读取文件内容 + local_data_dir = StarTools.get_data_dir("astrbot_plugin_jx3") + # 插件数据文件路径 + data_file_path = Path(__file__).parent / "data" + # --- 调用函数完成检查和复制 --- + try: + self.file_local_data = self.check_and_copy_db( + local_data_dir=local_data_dir, + db_filename="local_data.db", + default_db_dir=data_file_path + ) + except FileNotFoundError as e: + # 处理默认文件丢失的严重错误 + logger.critical(f"插件初始化失败:{e}") + raise # 中断初始化 + # 读取配置文件 + self.api_file_path = Path(__file__).parent / "data" / "api_config.json" with open(self.api_file_path, 'r', encoding='utf-8') as f: self.api_config = json.load(f) # 初始化数据 @@ -38,25 +53,49 @@ class Jx3ApiPlugin(Star): async def initialize(self): - """可选择实现异步的插件初始化方法,当实例化该插件类之后会自动调用该方法。""" - # 数据库配置 - db_config = { - 'host': '38.12.28.24', - 'port': 3306, - 'user': 'asrtbot', - 'password': 'qsc123456', - 'db': 'asrtbot', - 'charset': 'utf8mb4', - 'autocommit': True - } + """可选择实现异步的插件初始化方法,当实例化该插件类之后会自动调用该方法。""" #创建类实例 - self.db = AsyncMySQL(db_config) + self.db = AsyncSQLite(str(self.file_local_data)) self.jx3fun = JX3Service(self.api_config,self.db) # 周期函数调用 - logger.info("jx3api插件创建实例完成") + + def check_and_copy_db(self, local_data_dir: Union[str, Path], db_filename: str, default_db_dir: Union[str, Path]) -> pathlib.Path: + """ + 检查本地数据目录中是否存在指定的数据库文件。 + 如果不存在,则从默认目录复制该文件。 + Args: + local_data_dir: 目标数据库文件所在的文件夹路径。 + db_filename: 数据库文件的名称 (例如: 'local_data.db')。 + default_db_dir: 默认/源数据库文件所在的文件夹路径。 + Returns: + 最终的数据库文件的完整 pathlib.Path 对象。 + Raises: + FileNotFoundError: 如果默认的源数据库文件不存在。 + """ + # 目标路径 + target_dir = pathlib.Path(local_data_dir) + target_file_path = target_dir / db_filename + # 源文件路径 + source_file_path = pathlib.Path(default_db_dir) / db_filename + # 假设默认文件名为 local_data.db + if not target_file_path.exists(): + logger.warning(f"本地数据库文件 {target_file_path.name} 不存在,正在从默认位置复制...") + # 1. 确保目标文件夹存在 + target_dir.mkdir(parents=True, exist_ok=True) + # 2. 检查源文件是否存在 + if not source_file_path.exists(): + raise FileNotFoundError(f"默认数据库源文件未找到!请检查路径: {source_file_path}") + # 3. 复制文件 + shutil.copy(source_file_path, target_file_path) + logger.info(f"数据库文件已成功复制到: {target_file_path}") + else: + logger.info(f"本地数据库文件 {target_file_path} 已存在,跳过复制。") + return target_file_path + + def inidata(self): """数据初始化""" self.test_server = False @@ -114,7 +153,7 @@ class Jx3ApiPlugin(Star): if data["code"] == 200: yield event.plain_result(data["data"]) else: - yield event.plain_result("msg") + yield event.plain_result(data["msg"]) return except Exception as e: logger.error(f"功能函数执行错误: {e}") @@ -129,7 +168,7 @@ class Jx3ApiPlugin(Star): if data["code"] == 200: yield event.plain_result(data["data"]) else: - yield event.plain_result("msg") + yield event.plain_result(data["msg"]) return except Exception as e: logger.error(f"功能函数执行错误: {e}") @@ -295,7 +334,7 @@ class Jx3ApiPlugin(Star): async def terminate(self): """可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。""" - await self.db.close_pool() + await self.db.close() # 后台进程销毁 self.kf_task.cancel() logger.info("jx3api插件已卸载/停用") \ No newline at end of file