From 104772ba2e49816cb0afa3b621f7d990a2ada6b9 Mon Sep 17 00:00:00 2001 From: qsc Date: Fri, 19 Jun 2026 18:12:30 +0800 Subject: [PATCH] OK --- CHANGELOG.md | 4 + core/jx3_data.py | 807 +++++++++++++++++++++++++++++++++- core/message.py | 173 +++++++- data/api_config.json | 124 +++++- main.py | 36 +- metadata.yaml | 3 +- requirements.txt | 4 +- templates/diaoluo.html | 132 ++++++ templates/helps.html | 40 +- templates/jineng.html | 158 +++++++ templates/jingnai.html | 165 +++++++ templates/jinqiqiyu.html | 109 +++++ templates/mingjiantongji.html | 124 ++++++ templates/qixue.html | 160 +++++++ templates/qiyuhuizong.html | 117 +++++ templates/rank_role.html | 158 +++++++ templates/rank_tong.html | 141 ++++++ templates/shitu.html | 151 +++++++ templates/weizuoqiyu.html | 139 ++++++ templates/zhanji.html | 87 +++- templates/zilipaixing.html | 163 +++++++ 21 files changed, 2967 insertions(+), 28 deletions(-) create mode 100644 templates/diaoluo.html create mode 100644 templates/jineng.html create mode 100644 templates/jingnai.html create mode 100644 templates/jinqiqiyu.html create mode 100644 templates/mingjiantongji.html create mode 100644 templates/qixue.html create mode 100644 templates/qiyuhuizong.html create mode 100644 templates/rank_role.html create mode 100644 templates/rank_tong.html create mode 100644 templates/shitu.html create mode 100644 templates/weizuoqiyu.html create mode 100644 templates/zilipaixing.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e61558..f7798b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## 更新记录 +### version: 2.4: + +增加大量新指令 + ### version: 2.3: 宏查询接口调整,恢复使用 diff --git a/core/jx3_data.py b/core/jx3_data.py index d2b0cdb..b544272 100644 --- a/core/jx3_data.py +++ b/core/jx3_data.py @@ -11,6 +11,29 @@ from .request import APIClient from .sqlite import AsyncSQLiteDB from .fun_basic import load_template,gold_to_string,week_to_num,compare_date_str +ROLE_RANK_NAMES = { + "名士五十强", + "老江湖五十强", + "兵甲藏家五十强", + "名师五十强", + "阵营英雄五十强", + "薪火相传五十强", + "庐园广记一百强", +} + +TONG_RANK_NAMES = { + "浩气神兵宝甲五十强", + "恶人神兵宝甲五十强", + "浩气爱心帮会五十强", + "恶人爱心帮会五十强", + "赛季恶人五十强", + "赛季浩气五十强", + "上周恶人五十强", + "上周浩气五十强", + "本周恶人五十强", + "本周浩气五十强", +} + class JX3Service: def __init__(self, api_data_path: str, config: AstrBotConfig, sqlite: AsyncSQLiteDB): # 加载API配置文件 @@ -701,6 +724,253 @@ class JX3Service: return return_data + async def zhenyan(self, name: str) -> Dict[str, Any]: + """阵眼""" + return_data = self._init_return_data() + + # 1. 构造请求参数 + params = {"name": name, "ticket": self.ticket, "token": self.token} + + # 2. 调用基础请求 + data: Optional[Dict[str, Any]] = await self._base_request( + "jx3_zhenyan", "GET", params=params + ) + + if not data or not isinstance(data, dict): + return_data["msg"] = "未查询到该心法阵眼信息" + return return_data + + # 3. 处理返回数据 + try: + items = data.get("data", []) + if not isinstance(items, list) or not items: + return_data["msg"] = "未查询到该心法阵眼信息" + return return_data + + result_msg = f"{data.get('name', name)}-{data.get('skillName', '')}\n" + for item in items: + if not isinstance(item, dict): + continue + result_msg += f"{item.get('name', '')}:{item.get('desc', '')}\n" + + return_data["data"] = result_msg.rstrip() + except Exception as e: + logger.error(f"处理阵眼数据失败: {e}") + return_data["msg"] = "处理阵眼数据失败" + return return_data + + return_data["code"] = 200 + + return return_data + + + async def qixue(self, name: str) -> Dict[str, Any]: + """奇穴""" + return_data = self._init_return_data() + + # 1. 构造请求参数 + params = {"name": name, "ticket": self.ticket, "token": self.token} + + # 2. 调用基础请求 + data: Optional[List[Dict[str, Any]]] = await self._base_request( + "jx3_qixue", "GET", params=params + ) + + if not data or not isinstance(data, list): + return_data["msg"] = "未查询到该心法奇穴信息" + return return_data + + # 3. 处理返回数据 + try: + level_titles = { + 1: "主奇穴", + 2: "第一重", + 3: "第二重", + 4: "第三重", + 5: "第四重", + 6: "第五重", + 7: "第六重", + 8: "混池", + } + + groups = [] + for group in data: + if not isinstance(group, dict): + continue + + level = group.get("level") + try: + level_key = int(level) + except (TypeError, ValueError): + level_key = 0 + + items = group.get("data", []) + if not isinstance(items, list) or not items: + continue + + parsed_items = [] + for item in items: + if not isinstance(item, dict): + continue + + class_value = item.get("class") + is_active = class_value == 1 or str(class_value) == "1" + parsed_items.append({ + "name": item.get("name", ""), + "icon": item.get("icon", ""), + "desc": item.get("desc", ""), + "class_text": "主动" if is_active else "被动", + "interval": item.get("interval", "") if is_active else "", + }) + + if parsed_items: + groups.append({ + "level": level_key, + "title": level_titles.get(level_key, f"第{level_key}组"), + "talents": parsed_items, + }) + + if not groups: + return_data["msg"] = "未查询到该心法奇穴信息" + return return_data + + groups.sort(key=lambda item: item["level"]) + return_data["data"] = { + "name": name, + "groups": groups, + "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + except Exception as e: + logger.error(f"处理奇穴数据失败: {e}") + return_data["msg"] = "处理奇穴数据失败" + return return_data + + # 4. 加载模板 + try: + return_data["temp"] = await load_template("qixue.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + return return_data + + return_data["code"] = 200 + return return_data + + + async def jineng(self, name: str) -> Dict[str, Any]: + """技能""" + return_data = self._init_return_data() + + params = {"name": name, "ticket": self.ticket, "token": self.token} + + data: Optional[List[Dict[str, Any]]] = await self._base_request( + "jx3_jineng", "GET", params=params + ) + + if not data or not isinstance(data, list): + return_data["msg"] = "未查询到该心法技能信息" + return return_data + + try: + groups = [] + for group in data: + if not isinstance(group, dict): + continue + + skills = group.get("data", []) + if not isinstance(skills, list) or not skills: + continue + + parsed_skills = [] + for skill in skills: + if not isinstance(skill, dict): + continue + + parsed_skills.append({ + "name": skill.get("name", ""), + "icon": skill.get("icon", ""), + "desc": skill.get("desc", ""), + "interval": skill.get("interval", ""), + "distance": skill.get("distance", ""), + "release_type": skill.get("releaseType", ""), + "weapon": skill.get("weapon", ""), + }) + + if parsed_skills: + groups.append({ + "title": group.get("class", "其他技能"), + "skills": parsed_skills, + }) + + if not groups: + return_data["msg"] = "未查询到该心法技能信息" + return return_data + + return_data["data"] = { + "name": name, + "groups": groups, + "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + except Exception as e: + logger.error(f"处理技能数据失败: {e}") + return_data["msg"] = "处理技能数据失败" + return return_data + + try: + return_data["temp"] = await load_template("jineng.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + return return_data + + return_data["code"] = 200 + + return return_data + + + async def zilipaixing(self, school: str, server: str) -> Dict[str, Any]: + """资历排行""" + return_data = self._init_return_data() + + params = { + "server": server, + "school": school, + "ticket": self.ticket, + "token": self.token, + } + + data: Optional[List[Dict[str, Any]]] = await self._base_request( + "jx3_zilipaixing", "GET", params=params + ) + + if not data or not isinstance(data, list): + return_data["msg"] = "未查询到资历排行信息" + return return_data + + try: + return_data["data"] = { + "items": data, + "school": school, + "server": server, + "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + except Exception as e: + logger.error(f"处理资历排行数据失败: {e}") + return_data["msg"] = "处理资历排行数据失败" + return return_data + + try: + return_data["temp"] = await load_template("zilipaixing.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + return return_data + + return_data["code"] = 200 + + return return_data + + async def shaohua(self) -> Dict[str, Any]: """骚话""" return_data = self._init_return_data() @@ -1051,6 +1321,74 @@ class JX3Service: return return_data + async def weizuoqiyu(self, name: str, server: str) -> Dict[str, Any]: + """未做奇遇""" + return_data = self._init_return_data() + + # 1. 构造请求参数 + params = {"server": server, "name": name, "token": self.token} + + # 2. 调用基础请求 + data: Optional[List[Dict[str, Any]]] = await self._base_request( + "jx3_weizuoqiyu", "GET", 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") or item.get("event") + 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 Exception as e: + logger.error(f"处理返回数据失败: {e}") + return_data["msg"] = "处理返回数据失败" + return return_data + + # 4. 加载模板 + try: + return_data["temp"] = await load_template("weizuoqiyu.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + return return_data + + return_data["code"] = 200 + + return return_data + + async def qiyutongji(self, name: str, server: str) -> Dict[str, Any]: """奇遇统计""" return_data = self._init_return_data() @@ -1100,6 +1438,131 @@ class JX3Service: return return_data + async def jinqiqiyu(self, server: str) -> Dict[str, Any]: + """近期奇遇""" + return_data = self._init_return_data() + + params = {"server": server, "token": self.token} + + data_list: Optional[List[Dict[str, Any]]] = await self._base_request( + "jx3_jinqiqiyu", "GET", 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 Exception 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 Exception as e: + logger.error(f"模板数据准备失败: {e}") + return_data["msg"] = "系统错误:模板渲染数据准备失败" + return return_data + + # 加载模板 + try: + return_data["temp"] = await load_template("jinqiqiyu.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + 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._init_return_data() + + if num < 1 or num > 30: + return_data["msg"] = "汇总天数需在 1-30 天之间" + return return_data + + params = {"server": server, "num": num, "token": self.token} + + data_list: Optional[List[Dict[str, Any]]] = await self._base_request( + "jx3_qiyuhuizong", "GET", 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 Exception 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 Exception as e: + logger.error(f"模板数据准备失败: {e}") + return_data["msg"] = "系统错误:模板渲染数据准备失败" + return return_data + + # 加载模板 + try: + return_data["temp"] = await load_template("qiyuhuizong.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + return return_data + + return_data["code"] = 200 + + return return_data + + async def zhanji(self, name: str, server:str, mode:str) -> Dict[str, Any]: """战绩""" return_data = self._init_return_data() @@ -1162,6 +1625,52 @@ class JX3Service: return return_data + async def mingjiantongji(self, mode: str = "33") -> Dict[str, Any]: + """名剑统计""" + return_data = self._init_return_data() + + mode = str(mode) + if mode not in {"22", "33", "55"}: + return_data["msg"] = "模式错误,可选值:22、33、55" + return return_data + + # 1. 构造请求参数 + params = {"mode": mode, "token": self.token, "ticket": self.ticket} + + # 2. 调用基础请求 + data: Optional[List[Dict[str, Any]]] = await self._base_request( + "jx3_mingjiantongji", "GET", 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 Exception as e: + logger.error(f"模板数据准备失败: {e}") + return_data["msg"] = "系统错误:模板渲染数据准备失败" + return return_data + + # 4. 加载模板 + try: + return_data["temp"] = await load_template("mingjiantongji.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + return return_data + + return_data["code"] = 200 + + return return_data + + async def tuanduizhaomu(self, server: str, keyword: str) -> Dict[str, Any]: """团队招募""" return_data = self._init_return_data() @@ -1202,6 +1711,115 @@ class JX3Service: return return_data + async def shitu(self, type_value: int, keyword: str, server: str) -> Dict[str, Any]: + """师徒招募""" + return_data = self._init_return_data() + + if type_value not in {1, 2}: + return_data["msg"] = "师徒查询类型错误" + return return_data + + # 1. 构造请求参数 + params = {"type": type_value, "server": server, "keyword": keyword, "token": self.token} + + # 2. 调用基础请求 + data: Optional[Dict[str, Any]] = await self._base_request( + "jx3_shitu", "GET", 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 Exception as e: + logger.error(f"数据处理时出错: {e}") + return_data["msg"] = "处理接口返回信息时出错" + return return_data + + # 4. 加载模板 + try: + return_data["temp"] = await load_template("shitu.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + return return_data + + return_data["code"] = 200 + + return return_data + + + async def rank_statistical(self, name: str, server: str) -> Dict[str, Any]: + """各类风云录榜单""" + return_data = self._init_return_data() + + if name in ROLE_RANK_NAMES: + template_name = "rank_role.html" + elif name in TONG_RANK_NAMES: + template_name = "rank_tong.html" + else: + return_data["msg"] = "榜单名称错误" + return return_data + + # 1. 构造请求参数 + params = {"server": server, "name": name, "token": self.token} + + # 2. 调用基础请求 + data: Optional[Dict[str, Any]] = await self._base_request( + "jx3_rank_statistical", "GET", params=params + ) + + if not data or not isinstance(data, dict): + return_data["msg"] = "未查询到榜单信息" + return return_data + + # 3. 处理返回数据 + try: + items = data.get("data", []) + if not isinstance(items, list) or not items: + return_data["msg"] = "未查询到榜单信息" + return return_data + + return_data["data"] = { + "items": items, + "server": data.get("server", server), + "rank_name": data.get("name", name), + "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + except Exception as e: + logger.error(f"数据处理时出错: {e}") + return_data["msg"] = "处理接口返回信息时出错" + return return_data + + # 4. 加载模板 + try: + return_data["temp"] = await load_template(template_name) + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + return return_data + + return_data["code"] = 200 + + return return_data + + async def jueshe(self,name: str, server: str) -> Dict[str, Any]: """角色""" return_data = self._init_return_data() @@ -1243,7 +1861,129 @@ class JX3Service: async def jueshemingpian(self, server: str, name: str) -> Dict[str, Any]: - """角色名片""" + """单张名片""" + return_data = self._init_return_data() + + # 1. 构造请求参数 + params = {"server": server, "name": name, "token": self.token} + + # 2. 调用基础请求 + data: Optional[Dict[str, Any]] = await self._base_request( + "jx3_jieshemingpian", "GET", params=params + ) + + if not data or not isinstance(data, dict): + return_data["msg"] = "未找到该角色名片" + return return_data + + # 3. 处理返回数据 + try: + url = data.get("showAvatar") + if not url: + return_data["msg"] = "未获取到名片图片" + return return_data + + server_name = data.get("serverName", server) + role_name = data.get("roleName", name) + show_like = data.get("showLike", 0) + msg = f"{server_name}-{role_name} 点赞:{show_like}" + + return_data["data"] = [ + Comp.Plain(msg), + Comp.Image.fromURL(url), + ] + except Exception as e: + logger.error(f"数据处理时出错: {e}") + return_data["msg"] = "处理接口返回信息时出错" + return return_data + + return_data["code"] = 200 + + return return_data + + + async def jingnai(self, name: str, server: str) -> Dict[str, Any]: + """百战精耐""" + return_data = self._init_return_data() + + # 1. 构造请求参数 + params = {"server": server, "name": name, "token": self.token} + + # 2. 调用基础请求 + data: Optional[Dict[str, Any]] = await self._base_request( + "jx3_jingnai", "GET", params=params + ) + + if not data or not isinstance(data, dict): + return_data["msg"] = "未查询到角色精耐信息" + return return_data + + # 3. 处理返回数据 + try: + items = data.get("skill_list", []) + if not isinstance(items, list) or not items: + return_data["msg"] = "未查询到技能信息" + return return_data + + color_map = { + 7: "黑色", + 6: "紫色", + 5: "红色", + 4: "绿色", + 3: "蓝色", + 2: "黄色", + 0: "无", + } + + for item in items: + if not isinstance(item, dict): + continue + + color = item.get("skill_color") + try: + color_key = int(color) + except (TypeError, ValueError): + color_key = None + item["skill_color_text"] = color_map.get(color_key, str(color) if color is not None else "") + + update_time = data.get("update_time") + if update_time: + try: + update_time = datetime.fromtimestamp(int(update_time)).strftime("%Y-%m-%d %H:%M:%S") + except (TypeError, ValueError, OSError): + update_time = str(update_time) + else: + update_time = "" + + return_data["data"] = { + "server": data.get("server", server), + "role_name": data.get("role_name", name), + "skill_energy": data.get("skill_energy", ""), + "skill_stamina": data.get("skill_stamina", ""), + "skill_count": data.get("skill_count", len(items)), + "items": items, + "update_time": update_time + } + except Exception as e: + logger.error(f"处理精耐数据失败: {e}") + return_data["msg"] = "处理精耐数据失败" + return return_data + + # 4. 加载模板 + try: + return_data["temp"] = await load_template("jingnai.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + return return_data + + return_data["code"] = 200 + + return return_data + + + async def shuoyoumingpian(self, server: str, name: str) -> Dict[str, Any]: + """所有名片""" return_data = self._init_return_data() # 1. 构造请求参数 @@ -1492,6 +2232,71 @@ class JX3Service: return return_data return return_data + + + async def diaoluo(self, name: str, limit: int = 20, server: str = "") -> Dict[str, Any]: + """物品掉落记录""" + return_data = self._init_return_data() + + try: + limit = int(limit) + except (TypeError, ValueError): + return_data["msg"] = "数量必须是数字" + return return_data + + if limit < 1 or limit > 100: + return_data["msg"] = "掉落记录数量需在 1-100 之间" + return return_data + + # 1. 构造请求参数 + params = {"server": server, "name": name, "limit": limit, "token": self.token} + + # 2. 调用基础请求 + data: Optional[List[Dict[str, Any]]] = await self._base_request( + "jx3_diaoluo", "GET", params=params + ) + + if not data or not isinstance(data, list): + return_data["msg"] = "未查询到掉落记录" + return return_data + + # 3. 处理返回数据 + try: + for item in data: + if not isinstance(item, dict): + continue + + drop_time = item.get("time") + if drop_time: + try: + item["time"] = datetime.fromtimestamp(int(drop_time)).strftime("%Y-%m-%d %H:%M:%S") + except (TypeError, ValueError, OSError): + item["time"] = str(drop_time) + else: + item["time"] = "" + + return_data["data"] = { + "items": data, + "name": name, + "limit": limit, + "server": server, + "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + except Exception as e: + logger.error(f"处理掉落数据失败: {e}") + return_data["msg"] = "处理掉落数据失败" + return return_data + + # 4. 模板渲染 + try: + return_data["temp"] = await load_template("diaoluo.html") + return_data["code"] = 200 + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + return return_data + + return return_data async def bagua(self, type: str) -> Dict[str, Any]: diff --git a/core/message.py b/core/message.py index b642993..da3b6f0 100644 --- a/core/message.py +++ b/core/message.py @@ -262,6 +262,26 @@ class MessageBuilder: return await self.T2I_image_msg(event, self.jx3api.xiaoyao) + async def jx3_zhenyan(self, event: AstrMessageEvent, name: str): + """剑三 阵眼 心法""" + return await self.plain_msg(event, lambda: self.jx3api.zhenyan(name)) + + + async def jx3_qixue(self, event: AstrMessageEvent, name: str): + """剑三 奇穴 心法""" + return await self.T2I_image_msg(event, lambda: self.jx3api.qixue(name)) + + + async def jx3_jineng(self, event: AstrMessageEvent, name: str): + """剑三 技能 心法""" + return await self.T2I_image_msg(event, lambda: self.jx3api.jineng(name)) + + + async def jx3_zilipaixing(self, event: AstrMessageEvent, school: str, server: str = ""): + """剑三 资历排行 职业 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.zilipaixing(school, self.serverdefault(server))) + + async def jx3_shaohua(self, event: AstrMessageEvent,): """剑三 骚话""" return await self.plain_msg(event, self.jx3api.shaohua) @@ -307,11 +327,34 @@ class MessageBuilder: return await self.T2I_image_msg(event, lambda: self.jx3api.juesheqiyu(name, self.serverdefault(server))) + async def jx3_weizuoqiyu(self, event: AstrMessageEvent,name: str = "飞翔大野猪", server: str = ""): + """剑三 未做奇遇 角色名称 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.weizuoqiyu(name, self.serverdefault(server))) + + async def jx3_qiyutongji(self, event: AstrMessageEvent,adventureName: str = "阴阳两界", server: str = ""): """剑三 奇遇统计 奇遇名称 服务器""" return await self.T2I_image_msg(event, lambda: self.jx3api.qiyutongji(adventureName,self.serverdefault(server))) + async def jx3_jinqiqiyu(self, event: AstrMessageEvent,server: str = ""): + """剑三 近期奇遇 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.jinqiqiyu(self.serverdefault(server))) + + + async def jx3_qiyuhuizong(self, event: AstrMessageEvent,num_or_server: str = "7", server: str = ""): + """剑三 奇遇汇总 天数 服务器""" + num = 7 + target_server = server + + if str(num_or_server).isdigit(): + num = int(num_or_server) + else: + target_server = num_or_server + + return await self.T2I_image_msg(event, lambda: self.jx3api.qiyuhuizong(self.serverdefault(target_server), num)) + + async def jx3_zhanji(self, event: AstrMessageEvent,name: str = "飞翔大野猪", server: str = "", mode:str = "33"): """剑三 战绩 角色 服务器 类型""" return await self.T2I_image_msg(event, lambda: self.jx3api.zhanji(name, self.serverdefault(server),mode)) @@ -322,11 +365,116 @@ class MessageBuilder: return await self.T2I_image_msg(event, lambda: self.jx3api.mingjianpaihang(limit,mode)) + async def jx3_mingjiantongji(self, event: AstrMessageEvent,mode: str = "33"): + """剑三 名剑统计 模式""" + return await self.T2I_image_msg(event, lambda: self.jx3api.mingjiantongji(mode)) + + async def jx3_tuanduizhaomu(self, event: AstrMessageEvent,keyword: str = "25人普通会战弓月城", server: str = ""): """剑三 招募 副本 服务器""" return await self.T2I_image_msg(event, lambda: self.jx3api.tuanduizhaomu( self.serverdefault(server),keyword)) + async def jx3_baishi(self, event: AstrMessageEvent,keyword: str = "", server: str = ""): + """剑三 拜师 搜索关键词 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.shitu(2, keyword, self.serverdefault(server))) + + + async def jx3_shoutu(self, event: AstrMessageEvent,keyword: str = "", server: str = ""): + """剑三 收徒 搜索关键词 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.shitu(1, keyword, self.serverdefault(server))) + + + async def jx3_rank_statistical(self, event: AstrMessageEvent, rank_name: str, server: str = ""): + """剑三 各类榜单 榜单名称 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical(rank_name, self.serverdefault(server))) + + + async def jx3_mingshiwushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 名士五十强 服务器""" + return await self.jx3_rank_statistical(event, "名士五十强", server) + + + async def jx3_laojianghuwushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 老江湖五十强 服务器""" + return await self.jx3_rank_statistical(event, "老江湖五十强", server) + + + async def jx3_bingjiacangjiawushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 兵甲藏家五十强 服务器""" + return await self.jx3_rank_statistical(event, "兵甲藏家五十强", server) + + + async def jx3_mingshiwushiqiang_mentor(self, event: AstrMessageEvent, server: str = ""): + """剑三 名师五十强 服务器""" + return await self.jx3_rank_statistical(event, "名师五十强", server) + + + async def jx3_zhengyingyingxiongwushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 阵营英雄五十强 服务器""" + return await self.jx3_rank_statistical(event, "阵营英雄五十强", server) + + + async def jx3_xinhuoxiangchuanwushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 薪火相传五十强 服务器""" + return await self.jx3_rank_statistical(event, "薪火相传五十强", server) + + + async def jx3_luyuanguangjiyibaiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 庐园广记一百强 服务器""" + return await self.jx3_rank_statistical(event, "庐园广记一百强", server) + + + async def jx3_haoqishenbingbaojiawushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 浩气神兵宝甲五十强 服务器""" + return await self.jx3_rank_statistical(event, "浩气神兵宝甲五十强", server) + + + async def jx3_erenshenbingbaojiawushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 恶人神兵宝甲五十强 服务器""" + return await self.jx3_rank_statistical(event, "恶人神兵宝甲五十强", server) + + + async def jx3_haoqiaixinbanghuiwushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 浩气爱心帮会五十强 服务器""" + return await self.jx3_rank_statistical(event, "浩气爱心帮会五十强", server) + + + async def jx3_erenaixinbanghuiwushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 恶人爱心帮会五十强 服务器""" + return await self.jx3_rank_statistical(event, "恶人爱心帮会五十强", server) + + + async def jx3_saijierenwushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 赛季恶人五十强 服务器""" + return await self.jx3_rank_statistical(event, "赛季恶人五十强", server) + + + async def jx3_saijihaoqiwushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 赛季浩气五十强 服务器""" + return await self.jx3_rank_statistical(event, "赛季浩气五十强", server) + + + async def jx3_shangzhouerenwushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 上周恶人五十强 服务器""" + return await self.jx3_rank_statistical(event, "上周恶人五十强", server) + + + async def jx3_shangzhouhaoqiwushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 上周浩气五十强 服务器""" + return await self.jx3_rank_statistical(event, "上周浩气五十强", server) + + + async def jx3_benzhouerenwushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 本周恶人五十强 服务器""" + return await self.jx3_rank_statistical(event, "本周恶人五十强", server) + + + async def jx3_benzhouhaoqiwushiqiang(self, event: AstrMessageEvent, server: str = ""): + """剑三 本周浩气五十强 服务器""" + return await self.jx3_rank_statistical(event, "本周浩气五十强", server) + + async def jx3_jueshe(self, event: AstrMessageEvent,name: str, server: str = ""): """剑三 角色 名称 服务器""" return await self.plain_msg(event, lambda: self.jx3api.jueshe(name, self.serverdefault(server))) @@ -334,7 +482,17 @@ class MessageBuilder: async def jx3_jueshemingpian(self, event: AstrMessageEvent, name: str = "飞翔大野猪", server: str = ""): """剑三 名片 角色 服务器""" - return await self.plain_chain(event, lambda: self.jx3api.jueshemingpian( self.serverdefault(server),name)) + return await self.plain_chain(event, lambda: self.jx3api.jueshemingpian(self.serverdefault(server), name)) + + + async def jx3_jingnai(self, event: AstrMessageEvent, name: str = "飞翔大野猪", server: str = ""): + """剑三 精耐 角色 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.jingnai(name, self.serverdefault(server))) + + + async def jx3_shuoyoumingpian(self, event: AstrMessageEvent, name: str = "飞翔大野猪", server: str = ""): + """剑三 所有名片 角色 服务器""" + return await self.plain_chain(event, lambda: self.jx3api.shuoyoumingpian( self.serverdefault(server),name)) async def jx3_shuijimingpian(self, event: AstrMessageEvent,force: str = "万花", body: str = "萝莉", server: str = ""): @@ -362,6 +520,19 @@ class MessageBuilder: return await self.T2I_image_msg(event, lambda: self.jx3api.jiaoyihang(Name, self.serverdefault(server))) + async def jx3_diaoluo(self, event: AstrMessageEvent, name: str = "玄晶", limit_or_server: str = "20", server: str = ""): + """剑三 掉落 物品名称 数量 服务器""" + limit = 20 + target_server = server + + if str(limit_or_server).isdigit(): + limit = int(limit_or_server) + else: + target_server = limit_or_server + + return await self.T2I_image_msg(event, lambda: self.jx3api.diaoluo(name, limit, self.serverdefault(target_server))) + + async def jx3_bagua(self, event: AstrMessageEvent,name: str = "818"): """剑三 八卦 类型""" return await self.plain_msg(event, lambda: self.jx3api.bagua(name)) diff --git a/data/api_config.json b/data/api_config.json index 1eb8ebc..e74d83c 100644 --- a/data/api_config.json +++ b/data/api_config.json @@ -106,6 +106,47 @@ "params":{ } }, + "jx3_zhenyan":{ + "url":"https://www.jx3api.com/data/school/matrix", + "method":"GET", + "description":"查询指定心法的阵眼效果", + "params":{ + "name": "易筋经", + "ticket": "", + "token":"" + } + }, + "jx3_qixue":{ + "url":"https://www.jx3api.com/data/school/talent", + "method":"GET", + "description":"查询指定心法的奇穴详细效果", + "params":{ + "name": "易筋经", + "ticket": "", + "token":"" + } + }, + "jx3_jineng":{ + "url":"https://www.jx3api.com/data/school/skills", + "method":"GET", + "description":"查询指定心法的技能详情", + "params":{ + "name": "易筋经", + "ticket": "", + "token":"" + } + }, + "jx3_zilipaixing":{ + "url":"https://www.jx3api.com/data/school/seniority", + "method":"GET", + "description":"查询指定门派的资历排行榜", + "params":{ + "server": "梦江南", + "school": "万花", + "ticket": "", + "token":"" + } + }, "jx3_shaohua":{ "url":"https://www.jx3api.com/data/saohua/random", "method":"GET", @@ -188,6 +229,16 @@ "token":"" } }, + "jx3_weizuoqiyu":{ + "url":"https://www.jx3api.com/data/event/unfinished", + "method":"GET", + "description":"此接口用于查询指定角色未做奇遇记录,数据可能存在遗漏", + "params":{ + "server": "梦江南", + "name": "飞翔大野猪", + "token":"" + } + }, "jx3_qiyutongji":{ "url":"https://www.jx3api.com/data/event/statistics", "method":"POST", @@ -199,6 +250,25 @@ "token": "" } }, + "jx3_jinqiqiyu":{ + "url":"https://www.jx3api.com/data/event/recent", + "method":"GET", + "description":"查询指定服务器最近触发的奇遇记录列表", + "params":{ + "server": "梦江南", + "token": "" + } + }, + "jx3_qiyuhuizong":{ + "url":"https://www.jx3api.com/data/event/collect", + "method":"GET", + "description":"统计指定服务器最近一段时间内各类奇遇触发汇总", + "params":{ + "server": "梦江南", + "num": 7, + "token": "" + } + }, "jx3_zhanji":{ "url":"https://www.jx3api.com/data/arena/recent", "method":"GET", @@ -222,6 +292,16 @@ "token":"" } }, + "jx3_mingjiantongji":{ + "url":"https://www.jx3api.com/data/arena/schools", + "method":"GET", + "description":"统计全服名剑大会各门派当前赛季与上赛季数量", + "params":{ + "mode": "33", + "ticket": "", + "token":"" + } + }, "jx3_tuanduizhaomu":{ "url":"https://www.jx3api.com/data/recruit/search", "method":"GET", @@ -233,6 +313,27 @@ "token":"" } }, + "jx3_shitu":{ + "url":"https://www.jx3api.com/data/mentor/search", + "method":"GET", + "description":"查询游戏内师徒系统拜师/收徒招募信息", + "params":{ + "type": 2, + "server": "梦江南", + "keyword": "", + "token":"" + } + }, + "jx3_rank_statistical":{ + "url":"https://www.jx3api.com/data/rank/statistics", + "method":"GET", + "description":"查询全服或指定服务器的各类游戏内榜单数据", + "params":{ + "server": "梦江南", + "name": "名士五十强", + "token":"" + } + }, "jx3_jueshexinxi":{ "url":"https://www.jx3api.com/data/role/detail", "method":"GET", @@ -253,6 +354,16 @@ "token":"" } }, + "jx3_jingnai":{ + "url":"https://www.jx3api.com/data/role/monster", + "method":"GET", + "description":"查询指定角色在百战异闻录玩法中的精力、耐力数值和已习得技能列表", + "params":{ + "server": "梦江南", + "name": "飞翔大野猪", + "token":"" + } + }, "jx3_allmingpian":{ "url":"https://www.jx3api.com/data/card/records", "method":"GET", @@ -313,6 +424,17 @@ "token": "" } }, + "jx3_diaoluo":{ + "url":"https://www.jx3api.com/data/reward/statistics", + "method":"GET", + "description":"统计全服或指定服务器中特定贵重物品在团队秘境中的掉落记录", + "params":{ + "server": "梦江南", + "name": "玄晶", + "limit": 20, + "token": "" + } + }, "jx3_shuama":{ "url":"https://www.jx3api.com/data/ranch/records", "method":"GET", @@ -385,4 +507,4 @@ } -} \ No newline at end of file +} diff --git a/main.py b/main.py index 518cf01..93c5d72 100644 --- a/main.py +++ b/main.py @@ -200,6 +200,10 @@ class Jx3ApiPlugin(Star): "状态": self.jx3cmd.jx3_zhuangtai, "技改": self.jx3cmd.jx3_jigai, "小药": self.jx3cmd.jx3_xiaoyao, + "阵眼": self.jx3cmd.jx3_zhenyan, + "奇穴": self.jx3cmd.jx3_qixue, + "技能": self.jx3cmd.jx3_jineng, + "资历排行": self.jx3cmd.jx3_zilipaixing, "骚话": self.jx3cmd.jx3_shaohua, "沙盘": self.jx3cmd.jx3_shapan, "攻略": self.jx3cmd.jx3_qiyugonglue, @@ -211,19 +215,45 @@ class Jx3ApiPlugin(Star): "的卢": self.jx3cmd.jx3_dilujilu, "烟花": self.jx3cmd.jx3_yanhuachaxun, "骗子": self.jx3cmd.jx3_pianzhi, - "查询": self.jx3cmd.jx3_juesheqiyu, - "统计": self.jx3cmd.jx3_qiyutongji, + "奇遇": self.jx3cmd.jx3_juesheqiyu, + "未做奇遇": self.jx3cmd.jx3_weizuoqiyu, + "奇遇统计": self.jx3cmd.jx3_qiyutongji, + "近期奇遇": self.jx3cmd.jx3_jinqiqiyu, + "奇遇汇总": self.jx3cmd.jx3_qiyuhuizong, "战绩": self.jx3cmd.jx3_zhanji, "排行": self.jx3cmd.jx3_mingjianpaihang, + "名剑统计": self.jx3cmd.jx3_mingjiantongji, "招募": self.jx3cmd.jx3_tuanduizhaomu, + "拜师": self.jx3cmd.jx3_baishi, + "收徒": self.jx3cmd.jx3_shoutu, + "名士五十强": self.jx3cmd.jx3_mingshiwushiqiang, + "老江湖五十强": self.jx3cmd.jx3_laojianghuwushiqiang, + "兵甲藏家五十强": self.jx3cmd.jx3_bingjiacangjiawushiqiang, + "名师五十强": self.jx3cmd.jx3_mingshiwushiqiang_mentor, + "阵营英雄五十强": self.jx3cmd.jx3_zhengyingyingxiongwushiqiang, + "薪火相传五十强": self.jx3cmd.jx3_xinhuoxiangchuanwushiqiang, + "庐园广记一百强": self.jx3cmd.jx3_luyuanguangjiyibaiqiang, + "浩气神兵宝甲五十强": self.jx3cmd.jx3_haoqishenbingbaojiawushiqiang, + "恶人神兵宝甲五十强": self.jx3cmd.jx3_erenshenbingbaojiawushiqiang, + "浩气爱心帮会五十强": self.jx3cmd.jx3_haoqiaixinbanghuiwushiqiang, + "恶人爱心帮会五十强": self.jx3cmd.jx3_erenaixinbanghuiwushiqiang, + "赛季恶人五十强": self.jx3cmd.jx3_saijierenwushiqiang, + "赛季浩气五十强": self.jx3cmd.jx3_saijihaoqiwushiqiang, + "上周恶人五十强": self.jx3cmd.jx3_shangzhouerenwushiqiang, + "上周浩气五十强": self.jx3cmd.jx3_shangzhouhaoqiwushiqiang, + "本周恶人五十强": self.jx3cmd.jx3_benzhouerenwushiqiang, + "本周浩气五十强": self.jx3cmd.jx3_benzhouhaoqiwushiqiang, "角色": self.jx3cmd.jx3_jueshe, "名片": self.jx3cmd.jx3_jueshemingpian, - "随机": self.jx3cmd.jx3_shuijimingpian, + "精耐": self.jx3cmd.jx3_jingnai, + "所有名片": self.jx3cmd.jx3_shuoyoumingpian, + "随机名片": self.jx3cmd.jx3_shuijimingpian, "刷马": self.jx3cmd.jx3_shuma, "金价": self.jx3cmd.jx3_jinjia, "物价": self.jx3cmd.jx3_wujia, "八卦": self.jx3cmd.jx3_bagua, "交易行": self.jx3cmd.jx3_jiaoyihang, + "掉落": self.jx3cmd.jx3_diaoluo, "开服推送": self.jx3cmd.jx3_kaifhujiank, "新闻推送": self.jx3cmd.jx3_xinwenzhixun, "刷马推送": self.jx3cmd.jx3_shuamamsg, diff --git a/metadata.yaml b/metadata.yaml index e9b1900..8b59e5d 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -1,9 +1,10 @@ name: astrbot_plugin_jx3 display_name: 剑网三游戏数据查询工具 desc: 通过接口调用剑网三API接口获取游戏数据,处理发送。 -version: v2.3 +version: v2.4 author: 飞翔大野猪 repo: https://github.com/qsc20001102/astrbot_plugin_jx3 astrbot_version: ">=4.11.0" support_platforms: - aiocqhttp + - weixin_oc diff --git a/requirements.txt b/requirements.txt index cc61e06..9c229b8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ matplotlib aiofiles -aiosqlite \ No newline at end of file +aiosqlite +aiohttp +apscheduler diff --git a/templates/diaoluo.html b/templates/diaoluo.html new file mode 100644 index 0000000..117a319 --- /dev/null +++ b/templates/diaoluo.html @@ -0,0 +1,132 @@ + + + + +掉落记录 + + + + + +
+

