from datetime import datetime from typing import Any, Dict, List, Optional from astrbot.api import logger from .base import DATA_PROCESSING_ERRORS, BaseDomainService class ArenaService(BaseDomainService): async def zhanji(self, name: str, server: str, mode: str) -> Dict[str, Any]: """战绩""" return_data = self.new_result() # 1. 构造请求参数 params = {"server": server, "name": name, "mode": mode} # 2. 调用基础请求 data: Optional[Dict[str, Any]] = await self.request("jx3_zhanji", params=params) if not data: return_data["msg"] = "查询角色战绩失败" return return_data # 4. 加载模板 if not await self.attach_template(return_data, "zhanji.html"): return return_data return_data["data"] = data return_data["code"] = 200 return return_data async def mingjianpaihang(self, limit: str, mode: str) -> Dict[str, Any]: """名剑排行""" return_data = self.new_result() # 1. 构造请求参数 params = {"limit": limit, "mode": mode} # 2. 调用基础请求 data: Optional[Dict[str, Any]] = await self.request( "jx3_mingjianpaihang", params=params ) if not data: return_data["msg"] = "获取接口数据失败" return return_data return_data["data"]["lists"] = data # 4. 加载模板 if not await self.attach_template(return_data, "mingjianpaihang.html"): return return_data return_data["code"] = 200 return return_data async def mingjiantongji(self, mode: str = "33") -> Dict[str, Any]: """名剑统计""" return_data = self.new_result() mode = str(mode) if mode not in {"22", "33", "55"}: return_data["msg"] = "模式错误,可选值:22、33、55" return return_data # 1. 构造请求参数 params = {"mode": mode} # 2. 调用基础请求 data: Optional[List[Dict[str, Any]]] = await self.request( "jx3_mingjiantongji", params=params ) if not data or not isinstance(data, list): return_data["msg"] = "未查询到名剑统计信息" return return_data # 3. 准备模板渲染数据 try: return_data["data"] = { "items": data, "mode": mode, "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), } except DATA_PROCESSING_ERRORS as e: logger.error(f"模板数据准备失败: {e}") return_data["msg"] = "系统错误:模板渲染数据准备失败" return return_data # 4. 加载模板 if not await self.attach_template(return_data, "mingjiantongji.html"): return return_data return_data["code"] = 200 return return_data async def tuanduizhaomu(self, server: str, keyword: str) -> Dict[str, Any]: """团队招募""" return_data = self.new_result() # 1. 构造请求参数 params = {"server": server, "keyword": keyword} # 2. 调用基础请求 data: Optional[Dict[str, Any]] = await self.request( "jx3_tuanduizhaomu", params=params ) if not data: return_data["msg"] = "获取接口信息失败" return return_data # 3. 处理返回数据 try: for item in data["data"]: item["createTime"] = datetime.fromtimestamp( item["createTime"] ).strftime("%Y-%m-%d %H:%M:%S") item["number"] = f"{item['number']}/{item['maxNumber']}" return_data["data"]["list"] = data["data"] except DATA_PROCESSING_ERRORS as e: logger.error(f"数据处理时出错: {e}") return_data["msg"] = "处理接口返回信息时出错" return return_data # 4. 加载模板 if not await self.attach_template(return_data, "tuanduizhaomu.html"): return return_data return_data["code"] = 200 return return_data async def shitu(self, type_value: int, keyword: str, server: str) -> Dict[str, Any]: """师徒招募""" return_data = self.new_result() if type_value not in {1, 2}: return_data["msg"] = "师徒查询类型错误" return return_data # 1. 构造请求参数 params = {"type": type_value, "server": server, "keyword": keyword} # 2. 调用基础请求 data: Optional[Dict[str, Any]] = await self.request("jx3_shitu", params=params) if not data or not isinstance(data, dict): return_data["msg"] = "未查询到师徒招募信息" return return_data # 3. 处理返回数据 try: items = data.get("data", []) if not items: return_data["msg"] = "未查询到师徒招募信息" return return_data title = "收徒信息" if type_value == 1 else "拜师信息" return_data["data"] = { "items": items, "server": data.get("server", server), "keyword": keyword, "type_value": type_value, "title": title, "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), } except DATA_PROCESSING_ERRORS as e: logger.error(f"数据处理时出错: {e}") return_data["msg"] = "处理接口返回信息时出错" return return_data # 4. 加载模板 if not await self.attach_template(return_data, "shitu.html"): return return_data return_data["code"] = 200 return return_data