183 lines
5.8 KiB
Python
183 lines
5.8 KiB
Python
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
|