from datetime import datetime import base64 from astrbot.api import logger from .request import APIClient from .async_mysql import AsyncMySQL from .function_basic import load_template,extract_fields class WZRYFunction: def __init__(self, api_config,db: AsyncMySQL ): self.__api = APIClient() self.__db = db self.__api_config = api_config async def _SELECT_ID(self,name: str): """ 查询ID """ sql = "SELECT id FROM wzydid WHERE name = %s or id = %s" sqlid = await self.__db.fetch_one(sql, (name,name)) return sqlid["id"] if sqlid else None async def all_user(self): """ 查询所有用户 """ sql = "SELECT id,name FROM wzydid" sqlid = await self.__db.fetch_all(sql) return_data = "营地ID\t\t昵称\n" for m in sqlid: return_data += f"{m['id']}\t{m['name']}\n" return return_data async def add_user(self,id: str ,name: str): """ 添加用户 """ self_id = await self._SELECT_ID(id) if self_id is not None: return "该用户已存在,无需重复添加" sql = "INSERT INTO wzydid (id,name) VALUES (%s, %s)" rowcount = await self.__db.execute(sql, (id,name)) if rowcount > 0: return f"id:{id}昵称:{name}\n添加成功" else: return f"id:{id}昵称:{name}\n添加失败,请稍后再试" async def update_user(self,id: str ,name: str): """ 更新用户 """ self_id = await self._SELECT_ID(id) if self_id is None: return "该用户不存在,请先添加用户" sql = "UPDATE wzydid SET name = %s WHERE id = %s" rowcount = await self.__db.execute(sql, (name,id)) if rowcount > 0: return f"id:{id}昵称:{name}\n更新成功" else: return f"id:{id}昵称:{name}\n更新失败,请稍后再试" async def delete_user(self,id: str ): """ 删除用户 """ self_id = await self._SELECT_ID(id) if self_id is None: return "该用户不存在,无需删除" sql = "DELETE FROM wzydid WHERE id = %s" rowcount = await self.__db.execute(sql, (id,)) if rowcount > 0: return f"id:{id}\n删除成功" else: return f"id:{id}\n删除失败,请稍后再试" async def zhanji(self,name: str ,option: str): """ 战绩查询 """ return_data = { "code": 0, "msg": "功能函数未执行", "data": {} } #在配置文件中获取接口配置 api_config = self.__api_config["wzry_zhanji"] # ID查询 sql_id = await self._SELECT_ID(name) if sql_id is None: return_data["msg"] = "未查询到该用户,请确认输入正确的昵称或营地ID" return return_data #更新参数 api_config["params"]["id"] = sql_id api_config["params"]["option"] = option # 需要提取的字段 fields = ["gametime","killcnt","deadcnt","assistcnt","gameresult","mvpcnt","losemvp","mapName", "oldMasterMatchScore","newMasterMatchScore","usedTime","winNum","failNum","roleJobName","stars","desc", "gradeGame","heroIcon","godLikeCnt", "firstBlood","hero1TripleKillCnt","hero1UltraKillCnt","hero1RampageCnt","evaluateUrlV3","mvpUrlV3"] # 处理返回数据 try: # 获取数据 data = await self.__api.get(api_config["url"],api_config["params"],"data") if not data: return_data["msg"] = "获取接口信息失败" return return_data # 提取字段 result = extract_fields(data["list"], fields) result = result[:25] # 数据处理 for m in result: minutes = m["usedTime"] // 60 seconds = m["usedTime"] % 60 m["time_str"] = f"{minutes}:{seconds:02d}" return_data["data"] = result except Exception as e: logger.error(f"处理数据时出错: {e}") return_data["msg"] = "处理接口返回信息时出错" # 加载模板 try: return_data["temp"] = load_template("wangzhezhanji.html") except FileNotFoundError as e: logger.error(f"加载模板失败: {e}") return_data["msg"] = "系统错误:模板文件不存在" return return_data return_data["code"] = 200 return return_data async def ziliao(self, name: str): return_data = { "code": 0, "msg": "功能函数未执行", "data": {} } # 查询 ID sql_id = await self._SELECT_ID(name) if sql_id is None: return_data["msg"] = "未查询到该用户,请确认输入正确的昵称或营地ID" return return_data api_config = self.__api_config["wzry_ziliao"] api_config["params"]["id"] = sql_id try: data = await self.__api.get(api_config["url"], api_config["params"]) # 转 base64 return_data["data"]["img_base64"] = base64.b64encode(data).decode("utf-8") return_data["code"] = 200 except Exception as e: logger.error(f"处理数据时出错: {e}") return_data["msg"] = "处理接口返回信息时出错" # 加载模板 try: return_data["temp"] = load_template("wzry_zl.html") except FileNotFoundError: logger.error(f"加载模板失败") return_data["msg"] = "系统错误:模板文件不存在" return return_data async def bilei_all(self): """ 查询仇人列表 """ return_data = { "code": 0, "msg": "功能函数未执行", "data": {} } # 查询所有 try: sql = "SELECT * FROM wzrybl" sqlid = await self.__db.fetch_all(sql) except Exception as e: logger.error(f"SQL执行错误: {e}") return_data["msg"] = "处理数据库信息时出错" return return_data # 加载模板 try: return_data["temp"] = load_template("bilei.html") except FileNotFoundError as e: logger.error(f"加载模板失败: {e}") return_data["msg"] = "系统错误:模板文件不存在" return return_data return_data["data"]["lists"] = sqlid return_data["code"] = 200 return return_data async def bilei_add(self,name:str, text:str, user:str): """ 仇人 添加 """ return_data = { "code": 0, "msg": "功能函数未执行", "data": {} } # 获取系统时间 now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 插入数据 try: sql = "INSERT INTO wzrybl (name, text, time, user) VALUES (%s, %s, %s, %s)" await self.__db.execute(sql, (name, text, now, user)) except Exception as e: logger.error(f"SQL执行错误: {e}") return_data["msg"] = "处理数据库信息时出错" return return_data return_data["msg"] = "添加成功\n" return_data["msg"] += "仇人名称:"+name+"\n" return_data["msg"] += "仇人备注:"+text+"\n" return_data["msg"] += "添加时间:"+now+"\n" return_data["msg"] += "记录人:"+user+"\n" return_data["code"] = 200 return return_data async def bilei_select(self,name:str): """ 仇人 查找 """ return_data = { "code": 0, "msg": "功能函数未执行", "data": {} } # 查询数据 try: sql = "SELECT * FROM wzrybl WHERE name LIKE %s" sqlid = await self.__db.fetch_all(sql, ("%"+name+"%",)) except Exception as e: logger.error(f"SQL执行错误: {e}") return_data["msg"] = "处理数据库信息时出错" return return_data # 加载模板 try: return_data["temp"] = load_template("bilei.html") except FileNotFoundError as e: logger.error(f"加载模板失败: {e}") return_data["msg"] = "系统错误:模板文件不存在" return return_data return_data["data"]["lists"] = sqlid return_data["code"] = 200 return return_data async def bilei_update(self, id:int, name:str, text:str, user:str): """ 仇人 修改 ID 名称 备注 """ return_data = { "code": 0, "msg": "功能函数未执行", "data": {} } # 获取系统时间 now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 查询数据 try: sql = "UPDATE wzrybl SET name = %s, text = %s, time = %s, user = %s WHERE id = %s" rowcount = await self.__db.execute(sql, (name, text, now, user, id)) if rowcount > 0: return_data["msg"] = "修改成功\n" return_data["msg"] += "仇人名称:"+name+"\n" return_data["msg"] += "仇人备注:"+text+"\n" return_data["msg"] += "修改时间:"+now+"\n" return_data["msg"] += "记录人:"+user+"\n" return_data["code"] = 200 else: return_data["msg"] = "修改失败,未找到对应记录" except Exception as e: logger.error(f"SQL执行错误: {e}") return_data["msg"] = "处理数据库信息时出错" return return_data return return_data async def bilei_delete(self, id:int): """ 仇人 删除 ID """ return_data = { "code": 0, "msg": "功能函数未执行", "data": {} } # 查询数据 try: sql = "DELETE FROM wzrybl WHERE id = %s" rowcount = await self.__db.execute(sql, (id,)) if rowcount > 0: return_data["msg"] = "删除成功\n" return_data["code"] = 200 else: return_data["msg"] = "删除失败,未找到对应记录" except Exception as e: logger.error(f"SQL执行错误: {e}") return_data["msg"] = "处理数据库信息时出错" return return_data return return_data