{{ name }} 掉落记录

+
{{ server }} · 数量:{{ limit }} · 更新时间:{{ update_time }}
+ + + + + + + + + + + + + + {% for item in items %} + + + + + + + + {% endfor %} + +
物品名称服务器地点角色名称时间
{{ item.item_name }}{{ item.server }}{{ item.map_name }}{{ item.role_name }}{{ item.time }}
+
+ + + diff --git a/templates/helps.html b/templates/helps.html index 5d2f793..637a744 100644 --- a/templates/helps.html +++ b/templates/helps.html @@ -164,20 +164,52 @@ body {
的卢记录
的卢 [服务器]
烟花记录
烟花 角色名 [服务器]
骗子查询
骗子 QQ号
-
角色奇遇
查询 角色名 [服务器]
-
奇遇统计
统计 奇遇名称 [服务器]
统计指定奇遇触发次数
+
角色奇遇
奇遇 角色名 [服务器]
+
未做奇遇
未做奇遇 角色名 [服务器]
+
奇遇统计
奇遇统计 奇遇名称 [服务器]
统计指定奇遇触发次数
+
近期奇遇
近期奇遇 [服务器]
查询指定服务器最近触发的奇遇记录
+
奇遇汇总
奇遇汇总 [天数] [服务器]
统计指定服务器最近一段时间的奇遇触发汇总
名剑战绩
战绩 角色名 [服务器] [模式]
33 22
名剑排行
排行 [数量] [模式]
33 22
+
名剑统计
名剑统计 [模式]
22 33 55
副本招募
招募 副本名称 [服务器]
+
拜师列表
拜师 [搜索关键词] [服务器]
查询徒弟找师傅信息
+
收徒列表
收徒 [搜索关键词] [服务器]
查询师傅找徒弟信息
+
名士五十强
名士五十强 [服务器]
查询风云录角色榜单
+
老江湖五十强
老江湖五十强 [服务器]
查询风云录角色榜单
+
兵甲藏家五十强
兵甲藏家五十强 [服务器]
查询风云录角色榜单
+
名师五十强
名师五十强 [服务器]
查询风云录角色榜单
+
阵营英雄五十强
阵营英雄五十强 [服务器]
查询风云录角色榜单
+
薪火相传五十强
薪火相传五十强 [服务器]
查询风云录角色榜单
+
庐园广记一百强
庐园广记一百强 [服务器]
查询风云录角色榜单
+
浩气神兵宝甲五十强
浩气神兵宝甲五十强 [服务器]
查询风云录帮会榜单
+
恶人神兵宝甲五十强
恶人神兵宝甲五十强 [服务器]
查询风云录帮会榜单
+
浩气爱心帮会五十强
浩气爱心帮会五十强 [服务器]
查询风云录帮会榜单
+
恶人爱心帮会五十强
恶人爱心帮会五十强 [服务器]
查询风云录帮会榜单
+
赛季恶人五十强
赛季恶人五十强 [服务器]
查询风云录帮会榜单
+
赛季浩气五十强
赛季浩气五十强 [服务器]
查询风云录帮会榜单
+
上周恶人五十强
上周恶人五十强 [服务器]
查询风云录帮会榜单
+
上周浩气五十强
上周浩气五十强 [服务器]
查询风云录帮会榜单
+
本周恶人五十强
本周恶人五十强 [服务器]
查询风云录帮会榜单
+
本周浩气五十强
本周浩气五十强 [服务器]
查询风云录帮会榜单
+
掉落记录
掉落 物品名称 [数量] [服务器]
查询团队秘境贵重物品掉落记录
角色信息
角色 名称 [服务器]
查询角色基础信息
-
角色名片
名片 角色名 [服务器]
+
角色名片
名片 角色名 [服务器]
查询角色当前名片
+
所有名片
所有名片 角色名 [服务器]
随机名片
随机 职业 体型 [服务器]
-
刷马
刷马 [服务器]
+
角色百战
精耐 角色名 [服务器]
查询角色百战精力耐力和技能列表
+
心法阵眼
阵眼 心法
查询指定心法阵眼效果
+
奇穴详情
奇穴 心法
查询指定心法奇穴详情
+
技能详情
技能 心法
查询指定心法技能详情
+
资历排行
资历排行 职业 [服务器]
查询指定职业资历排行榜
+
马场刷新
刷马 [服务器]
金价查询
金价 [服务器]
外观物价
物价 外观名称 [服务器]
八卦记录
八卦 类型
818 616 避雷
交易行
交易行 物品名称 [服务器]
+ + diff --git a/templates/jineng.html b/templates/jineng.html new file mode 100644 index 0000000..ccb61ae --- /dev/null +++ b/templates/jineng.html @@ -0,0 +1,158 @@ + + + + +技能详情 + + + + + +
+

{{ name }} 技能详情

+
更新时间:{{ update_time }}
+ + {% for group in groups %} +
+
{{ group.title }}
+
+ {% for skill in group.skills %} +
+ {% if skill.icon %} + {{ skill.name }} + {% else %} +
+ {% endif %} +
+
+ {{ skill.name }} + {% if skill.interval %} + {{ skill.interval }} + {% endif %} + {% if skill.distance %} + {{ skill.distance }} + {% endif %} + {% if skill.release_type %} + {{ skill.release_type }} + {% endif %} + {% if skill.weapon %} + {{ skill.weapon }} + {% endif %} +
+
{{ skill.desc }}
+
+
+ {% endfor %} +
+
+ {% endfor %} +
+ + + diff --git a/templates/jingnai.html b/templates/jingnai.html new file mode 100644 index 0000000..9e802ed --- /dev/null +++ b/templates/jingnai.html @@ -0,0 +1,165 @@ + + + + +精耐查询 + + + + + +
+

{{ server }} - {{ role_name }}

+
更新时间:{{ update_time }}
+ +
+
+
精力
+
{{ skill_energy }}
+
+
+
耐力
+
{{ skill_stamina }}
+
+
+
技能数量
+
{{ skill_count }}
+
+
+ + + + + + + + + + + + + {% for item in items %} + + + + + + + {% endfor %} + +
技能名称首领破绽颜色技能等级
{{ item.skill_name }}{{ item.leader_name }}{{ item.skill_color_text }}{{ item.skill_level }}
+
+ + + diff --git a/templates/jinqiqiyu.html b/templates/jinqiqiyu.html new file mode 100644 index 0000000..0876d73 --- /dev/null +++ b/templates/jinqiqiyu.html @@ -0,0 +1,109 @@ + + + + +近期奇遇 + + + + + +
+

{{ server }} 近期奇遇

+
更新时间:{{ update_time }}
+ + + + + + + + + + + + + {% for m in items %} + + + + + + + {% endfor %} + +
区服角色奇遇名称触发时间
{{ m.server }}{{ m.name }}{{ m.event }}{{ m.time }}
+ +
+ + + diff --git a/templates/mingjiantongji.html b/templates/mingjiantongji.html new file mode 100644 index 0000000..d976cd8 --- /dev/null +++ b/templates/mingjiantongji.html @@ -0,0 +1,124 @@ + + + + +名剑统计 + + + + + +
+

名剑统计(前1000) · {{ mode }}

+
更新时间:{{ update_time }}
+ + + + + + + + + + + + {% for m in items %} + + + + + + {% endfor %} + +
门派当前赛季数量上赛季数量
+
+ {% if icons.sect.get(m.name) %} + {{ m.name }} + {% endif %} + {{ m.name }} +
+
{{ m.this }}{{ m.last }}
+ +
+ + + diff --git a/templates/qixue.html b/templates/qixue.html new file mode 100644 index 0000000..eb0e5eb --- /dev/null +++ b/templates/qixue.html @@ -0,0 +1,160 @@ + + + + +奇穴详情 + + + + + +
+

{{ name }} 奇穴详情

+
更新时间:{{ update_time }}
+ + {% for group in groups %} +
+
{{ group['title'] }}
+
+ {% for item in group.talents %} +
+ {% if item['icon'] %} + {{ item['name'] }} + {% else %} +
+ {% endif %} +
+
+ {{ item['name'] }} + {{ item['class_text'] }} + {% if item['interval'] %} + {{ item['interval'] }} + {% endif %} +
+
{{ item['desc'] }}
+
+
+ {% endfor %} +
+
+ {% endfor %} +
+ + + diff --git a/templates/qiyuhuizong.html b/templates/qiyuhuizong.html new file mode 100644 index 0000000..04c5439 --- /dev/null +++ b/templates/qiyuhuizong.html @@ -0,0 +1,117 @@ + + + + +奇遇汇总 + + + + + +
+

{{ server }} 奇遇汇总

+
最近 {{ num }} 天 · 更新时间:{{ update_time }}
+ + + + + + + + + + + + + + {% for m in items %} + + + + + + + + {% endfor %} + +
区服奇遇名称触发次数最近角色最近时间
{{ m.server }}{{ m.event }}{{ m.count }}{{ m.latest_name }}{{ m.latest_time }}
+ +
+ + + diff --git a/templates/rank_role.html b/templates/rank_role.html new file mode 100644 index 0000000..b3d67c3 --- /dev/null +++ b/templates/rank_role.html @@ -0,0 +1,158 @@ + + + + +角色榜单 + + + + + +
+

{{ rank_name }}

+
{{ server }} · 更新时间:{{ update_time }}
+ + + + + + + + + + + + + + + + {% for item in items %} + + + + + + + + + + {% endfor %} + +
排名职业角色名称等级阵营帮会排行积分
{{ loop.index }} +
+ {% if icons.sect.get(item.force_name) %} + {{ item.force_name }} + {% endif %} + {{ item.force_name }} +
+
{{ item.role_name }}{{ item.role_level }}{{ item.camp_name }}{{ item.tong_name }}{{ item.total_score }}
+
+ + + diff --git a/templates/rank_tong.html b/templates/rank_tong.html new file mode 100644 index 0000000..177b998 --- /dev/null +++ b/templates/rank_tong.html @@ -0,0 +1,141 @@ + + + + +帮会榜单 + + + + + +
+

{{ rank_name }}

+
{{ server }} · 更新时间:{{ update_time }}
+ + + + + + + + + + + + + + + {% for item in items %} + + + + + + + + + {% endfor %} + +
排名帮会名称帮主据点人数排行积分
{{ loop.index }}{{ item.tong_name }}{{ item.master_name }}{{ item.castle_name }}{{ item.now_count }}/{{ item.max_count }}{{ item.total_score }}
+
+ + + diff --git a/templates/shitu.html b/templates/shitu.html new file mode 100644 index 0000000..2c6b546 --- /dev/null +++ b/templates/shitu.html @@ -0,0 +1,151 @@ + + + + +师徒招募 + + + + + +
+

{{ title }}

+
+ {{ server }} + {% if keyword %} · 关键词:{{ keyword }}{% endif %} + · 更新时间:{{ update_time }} +
+ + + + + + + + + + + + + + + + {% for item in items %} + + + + + + + + + + {% endfor %} + +
职业角色名称等级体型帮会阵营信息
+
+ {% if icons.sect.get(item.forceName) %} + {{ item.forceName }} + {% endif %} + {{ item.forceName }} +
+
{{ item.roleName }}{{ item.roleLevel }}{{ item.bodyName }}{{ item.tongName }}{{ item.campName }}{{ item.comment }}
+ +
+ + + diff --git a/templates/weizuoqiyu.html b/templates/weizuoqiyu.html new file mode 100644 index 0000000..5010029 --- /dev/null +++ b/templates/weizuoqiyu.html @@ -0,0 +1,139 @@ + + + + + 未做奇遇 + + + +
+
未做奇遇
+
{{ server }} · {{ name }}
+
+ +
+
普通奇遇({{ ptqy|length if ptqy else 0 }})
+ {% if ptqy %} +
+ {% for item in ptqy %} +
+ {% if icons.serendipity.get(item.event) %} + {{ item.event }} + {% else %} +
{{ item.event }}
+ {% endif %} +
{{ item.time }}
+
+ {% endfor %} +
+ {% else %} +
暂无未做普通奇遇
+ {% endif %} +
+ +
+
绝世奇遇({{ jsqy|length if jsqy else 0 }})
+ {% if jsqy %} +
+ {% for item in jsqy %} +
+ {% if icons.serendipity.get(item.event) %} + {{ item.event }} + {% else %} +
{{ item.event }}
+ {% endif %} +
{{ item.time }}
+
+ {% endfor %} +
+ {% else %} +
暂无未做绝世奇遇
+ {% endif %} +
+ + diff --git a/templates/zhanji.html b/templates/zhanji.html index eb5cfbc..95f70bf 100644 --- a/templates/zhanji.html +++ b/templates/zhanji.html @@ -107,7 +107,8 @@ table { width: 100%; border-collapse: collapse; margin-top: 20px; - font-size: 22px; + font-size: 18px; + table-layout: fixed; } thead { @@ -115,7 +116,7 @@ thead { } th, td { - padding: 10px; + padding: 8px 6px; text-align: center; } @@ -154,6 +155,36 @@ tbody tr:nth-child(odd) { color: #f5a623; font-weight: bold; } + +.time-col { + width: 170px; + font-size: 16px; + font-variant-numeric: tabular-nums; +} + +.duration-col { + width: 92px; +} + +.kungfu-col { + width: 150px; +} + +.result-col { + width: 64px; +} + +.score-col { + width: 104px; +} + +.grade-col { + width: 96px; +} + +.mvp-col { + width: 58px; +} @@ -210,28 +241,30 @@ tbody tr:nth-child(odd) { - - - - - - - + + + + + + + + {% for m in history %} - - - - + + + + - - - + + @@ -240,5 +273,27 @@ tbody tr:nth-child(odd) {
对战时长心法胜负积分变化最终积分平均段位MVP开始时间对战时长心法胜负积分变化最终积分平均段位MVP
{{ m.endTime - m.startTime }}{{ m.kungfu }}{{ '胜' if m.won else '负' }} + {{ m.startTime }}{{ m.endTime - m.startTime }}{{ m.kungfu }}{{ '胜' if m.won else '负' }} {{ m.mmr }} {{ m.totalMmr }}{{ m.avgGrade }} + {{ m.totalMmr }}{{ m.avgGrade }} {{ '是' if m.mvp else '-' }}
+ diff --git a/templates/zilipaixing.html b/templates/zilipaixing.html new file mode 100644 index 0000000..fee88ad --- /dev/null +++ b/templates/zilipaixing.html @@ -0,0 +1,163 @@ + + + + +资历排行 + + + + + +
+

{{ school }} 资历排行

+
{{ server }} | 更新时间:{{ update_time }}
+ + + + + + + + + + + + + + {% for item in items %} + + + + + + + + {% endfor %} + +
排名角色职业服务器资历值
{{ loop.index }} +
+ {% if item.avatarUrl %} + {{ item.roleName }} + {% endif %} + {{ item.roleName }} +
+
+
+ {% set force_icon = item.forceIcon or icons.sect.get(item.forceName) %} + {% if force_icon %} + {{ item.forceName }} + {% endif %} + {{ item.forceName }} +
+
{{ item.serverName }}{{ item.seniority }}
+
+ + +