11
This commit is contained in:
@@ -0,0 +1,424 @@
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from astrbot.api import logger
|
||||
|
||||
from .base import DATA_PROCESSING_ERRORS, BaseDomainService
|
||||
|
||||
|
||||
class AdventureService(BaseDomainService):
|
||||
async def yanhuachaxun(self, server: str, name: str) -> Dict[str, Any]:
|
||||
"""烟花查询"""
|
||||
return_data = self.new_result()
|
||||
|
||||
# 1. 构造请求参数
|
||||
params = {"server": server, "name": name}
|
||||
|
||||
# 2. 调用基础请求
|
||||
data: Optional[List[Dict[str, Any]]] = await self.request(
|
||||
"jx3_yanhuachaxun", params=params
|
||||
)
|
||||
|
||||
if not data:
|
||||
return_data["msg"] = "获取接口信息失败"
|
||||
return return_data
|
||||
|
||||
# 3. 处理返回数据
|
||||
try:
|
||||
for item in data:
|
||||
if isinstance(item, dict):
|
||||
timestamp = item.get("time")
|
||||
if timestamp and isinstance(timestamp, (int, float)):
|
||||
item["time"] = datetime.fromtimestamp(timestamp).strftime(
|
||||
"%Y-%m-%d %H:%M:%S"
|
||||
)
|
||||
else:
|
||||
item["time"] = "未知时间"
|
||||
|
||||
return_data["data"]["list"] = 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, "yanhuan.html"):
|
||||
return return_data
|
||||
|
||||
return_data["code"] = 200
|
||||
|
||||
return return_data
|
||||
|
||||
async def pianzhi(self, uid: str) -> Dict[str, Any]:
|
||||
"""骗子查询"""
|
||||
return_data = self.new_result()
|
||||
|
||||
# 1. 构造请求参数
|
||||
params = {"uid": uid}
|
||||
|
||||
# 2. 调用基础请求
|
||||
data: Optional[Dict[str, Any]] = await self.request(
|
||||
"jx3_pianzhi", params=params
|
||||
)
|
||||
|
||||
if not data:
|
||||
return_data["msg"] = "获取接口信息失败"
|
||||
return return_data
|
||||
|
||||
# 3. 处理返回数据
|
||||
try:
|
||||
records = data["records"]
|
||||
|
||||
if not records:
|
||||
result_msg = "未找到该用户行骗记录,很棒!继续保持!"
|
||||
else:
|
||||
result_msg = ""
|
||||
|
||||
for record in records:
|
||||
result_msg += (
|
||||
f"区服:{record['server']} 标签:{record['tieba']}\n\n"
|
||||
)
|
||||
|
||||
for item in record["data"]:
|
||||
result_msg += f"标题:{item['title']}\n"
|
||||
result_msg += f"地址:{item['url']}\n"
|
||||
result_msg += f"ID:{item['tid']}\n"
|
||||
result_msg += f"内容:{item['text']}\n"
|
||||
item_time = datetime.fromtimestamp(item["time"]).strftime(
|
||||
"%Y-%m-%d %H:%M:%S"
|
||||
)
|
||||
result_msg += f"时间:{item_time}\n\n"
|
||||
|
||||
result_msg += "\n\n"
|
||||
return_data["data"] = result_msg
|
||||
except DATA_PROCESSING_ERRORS as e:
|
||||
logger.error(f"处理返回数据失败: {e}")
|
||||
return_data["msg"] = "处理返回数据失败"
|
||||
return return_data
|
||||
|
||||
return_data["code"] = 200
|
||||
|
||||
return return_data
|
||||
|
||||
async def juesheqiyu(self, name: str, server: str) -> Dict[str, Any]:
|
||||
"""角色奇遇"""
|
||||
return_data = self.new_result()
|
||||
|
||||
# 1. 构造请求参数
|
||||
params = {"server": server, "name": name}
|
||||
|
||||
# 2. 调用基础请求
|
||||
data: Optional[List[Dict[str, Any]]] = await self.request(
|
||||
"jx3_juesheqiyu", params=params
|
||||
)
|
||||
|
||||
if not data:
|
||||
return_data["msg"] = "未找到改角色奇遇信息"
|
||||
return return_data
|
||||
|
||||
# 3. 处理返回数据
|
||||
try:
|
||||
return_data["data"]["ptqy"] = []
|
||||
return_data["data"]["jsqy"] = []
|
||||
return_data["data"]["cwqy"] = []
|
||||
|
||||
for item in data:
|
||||
item["time"] = datetime.fromtimestamp(item["time"]).strftime(
|
||||
"%Y-%m-%d %H:%M:%S"
|
||||
)
|
||||
if item["level"] == 1:
|
||||
return_data["data"]["ptqy"].append(item)
|
||||
if item["level"] == 2:
|
||||
return_data["data"]["jsqy"].append(item)
|
||||
if item["level"] == 3:
|
||||
return_data["data"]["cwqy"].append(item)
|
||||
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, "juesheqiyu.html"):
|
||||
return return_data
|
||||
|
||||
return_data["code"] = 200
|
||||
|
||||
return return_data
|
||||
|
||||
async def weizuoqiyu(self, name: str, server: str) -> Dict[str, Any]:
|
||||
"""未做奇遇"""
|
||||
return_data = self.new_result()
|
||||
|
||||
# 1. 构造请求参数
|
||||
params = {"server": server, "name": name}
|
||||
|
||||
# 2. 调用基础请求
|
||||
data: Optional[List[Dict[str, Any]]] = await self.request(
|
||||
"jx3_weizuoqiyu", params=params
|
||||
)
|
||||
|
||||
if not data:
|
||||
return_data["msg"] = "未查询到未做奇遇信息"
|
||||
return return_data
|
||||
|
||||
if not isinstance(data, list):
|
||||
return_data["msg"] = "获取接口信息失败或数据格式错误"
|
||||
return return_data
|
||||
|
||||
# 3. 处理返回数据
|
||||
try:
|
||||
return_data["data"]["ptqy"] = []
|
||||
return_data["data"]["jsqy"] = []
|
||||
return_data["data"]["name"] = name
|
||||
return_data["data"]["server"] = server
|
||||
|
||||
for item in data:
|
||||
event_name = item.get("name")
|
||||
if not event_name:
|
||||
continue
|
||||
|
||||
try:
|
||||
level = int(item.get("level", 0))
|
||||
except (TypeError, ValueError):
|
||||
continue
|
||||
|
||||
event_item = {"event": event_name, "time": "未触发"}
|
||||
|
||||
if level == 1:
|
||||
return_data["data"]["ptqy"].append(event_item)
|
||||
elif level == 2:
|
||||
return_data["data"]["jsqy"].append(event_item)
|
||||
|
||||
if not return_data["data"]["ptqy"] and not return_data["data"]["jsqy"]:
|
||||
return_data["msg"] = "未查询到未做普通或绝世奇遇"
|
||||
return return_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, "weizuoqiyu.html"):
|
||||
return return_data
|
||||
|
||||
return_data["code"] = 200
|
||||
|
||||
return return_data
|
||||
|
||||
async def qiyutongji(self, name: str, server: str) -> Dict[str, Any]:
|
||||
"""奇遇统计"""
|
||||
return_data = self.new_result()
|
||||
|
||||
params = {"server": server, "name": name}
|
||||
|
||||
data_list: Optional[List[Dict[str, Any]]] = await self.request(
|
||||
"jx3_qiyutongji", params=params
|
||||
)
|
||||
|
||||
if not data_list or not isinstance(data_list, list):
|
||||
return_data["msg"] = "获取接口信息失败或数据格式错误"
|
||||
return return_data
|
||||
|
||||
# 格式化时间
|
||||
try:
|
||||
for item in data_list:
|
||||
item["time"] = datetime.fromtimestamp(item["time"]).strftime(
|
||||
"%Y-%m-%d %H:%M:%S"
|
||||
)
|
||||
|
||||
except DATA_PROCESSING_ERRORS as e:
|
||||
logger.error(f"数据处理时出错: {e}")
|
||||
return_data["msg"] = "处理接口返回信息时出错"
|
||||
return return_data
|
||||
|
||||
# 准备模板渲染数据
|
||||
try:
|
||||
return_data["data"] = {
|
||||
"items": data_list,
|
||||
"server": server,
|
||||
"update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"qiyuname": name,
|
||||
}
|
||||
|
||||
except DATA_PROCESSING_ERRORS as e:
|
||||
logger.error(f"模板数据准备失败: {e}")
|
||||
return_data["msg"] = "系统错误:模板渲染数据准备失败"
|
||||
return return_data
|
||||
|
||||
# 加载模板
|
||||
if not await self.attach_template(return_data, "qiyuliebiao.html"):
|
||||
return return_data
|
||||
|
||||
return_data["code"] = 200
|
||||
|
||||
return return_data
|
||||
|
||||
async def jinqiqiyu(self, server: str) -> Dict[str, Any]:
|
||||
"""近期奇遇"""
|
||||
return_data = self.new_result()
|
||||
|
||||
params = {"server": server}
|
||||
|
||||
data_list: Optional[List[Dict[str, Any]]] = await self.request(
|
||||
"jx3_jinqiqiyu", params=params
|
||||
)
|
||||
|
||||
if not data_list or not isinstance(data_list, list):
|
||||
return_data["msg"] = "未查询到近期奇遇信息"
|
||||
return return_data
|
||||
|
||||
# 格式化时间
|
||||
try:
|
||||
for item in data_list:
|
||||
event_time = item.get("time")
|
||||
if event_time:
|
||||
try:
|
||||
item["time"] = datetime.fromtimestamp(int(event_time)).strftime(
|
||||
"%Y-%m-%d %H:%M:%S"
|
||||
)
|
||||
except (TypeError, ValueError, OSError):
|
||||
item["time"] = str(event_time)
|
||||
else:
|
||||
item["time"] = ""
|
||||
|
||||
except DATA_PROCESSING_ERRORS as e:
|
||||
logger.error(f"数据处理时出错: {e}")
|
||||
return_data["msg"] = "处理接口返回信息时出错"
|
||||
return return_data
|
||||
|
||||
# 准备模板渲染数据
|
||||
try:
|
||||
return_data["data"] = {
|
||||
"items": data_list,
|
||||
"server": server,
|
||||
"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
|
||||
|
||||
# 加载模板
|
||||
if not await self.attach_template(return_data, "jinqiqiyu.html"):
|
||||
return return_data
|
||||
|
||||
return_data["code"] = 200
|
||||
|
||||
return return_data
|
||||
|
||||
async def qiyuhuizong(self, server: str, num: int = 7) -> Dict[str, Any]:
|
||||
"""奇遇汇总"""
|
||||
return_data = self.new_result()
|
||||
|
||||
if num < 1 or num > 30:
|
||||
return_data["msg"] = "汇总天数需在 1-30 天之间"
|
||||
return return_data
|
||||
|
||||
params = {"server": server, "num": num}
|
||||
|
||||
data_list: Optional[List[Dict[str, Any]]] = await self.request(
|
||||
"jx3_qiyuhuizong", params=params
|
||||
)
|
||||
|
||||
if not data_list or not isinstance(data_list, list):
|
||||
return_data["msg"] = "未查询到奇遇汇总信息"
|
||||
return return_data
|
||||
|
||||
# 整理最近一次触发信息
|
||||
try:
|
||||
for item in data_list:
|
||||
latest = item.get("data")
|
||||
if not isinstance(latest, dict):
|
||||
latest = {}
|
||||
|
||||
item["latest_name"] = latest.get("name", "")
|
||||
|
||||
latest_time = latest.get("time")
|
||||
if latest_time:
|
||||
try:
|
||||
item["latest_time"] = datetime.fromtimestamp(
|
||||
int(latest_time)
|
||||
).strftime("%Y-%m-%d %H:%M:%S")
|
||||
except (TypeError, ValueError, OSError):
|
||||
item["latest_time"] = str(latest_time)
|
||||
else:
|
||||
item["latest_time"] = ""
|
||||
|
||||
except DATA_PROCESSING_ERRORS as e:
|
||||
logger.error(f"数据处理时出错: {e}")
|
||||
return_data["msg"] = "处理接口返回信息时出错"
|
||||
return return_data
|
||||
|
||||
# 准备模板渲染数据
|
||||
try:
|
||||
return_data["data"] = {
|
||||
"items": data_list,
|
||||
"server": server,
|
||||
"num": num,
|
||||
"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
|
||||
|
||||
# 加载模板
|
||||
if not await self.attach_template(return_data, "qiyuhuizong.html"):
|
||||
return return_data
|
||||
|
||||
return_data["code"] = 200
|
||||
|
||||
return return_data
|
||||
|
||||
async def qiyugonglue(self, name: str) -> Dict[str, Any]:
|
||||
"""奇遇攻略"""
|
||||
return_data = self.new_result()
|
||||
|
||||
# 1. 构造请求参数
|
||||
params = {"name": name}
|
||||
|
||||
# 2. 调用基础请求
|
||||
data: Optional[list[Dict[str, Any]]] = await self.request(
|
||||
"jx3box_qiyugonglue", params=params, out_key="list"
|
||||
)
|
||||
|
||||
if not data:
|
||||
return_data["msg"] = "未找到该奇遇"
|
||||
return return_data
|
||||
|
||||
# 提取dwID
|
||||
dwID = data[0]["dwID"]
|
||||
data1 = await self.request(
|
||||
"jx3box_serendipity_achievement",
|
||||
out_key="",
|
||||
path_params={"dw_id": dwID},
|
||||
)
|
||||
if not data1 or not data1.get("achievement_id"):
|
||||
return_data["msg"] = "获取奇遇成就 ID 失败"
|
||||
return return_data
|
||||
|
||||
# 获取奇遇攻略
|
||||
data2 = await self.request(
|
||||
"jx3box_achievement_wiki",
|
||||
out_key="data",
|
||||
path_params={"achievement_id": data1["achievement_id"]},
|
||||
)
|
||||
if not data2:
|
||||
return_data["msg"] = "获取攻略数据异常"
|
||||
return return_data
|
||||
|
||||
# 4. 处理数据
|
||||
try:
|
||||
return_data["data"] = {}
|
||||
content = data2["post"]["content"]
|
||||
return_data["temp"] = content
|
||||
except DATA_PROCESSING_ERRORS:
|
||||
logger.exception("处理返回数据失败")
|
||||
return_data["msg"] = "处理返回数据失败"
|
||||
return return_data
|
||||
|
||||
return_data["code"] = 200
|
||||
|
||||
return return_data
|
||||
Reference in New Issue
Block a user