diff --git a/README.md b/README.md index e51648a..00cba29 100644 --- a/README.md +++ b/README.md @@ -9,20 +9,23 @@ 插件内置 `功能` 指令,会以图片形式展示完整指令列表、参数说明和是否需要令牌。当前帮助页按 13 个功能分组维护,约 88 条指令。 主要功能包括: - -- 日常功能:日常、月历、名望、诛恶。 -- 官方功能:公告、维护、技改、区服、开服、状态。 -- 角色功能:角色、资历、名片、所有名片、奇遇、未做奇遇、战绩、精耐。 -- 职业功能:小药、宏、配装、阵眼、奇穴、技能。 -- 休闲功能:烟花、拜师、收徒、随机名片、攻略、奇遇统计、近期奇遇、奇遇汇总。 -- 阵营功能:沙盘、阵营拍卖、阵营事件、关隘首领、帮战记录、统战 YY。 -- 副本功能:百战、招募、掉落、解密。 -- 活动功能:扶摇、本日赤兔、本周赤兔、刷马、的卢。 -- 交易功能:金价、物价、交易行、贴吧物价。 -- 杂项功能:科举、花价、装饰、器物、八卦、骗子、骚话。 -- 排行功能:名剑统计、名剑排行、资历排行、试炼排行和各类风云录榜单。 -- 推送功能:开服推送、新闻推送、刷马推送、赤兔推送。 -- 避雷功能:避雷查看、添加、删除、修改、查询。 +【活动情报】 +活动日历: 日常 [延后天数] | 日常预测 +声望社:楚天社 | 云从社 | 披风会 | 穹野卫 +关隘首领:关隘 +赤兔:赤兔 | 本周赤兔 +阵营事件:阵营奉献 [阵营] +烟花记录::烟花 区服 角色 +马场查询:刷马 | 马场 +【名剑相关】 +名剑战绩:战绩 服务器 角色 [模式] +名剑排行:名剑排行 [模式] [数量] +名剑统计:名剑统计 [模式] +【排行榜单】 +排行统计:名士五十强 服务器 | 老江湖五十强 服务器 | 兵甲藏家五十强 服务器 | 名师五十强 服务器 | 阵营英雄五十强 服务器 | 薪火相传五十强 服务器 | + 庐园广记一百强 服务器 | 浩气神兵宝甲五十强 服务器 | 恶人神兵宝甲五十强 服务器 | 浩气爱心帮会五十强 服务器 | 恶人爱心帮会五十强 服务器 | + 赛季恶人五十强 服务器 | 赛季浩气五十强 服务器 | 上周恶人五十强 服务器 | 上周浩气五十强 服务器 | 本周恶人五十强 服务器 | 本周浩气五十强 服务器 +试炼排行:试炼排行 服务器 心法 ## 安装与依赖 diff --git a/core/fun_basic.py b/core/fun_basic.py index 1dee598..db94c9e 100644 --- a/core/fun_basic.py +++ b/core/fun_basic.py @@ -1,5 +1,7 @@ from pathlib import Path from datetime import datetime,date +from zoneinfo import ZoneInfo + import aiofiles import base64 import os @@ -142,3 +144,21 @@ def load_as_base64(icons_dir: str) -> dict[str, str]: icons[display_name] = f"data:{mime};base64,{data}" return icons + + +def format_time(ts): + try: + return datetime.fromtimestamp(int(ts), + tz=ZoneInfo("Asia/Shanghai") + ).strftime("%Y-%m-%d %H:%M:%S") + except (TypeError, ValueError, OSError): + return "" + +def format_remaining(ts): + try: + seconds = max(0, int(ts) - int(datetime.now().timestamp())) + hours, seconds = divmod(seconds, 3600) + minutes, seconds = divmod(seconds, 60) + return f"{hours}时{minutes:02d}分{seconds:02d}秒" + except (TypeError, ValueError): + return "" \ No newline at end of file diff --git a/core/jx3_data.py b/core/jx3_data.py index adae6f0..f58e78d 100644 --- a/core/jx3_data.py +++ b/core/jx3_data.py @@ -1,7 +1,8 @@ import json from datetime import datetime, timedelta from typing import Dict, Any, Optional, List, Union -from collections import defaultdict +from inspect import isawaitable +from typing import Any, Awaitable, Callable, Dict, Optional from astrbot.api import logger from astrbot.api import AstrBotConfig @@ -9,30 +10,9 @@ import astrbot.api.message_components as Comp from .request import APIClient from .sqlite import AsyncSQLiteDB -from .fun_basic import load_template,gold_to_string,gold_to_parts,week_to_num,compare_date_str +from .fun_basic import load_template,gold_to_parts,week_to_num,compare_date_str,format_time,format_remaining -ROLE_RANK_NAMES = { - "名士五十强", - "老江湖五十强", - "兵甲藏家五十强", - "名师五十强", - "阵营英雄五十强", - "薪火相传五十强", - "庐园广记一百强", -} -TONG_RANK_NAMES = { - "浩气神兵宝甲五十强", - "恶人神兵宝甲五十强", - "浩气爱心帮会五十强", - "恶人爱心帮会五十强", - "赛季恶人五十强", - "赛季浩气五十强", - "上周恶人五十强", - "上周浩气五十强", - "本周恶人五十强", - "本周浩气五十强", -} ACHIEVEMENT_CHOICES = [ (0, None, "资历总览"), @@ -127,6 +107,43 @@ class JX3Service: return None + async def _request_api( + self, + path: str, + params: Dict[str, Any], + processor: Optional[ + Callable[[Any, Dict[str, Any]], Any | Awaitable[Any]] + ] = None, + template: Optional[str] = None, + ) -> Dict[str, Any]: + """通用接口请求与模板处理。""" + return_data = self._init_return_data() + + data = await self._base_request(path, params) + if data is None: + return_data["msg"] = "获取接口信息失败" + return return_data + + try: + await processor(data, return_data) + except Exception as e: + logger.exception(f"数据处理时出错: {e}") + return_data["msg"] = "处理接口返回信息时出错" + return return_data + + # template 为空时不加载模板 + if template: + try: + return_data["temp"] = await load_template(template) + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + return return_data + + return_data["code"] = 200 + return return_data + + # --- 业务功能函数 --- async def helps(self) -> Dict[str, Any]: """帮助""" @@ -145,123 +162,377 @@ class JX3Service: return return_data - async def richang(self,mode: str, num: int) -> Dict[str, Any]: + async def richang(self, mode: str, num: int) -> Dict[str, Any]: """活动日历""" - return_data = self._init_return_data() - - # 1. 构造请求参数 - params = {"mode": mode, "num": num} - - # 2. 调用基础请求 - data: Optional[Dict[str, Any]] = await self._base_request( - "/active/calendar", params - ) - if not data: - return_data["msg"] = "获取接口信息失败" - return return_data - - # 3. 处理返回数据 - try: + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: if mode == "list": - items = [] - num_richang = week_to_num(data["today"]["week"]) or 0 + today = data.get("today") or {} + total = data.get("total") or [] - # 空白数据 - for _ in range(num_richang): - items.append({ + items = [ + { "en": False, "compare": "", "date": "", "war": "", - "battle": "" - }) + "battle": "", + } + for _ in range(week_to_num(today.get("week", "")) or 0) + ] - # 真实数据 - for m in data["total"]: - items.append({ + items.extend( + { "en": True, - "compare": compare_date_str(m.get("date", "")), - "date": m.get("date", ""), - "war": m.get("war", ""), - "battle": m.get("battle", "") - }) + "compare": compare_date_str(item.get("date", "")), + "date": item.get("date", ""), + "war": item.get("war", ""), + "battle": item.get("battle", ""), + } + for item in total + if isinstance(item, dict) + ) return_data["data"]["items"] = items - return_data["data"]["today"] = data["today"] - else: - result_msg = ( - f"{data.get('date')} 星期{data.get('week')}\n" - f"大战:{data.get('war')}\n" - f"战场:{data.get('battle')}\n" - f"阵营:{data.get('orecar')}\n" - f"宗门:{data.get('school')}\n" - f"驰援:{data.get('rescue')}\n" - ) - - luck = data.get('lucky', []) - luck_msg = f"【宠物福缘】\n{', '.join(luck)}\n" - card = data.get('card', []) - card_msg = f"【家园声望·加倍道具】\n{', '.join(card)}\n" - weekly:Dict = data.get('weekly') - conn = weekly.get('conn') - raid = weekly.get('raid') - conn_msg = f"【武林通鉴·公共任务】\n{', '.join(conn)}\n" - raid_msg = f"【武林通鉴·公共任务】\n{', '.join(raid)}\n" - return_data["data"] = result_msg + luck_msg + card_msg + conn_msg + raid_msg - except Exception as e: - logger.error(f"数据处理时出错: {e}") - return_data["msg"] = "处理接口返回信息时出错" - return return_data + return_data["data"]["today"] = today + return - # 加载模板 - if mode == "list": - try: - return_data["temp"] = await load_template("richangyuche.html") - except FileNotFoundError as e: - logger.error(f"加载模板失败: {e}") - return_data["msg"] = "系统错误:模板文件不存在" - return return_data - - return_data["code"] = 200 + weekly = data.get("weekly") or {} - return return_data + return_data["data"] = ( + f"{data.get('date', '')} 星期{data.get('week', '')}\n" + f"大战:{data.get('war', '')}\n" + f"战场:{data.get('battle', '')}\n" + f"阵营:{data.get('orecar', '')}\n" + f"宗门:{data.get('school', '')}\n" + f"驰援:{data.get('rescue', '')}\n" + f"【宠物福缘】\n{', '.join(data.get('lucky') or [])}\n" + f"【家园声望·加倍道具】\n{', '.join(data.get('card') or [])}\n" + f"【武林通鉴·公共任务】\n{', '.join(weekly.get('conn') or [])}\n" + f"【武林通鉴·团队秘境】\n{', '.join(weekly.get('raid') or [])}\n" + ) + + return await self._request_api( + path="/active/calendar", + params={"mode": mode, "num": num}, + processor=processor, + template="richangyuche.html" if mode == "list" else None, + ) async def xingxiashijian(self,name: str) -> Dict[str, Any]: - """行侠事件""" - return_data = self._init_return_data() - - # 1. 构造请求参数 - params = { "name": name} - - # 2. 调用基础请求 - data: Optional[Dict[str, Any]] = await self._base_request( - "jx3_xingxiashijian", "GET", params=params - ) - if not data: - return_data["msg"] = "获取接口信息失败" - return return_data - - # 3. 处理返回数据 - try: + """地图活动""" + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: return_data["data"]["items"] = data return_data["data"]["name"] = name - except Exception as e: - logger.error(f"数据处理时出错: {e}") - return_data["msg"] = "处理接口返回信息时出错" - return return_data + + return await self._request_api( + path="/active/celebs", + params={ "name": name}, + processor=processor, + template="xingxiashijian.html" + ) + + + async def guanaishouling(self) -> Dict[str, Any]: + """关隘首领""" + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: + groups = [ + { + "server": group.get("server", ""), + "records": [ + { + "camp_name": item.get("campName", ""), + "castle": item.get("castle", ""), + "str_status": item.get("statusText", ""), + "start_time": format_time(item.get("startTime")), + "end_time": format_time(item.get("endTime")), + "remaining_time": format_remaining(item.get("endTime")), + } + for item in group.get("data", []) + if isinstance(item, dict) + ], + } + for group in data + if isinstance(group, dict) and group.get("data") + ] + + groups = [group for group in groups if group["records"]] + + if not groups: + return_data["msg"] = "未查询到关隘首领信息" + return return_data + + return_data["data"] = { + "groups": groups, + "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + + return await self._request_api( + path="/castle/status", + params={"token": self.token}, + processor=processor, + template="guanaishouling.html" + ) + + + async def benrichitu(self) -> Dict[str, Any]: + """本日赤兔""" + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: + if not data or not isinstance(data, list): + return_data["data"] = "今日赤兔 暂无数据" + return - # 加载模板 - try: - return_data["temp"] = await load_template("xingxiashijian.html") - except FileNotFoundError as e: - logger.error(f"加载模板失败: {e}") - return_data["msg"] = "系统错误:模板文件不存在" - return return_data + result_lines = ["今日赤兔"] + for item in data: + result_lines.extend([ + f"时间:{item['date']}", + f"区服:{item['server']}", + f"地图:{item['mapName']}", + ]) + + return_data["data"] = "\n".join(result_lines).rstrip() + + return await self._request_api( + path="/chitu/records", + params={"token": self.token}, + processor=processor, + template="" + ) + + + async def benzhouchitu(self) -> Dict[str, Any]: + """本周赤兔""" + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: + if not data or not isinstance(data, list): + return_data["data"] = "本周赤兔 暂无数据" + return + + result_lines = ["本周赤兔"] + for item in data: + result_lines.extend([ + f"时间:{item['date']}", + f"区服:{item['server']}", + f"地图:{item['mapName']}", + ]) + + return_data["data"] = "\n".join(result_lines).rstrip() + + return await self._request_api( + path="/chitu/week/records", + params={"token": self.token}, + processor=processor, + template="" + ) + + + async def zhenyingevent(self,name: str,limit: str) -> Dict[str, Any]: + """阵营事件""" + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: + for item in data: + item["seizeTime"] = format_time(item.get("seizeTime")) + + return_data["data"] = { + "items": data, + "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + + return await self._request_api( + path="/fenxian/records", + params={"token": self.token,"name": name, "limit": limit}, + processor=processor, + template="zhenyingevent.html" + ) + + + async def yanhuachaxun(self, server: str, name:str ) -> Dict[str, Any]: + """烟花记录""" + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: + for item in data: + item["time"] = format_time(item.get("time")) + + return_data["data"]["list"] = data + + return await self._request_api( + path="/firework/records", + params={"token": self.token,"name": name, "server": server}, + processor=processor, + template="yanhuan.html" + ) + + + async def shuma(self,server:str) -> Dict[str, Any]: + """刷马""" + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: + return_data["data"] = ( + f"【阴山大草原】\n{', '.join(data.get('阴山大草原') or [])}\n" + f"【鲲鹏岛】\n{', '.join(data.get('鲲鹏岛') or [])}\n" + f"【黑戈壁】\n{', '.join(data.get('黑戈壁') or [])}\n" + ) + + return await self._request_api( + path="/ranch/chat", + params={"token": self.token, "server": server}, + processor=processor, + template="" + ) + + + async def machang(self, server: str, expired: int) -> Dict[str, Any]: + """马场""" + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: + data0 = data.get("data") + return_data["data"] = ( + f"【区服】:{data.get('server')}\n" + f"【阴山大草原】\n{', '.join(data0.get('阴山大草原') or [])}\n" + f"【鲲鹏岛】\n{', '.join(data0.get('鲲鹏岛') or [])}\n" + f"【黑戈壁】\n{', '.join(data0.get('黑戈壁') or [])}\n" + f"【龙泉府 / 进图(21:10)】\n{', '.join(data0.get('龙泉府 / 进图(21:10)') or [])}\n" + f"\n{data.get('note')}\n" + ) + + return await self._request_api( + path="/ranch/records", + params={"token": self.token, "server": server, "expired": expired}, + processor=processor, + template="" + ) + + + async def zhanji(self, name: str, server:str, mode:str) -> Dict[str, Any]: + """战绩""" + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: + return_data["data"] = data + + return await self._request_api( + path="/arena/recent", + params={"server": server, "name":name, "mode":mode, "token": self.token, "ticket": self.ticket}, + processor=processor, + template="zhanji.html" + ) + + + async def mingjianpaihang(self, limit: str, mode:str) -> Dict[str, Any]: + """名剑排行""" + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: + return_data["data"]["lists"] = data + + return await self._request_api( + path="/arena/awesome", + params={"limit": limit, "mode":mode, "token": self.token, "ticket": self.ticket}, + processor=processor, + template="mingjianpaihang.html" + ) + + + async def mingjiantongji(self, mode: str) -> Dict[str, Any]: + """名剑统计""" + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: + return_data["data"] = { + "items": data, + "mode": mode, + "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + + return await self._request_api( + path="/arena/schools", + params={"mode": mode, "token": self.token, "ticket": self.ticket}, + processor=processor, + template="mingjiantongji.html" + ) + + + async def rank_statistical(self, name: str, server: str) -> Dict[str, Any]: + """排行榜单""" + ROLE_RANK_NAMES = { + "名士五十强", + "老江湖五十强", + "兵甲藏家五十强", + "名师五十强", + "阵营英雄五十强", + "薪火相传五十强", + "庐园广记一百强", + } + TONG_RANK_NAMES0 = { + "赛季恶人五十强", + "赛季浩气五十强", + "本周恶人五十强", + "本周浩气五十强", + } + TONG_RANK_NAMES1 = { + "浩气神兵宝甲五十强", + "恶人神兵宝甲五十强", + "浩气爱心帮会五十强", + "恶人爱心帮会五十强", + } + TONG_RANK_NAMES2 = { + "上周恶人五十强", + "上周浩气五十强", + } + if name in ROLE_RANK_NAMES: + template_name = "rank_role.html" + elif name in TONG_RANK_NAMES0: + template_name = "rank_tong0.html" + elif name in TONG_RANK_NAMES1: + template_name = "rank_tong1.html" + elif name in TONG_RANK_NAMES2: + template_name = "rank_tong2.html" + + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: + items = data.get("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") + } + + return await self._request_api( + path="/rank/statistics", + params={"server": server, "name": name, "token": self.token}, + processor=processor, + template=template_name + ) + + + async def shilianpaixing(self, name: str, server: str) -> Dict[str, Any]: + """试炼排行""" + # 数据处理 + async def processor(data: Any, return_data: Dict[str, Any]) -> None: + items = data.get("data", []) + + return_data["data"] = { + "items": items, + "name": data.get("name", name), + "server": data.get("server", server), + "update_time": format_time(data.get("time")) + } + + return await self._request_api( + path="/rank/trials", + params={"server": server,"name": name,"token": self.token,}, + processor=processor, + template="shilianpaixing.html" + ) + + + + - return_data["code"] = 200 - return return_data async def keju(self,subject: str, limit: int) -> Dict[str, Any]: @@ -943,60 +1214,6 @@ class JX3Service: return return_data - async def shilianpaixing(self, name: str, server: str) -> Dict[str, Any]: - """试炼排行""" - return_data = self._init_return_data() - - params = { - "server": server, - "name": name, - "token": self.token, - } - - data: Optional[Dict[str, Any]] = await self._base_request( - "jx3_shilianpaixing", "GET", params=params - ) - - if not data or not isinstance(data, dict): - return_data["msg"] = "未查询到试炼排行信息" - return return_data - - try: - items = data.get("data", []) - if not isinstance(items, list) or not items: - return_data["msg"] = "未查询到试炼排行信息" - return return_data - - update_time = data.get("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 = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - - return_data["data"] = { - "items": items, - "name": data.get("name", name), - "server": data.get("server", server), - "update_time": update_time - } - except Exception as e: - logger.error(f"处理试炼排行数据失败: {e}") - return_data["msg"] = "处理试炼排行数据失败" - return return_data - - try: - return_data["temp"] = await load_template("shilianpaixing.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]: @@ -1223,124 +1440,10 @@ class JX3Service: return return_data - async def benrichitu(self) -> Dict[str, Any]: - """本日赤兔""" - return_data = self._init_return_data() - - params = {"token": self.token} - - data: Optional[List[Dict[str, Any]]] = await self._base_request( - "jx3_benrichitu", "GET", params=params - ) - - def no_data() -> Dict[str, Any]: - return_data["code"] = 200 - return_data["data"] = "本日赤兔 暂无数据" - return return_data - - if not data or not isinstance(data, list): - return no_data() - - try: - items = [] - for item in data: - if not isinstance(item, dict): - continue - - date_value = item.get("date", "") - if date_value: - try: - date_text = datetime.fromtimestamp(int(date_value)).strftime("%Y-%m-%d %H:%M:%S") - except (TypeError, ValueError, OSError): - date_text = str(date_value) - else: - date_text = "" - - items.append({ - "date": date_text, - "server": item.get("server", ""), - "map_name": item.get("map_name", ""), - }) - - if not items: - return no_data() - - result_lines = ["本日赤兔"] - for item in items: - result_lines.extend([ - f"时间:{item['date']}", - f"区服:{item['server']}", - f"地图:{item['map_name']}", - "", - ]) - - return_data["code"] = 200 - return_data["data"] = "\n".join(result_lines).rstrip() - except Exception as e: - logger.error(f"处理本日赤兔数据失败: {e}") - return no_data() - - return return_data - async def benzhouchitu(self) -> Dict[str, Any]: - """本周赤兔""" - return_data = self._init_return_data() - params = {"token": self.token} - data: Optional[List[Dict[str, Any]]] = await self._base_request( - "jx3_benzhouchitu", "GET", params=params - ) - - def no_data() -> Dict[str, Any]: - return_data["code"] = 200 - return_data["data"] = "本周赤兔 暂无数据" - return return_data - - if not data or not isinstance(data, list): - return no_data() - - try: - items = [] - for item in data: - if not isinstance(item, dict): - continue - - date_value = item.get("date", "") - if date_value: - try: - date_text = datetime.fromtimestamp(int(date_value)).strftime("%Y-%m-%d %H:%M:%S") - except (TypeError, ValueError, OSError): - date_text = str(date_value) - else: - date_text = "" - - items.append({ - "date": date_text, - "server": item.get("server", ""), - "map_name": item.get("map_name", ""), - }) - - if not items: - return no_data() - - result_lines = ["本周赤兔"] - for item in items: - result_lines.extend([ - f"时间:{item['date']}", - f"区服:{item['server']}", - f"地图:{item['map_name']}", - "", - ]) - - return_data["code"] = 200 - return_data["data"] = "\n".join(result_lines).rstrip() - except Exception as e: - logger.error(f"处理本周赤兔数据失败: {e}") - return no_data() - - return return_data async def zhengyingpaimai(self, server: str, name: str) -> Dict[str, Any]: @@ -1383,153 +1486,10 @@ class JX3Service: return return_data - async def zhenyingevent(self) -> Dict[str, Any]: - """阵营事件""" - return_data = self._init_return_data() - - params = {"token": self.token} - - data: Optional[List[Dict[str, Any]]] = await self._base_request( - "jx3_zhenyingevent", "GET", params=params - ) - - if not data or not isinstance(data, list): - return_data["msg"] = "未查询到阵营事件信息" - return return_data - - try: - items = [] - for item in data: - if not isinstance(item, dict): - continue - - seize_time = item.get("seize_time") - if seize_time: - try: - item["seize_time"] = datetime.fromtimestamp(int(seize_time)).strftime("%Y-%m-%d %H:%M:%S") - except (TypeError, ValueError, OSError): - item["seize_time"] = str(seize_time) - else: - item["seize_time"] = "" - - items.append(item) - - if not items: - return_data["msg"] = "未查询到阵营事件信息" - return return_data - - return_data["data"] = { - "items": items, - "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("zhenyingevent.html") - except FileNotFoundError as e: - logger.error(f"加载模板失败: {e}") - return_data["msg"] = "系统错误:模板文件不存在" - return return_data - - return_data["code"] = 200 - - return return_data - async def guanaishouling(self) -> Dict[str, Any]: - """关隘首领""" - return_data = self._init_return_data() - - params = {"token": self.token} - - data: Optional[List[Dict[str, Any]]] = await self._base_request( - "jx3_guanaishouling", "GET", params=params - ) - - if not data or not isinstance(data, list): - return_data["msg"] = "未查询到关隘首领信息" - return return_data - - try: - now_ts = int(datetime.now().timestamp()) - def format_time(value: Any) -> str: - if not value: - return "" - try: - return datetime.fromtimestamp(int(value)).strftime("%Y-%m-%d %H:%M:%S") - except (TypeError, ValueError, OSError): - return str(value) - def format_remaining(end_time: Any) -> str: - if not end_time: - return "" - try: - seconds = max(0, int(end_time) - now_ts) - except (TypeError, ValueError): - return str(end_time) - - hours = seconds // 3600 - minutes = (seconds % 3600) // 60 - secs = seconds % 60 - return f"{hours}时{minutes:02d}分{secs:02d}秒" - - groups = [] - for group in data: - if not isinstance(group, dict): - continue - - records = group.get("data", []) - if not isinstance(records, list) or not records: - continue - - parsed_records = [] - for item in records: - if not isinstance(item, dict): - continue - - end_time = item.get("end_time") - parsed_records.append({ - "camp_name": item.get("camp_name", ""), - "castle": item.get("castle", ""), - "str_status": item.get("str_status", ""), - "start_time": format_time(item.get("start_time")), - "end_time": format_time(end_time), - "remaining_time": format_remaining(end_time), - }) - - if parsed_records: - groups.append({ - "server": group.get("server", ""), - "records": parsed_records, - }) - - if not groups: - return_data["msg"] = "未查询到关隘首领信息" - return return_data - - return_data["data"] = { - "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("guanaishouling.html") - except FileNotFoundError as e: - logger.error(f"加载模板失败: {e}") - return_data["msg"] = "系统错误:模板文件不存在" - return return_data - - return_data["code"] = 200 - - return return_data async def bangzhanjilu(self, server: str) -> Dict[str, Any]: @@ -1717,49 +1677,7 @@ class JX3Service: return return_data - async def yanhuachaxun(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[List[Dict[str, Any]]] = await self._base_request( - "jx3_yanhuachaxun", "GET", 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 Exception as e: - logger.error(f"数据处理时出错: {e}") - return_data["msg"] = "处理接口返回信息时出错" - return return_data - - # 4. 加载模板 - try: - return_data["temp"] = await load_template("yanhuan.html") - except FileNotFoundError as e: - logger.error(f"加载模板失败: {e}") - return_data["msg"] = "系统错误:模板文件不存在" - return return_data - - return_data["code"] = 200 - - return return_data async def pianzhi(self, uid: str) -> Dict[str, Any]: @@ -2101,112 +2019,13 @@ class JX3Service: return return_data - async def zhanji(self, name: str, server:str, mode:str) -> Dict[str, Any]: - """战绩""" - return_data = self._init_return_data() - - # 1. 构造请求参数 - params = {"server": server, "name":name, "mode":mode, "token": self.token, "ticket": self.ticket} - - # 2. 调用基础请求 - data: Optional[Dict[str, Any]] = await self._base_request( - "jx3_zhanji", "GET", params=params - ) - - if not data: - return_data["msg"] = "查询角色战绩失败" - return return_data - - # 4. 加载模板 - try: - return_data["temp"] = await load_template("zhanji.html") - except FileNotFoundError as e: - logger.error(f"加载模板失败: {e}") - return_data["msg"] = "系统错误:模板文件不存在" - 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._init_return_data() - - # 1. 构造请求参数 - params = {"limit": limit, "mode":mode, "token": self.token, "ticket": self.ticket} - - # 2. 调用基础请求 - data: Optional[Dict[str, Any]] = await self._base_request( - "jx3_mingjianpaihang", "GET", params=params - ) - - if not data: - return_data["msg"] = "获取接口数据失败" - return return_data - - return_data["data"]["lists"] = data - - # 4. 加载模板 - try: - return_data["temp"] = await load_template("mingjianpaihang.html") - except FileNotFoundError as e: - logger.error(f"加载模板失败: {e}") - return_data["msg"] = "系统错误:模板文件不存在" - return return_data - - - return_data["code"] = 200 - - 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]: @@ -2303,59 +2122,7 @@ class JX3Service: 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 _load_achievement_cache(self, key: str) -> tuple[Optional[Any], bool]: @@ -2898,72 +2665,7 @@ class JX3Service: return return_data - async def shuamamsg(self,server:str,type:str,subtype:str) -> Dict[str, Any]: - """刷马消息""" - return_data = self._init_return_data() - params = {"server": server, "type": type, "subtype": subtype} - # 提取字段可能返回字典 - data: Optional[Dict[str, Any]] = await self._base_request( - "jx3box_shuamamsg", "GET", params=params) - - if not data: - return_data["msg"] = "获取接口信息失败或数据格式错误" - return return_data - - try: - # - new_msg = data.get("list",[])[0] - return_data["status"] = new_msg.get('id') - - result_msg = f"{server}\n" - result_msg += f"{new_msg.get('content')}\n" - result_msg += f"{new_msg.get('created_at')}\n" - - return_data["data"] = result_msg - except Exception as e: - logger.error(f"数据处理时出错: {e}") - return_data["msg"] = "处理接口返回信息时出错" - return return_data - - return_data["code"] = 200 - - return return_data - - - async def shuma(self, server: str) -> Dict[str, Any]: - """刷马""" - return_data = self._init_return_data() - - # 1. 构造请求参数 - params = {"server": server, "token": self.token} - - # 2. 调用基础请求 - data: Optional[Dict[str, Any]] = await self._base_request( - "jx3_shuama", "GET", params=params, out_key="" - ) - - if not data: - return_data["msg"] = "获取接口信息失败" - return return_data - - # 3. 处理返回数据 - try: - _data = data["data"]["data"] - result_msg = f"{server}\n" - result_msg += f"黑戈壁:\n{_data['黑戈壁'][0]}\n" - result_msg += f"阴山大草原:\n{_data['阴山大草原'][0]}\n" - result_msg += f"鲲鹏岛:\n{_data['鲲鹏岛'][0]}\n" - result_msg += f"\n{data['data']['note']}" - return_data["data"] = result_msg - except Exception as e: - logger.error(f"处理返回数据失败: {e}") - return_data["msg"] = "处理返回数据失败" - return return_data - - return_data["code"] = 200 - - return return_data async def jinjia(self, server: str, limit:str) -> Dict[str, Any]: diff --git a/core/message.py b/core/message.py index 800cc23..db1dd5a 100644 --- a/core/message.py +++ b/core/message.py @@ -283,9 +283,136 @@ class MessageBuilder: return await self.T2I_image_msg(event, lambda: self.jx3api.richang("list",15)) - async def xingxiashijian(self, event: AstrMessageEvent,name: str = "穹野卫"): - """ 名望""" - return await self.T2I_image_msg(event, lambda: self.jx3api.xingxiashijian(name)) + async def qiongyewei(self, event: AstrMessageEvent): + """ 穹野卫""" + return await self.T2I_image_msg(event, lambda: self.jx3api.xingxiashijian("穹野卫")) + + async def pifenghui(self, event: AstrMessageEvent): + """ 披风会""" + return await self.T2I_image_msg(event, lambda: self.jx3api.xingxiashijian("披风会")) + + async def yunchongshe(self, event: AstrMessageEvent): + """ 云从社""" + return await self.T2I_image_msg(event, lambda: self.jx3api.xingxiashijian("云从社")) + + async def chutianshe(self, event: AstrMessageEvent): + """ 楚天社 """ + return await self.T2I_image_msg(event, lambda: self.jx3api.xingxiashijian("楚天社")) + + async def guanaishouling(self, event: AstrMessageEvent): + """ 关隘首领""" + return await self.T2I_image_msg(event, self.jx3api.guanaishouling) + + async def benrichitu(self, event: AstrMessageEvent): + """ 本日赤兔""" + return await self.plain_msg(event, self.jx3api.benrichitu) + + async def benzhouchitu(self, event: AstrMessageEvent): + """ 本周赤兔""" + return await self.plain_msg(event, self.jx3api.benzhouchitu) + + async def zhenyingevent(self, event: AstrMessageEvent, name:str = ""): + """ 阵营事件 阵营""" + return await self.T2I_image_msg(event, lambda: self.jx3api.zhenyingevent(name,50)) + + async def yanhuachaxun(self, event: AstrMessageEvent,server: str = "",name: str = "" ): + """ 烟花 服务器 角色""" + return await self.T2I_image_msg(event, lambda: self.jx3api.yanhuachaxun( self.serverdefault(server),name)) + + async def shuma(self, event: AstrMessageEvent,server: str ): + """ 刷马 服务器""" + return await self.plain_msg(event, lambda: self.jx3api.shuma(server)) + + async def machang(self, event: AstrMessageEvent,server: str ): + """ 马场 服务器""" + return await self.plain_msg(event, lambda: self.jx3api.machang(server,1)) + + async def zhanji(self, event: AstrMessageEvent, server: str ,name: str , mode:str = "33"): + """ 战绩 服务器 角色 模式""" + return await self.T2I_image_msg(event, lambda: self.jx3api.zhanji(name, server,mode)) + + async def mingjianpaihang(self, event: AstrMessageEvent, mode:str = "33",limit: int = 50): + """ 名剑排行 模式 数量 """ + return await self.T2I_image_msg(event, lambda: self.jx3api.mingjianpaihang(limit,mode)) + + async def mingjiantongji(self, event: AstrMessageEvent,mode: str = "33"): + """ 名剑统计 模式""" + return await self.T2I_image_msg(event, lambda: self.jx3api.mingjiantongji(mode)) + + async def mingshiwushiqiang(self, event: AstrMessageEvent, server: str): + """ 名士五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("名士五十强", server)) + + async def laojianghuwushiqiang(self, event: AstrMessageEvent, server: str): + """ 老江湖五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("老江湖五十强", server)) + + async def bingjiacangjiawushiqiang(self, event: AstrMessageEvent, server: str): + """ 兵甲藏家五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("兵甲藏家五十强", server)) + + async def mingshiwushiqiang_mentor(self, event: AstrMessageEvent, server: str): + """ 名师五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("名师五十强", server)) + + async def zhengyingyingxiongwushiqiang(self, event: AstrMessageEvent, server: str): + """ 阵营英雄五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("阵营英雄五十强", server)) + + async def xinhuoxiangchuanwushiqiang(self, event: AstrMessageEvent, server: str): + """ 薪火相传五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("薪火相传五十强", server)) + + async def luyuanguangjiyibaiqiang(self, event: AstrMessageEvent, server: str): + """ 庐园广记一百强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("庐园广记一百强", server)) + + async def haoqishenbingbaojiawushiqiang(self, event: AstrMessageEvent, server: str): + """ 浩气神兵宝甲五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("浩气神兵宝甲五十强", server)) + + async def erenshenbingbaojiawushiqiang(self, event: AstrMessageEvent, server: str ): + """ 恶人神兵宝甲五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("恶人神兵宝甲五十强", server)) + + async def haoqiaixinbanghuiwushiqiang(self, event: AstrMessageEvent, server: str ): + """ 浩气爱心帮会五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("浩气爱心帮会五十强", server)) + + async def erenaixinbanghuiwushiqiang(self, event: AstrMessageEvent, server: str ): + """ 恶人爱心帮会五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("恶人爱心帮会五十强", server)) + + async def saijierenwushiqiang(self, event: AstrMessageEvent, server: str): + """ 赛季恶人五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("赛季恶人五十强", server)) + + async def saijihaoqiwushiqiang(self, event: AstrMessageEvent, server: str ): + """ 赛季浩气五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("赛季浩气五十强", server)) + + async def shangzhouerenwushiqiang(self, event: AstrMessageEvent, server: str ): + """ 上周恶人五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("上周恶人五十强", server)) + + async def shangzhouhaoqiwushiqiang(self, event: AstrMessageEvent, server: str ): + """ 上周浩气五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("上周浩气五十强", server)) + + async def benzhouerenwushiqiang(self, event: AstrMessageEvent, server: str ): + """ 本周恶人五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("本周恶人五十强", server)) + + async def benzhouhaoqiwushiqiang(self, event: AstrMessageEvent, server: str ): + """ 本周浩气五十强 服务器""" + return await self.T2I_image_msg(event, lambda: self.jx3api.rank_statistical("本周浩气五十强", server)) + + async def shilianpaixing(self, event: AstrMessageEvent, server: str , name: str): + """ 试炼排行 服务器 心法 """ + return await self.T2I_image_msg(event, lambda: self.jx3api.shilianpaixing(name, server)) + + + async def keju(self, event: AstrMessageEvent,subject: str, limit: int = 5): @@ -366,9 +493,7 @@ class MessageBuilder: """ 资历排行 """ return await self.T2I_image_msg(event, lambda: self.jx3api.zilipaixing("", "")) - async def shilianpaixing(self, event: AstrMessageEvent, name: str, server: str = ""): - """ 试炼排行 心法 服务器""" - return await self.T2I_image_msg(event, lambda: self.jx3api.shilianpaixing(name, self.serverdefault(server))) + async def shaohua(self, event: AstrMessageEvent,): @@ -406,29 +531,17 @@ class MessageBuilder: return await self.T2I_image_msg(event, self.jx3api.zhueevent) - async def benrichitu(self, event: AstrMessageEvent): - """ 本日赤兔""" - return await self.plain_msg(event, self.jx3api.benrichitu) - async def benzhouchitu(self, event: AstrMessageEvent): - """ 本周赤兔""" - return await self.plain_msg(event, self.jx3api.benzhouchitu) - async def zhengyingpaimai(self, event: AstrMessageEvent,name: str = "玄晶", server: str = ""): """ 阵营拍卖 物品名称 服务器""" return await self.T2I_image_msg(event, lambda: self.jx3api.zhengyingpaimai( self.serverdefault(server), name)) - async def zhenyingevent(self, event: AstrMessageEvent): - """ 阵营事件""" - return await self.T2I_image_msg(event, self.jx3api.zhenyingevent) - async def guanaishouling(self, event: AstrMessageEvent): - """ 关隘首领""" - return await self.T2I_image_msg(event, self.jx3api.guanaishouling) + async def bangzhanjilu(self, event: AstrMessageEvent, server: str = ""): @@ -446,9 +559,7 @@ class MessageBuilder: return await self.T2I_image_msg(event, lambda: self.jx3api.dilujilu( self.serverdefault(server))) - async def yanhuachaxun(self, event: AstrMessageEvent,name: str = "飞翔大野猪", server: str = ""): - """ 烟花 角色 服务器""" - return await self.T2I_image_msg(event, lambda: self.jx3api.yanhuachaxun( self.serverdefault(server),name)) + async def pianzhi(self, event: AstrMessageEvent,qq: str): @@ -489,20 +600,8 @@ class MessageBuilder: return await self.T2I_image_msg(event, lambda: self.jx3api.qiyuhuizong(self.serverdefault(target_server), num)) - async def 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)) - async def mingjianpaihang(self, event: AstrMessageEvent,limit: str = "50", mode:str = "33"): - """ 排行 数量 类型""" - return await self.T2I_image_msg(event, lambda: self.jx3api.mingjianpaihang(limit,mode)) - - - async def mingjiantongji(self, event: AstrMessageEvent,mode: str = "33"): - """ 名剑统计 模式""" - return await self.T2I_image_msg(event, lambda: self.jx3api.mingjiantongji(mode)) - async def tuanduizhaomu(self, event: AstrMessageEvent,keyword: str = "25人普通会战弓月城", server: str = ""): """ 招募 副本 服务器""" @@ -519,94 +618,8 @@ class MessageBuilder: return await self.T2I_image_msg(event, lambda: self.jx3api.shitu(1, keyword, self.serverdefault(server))) - async def 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 mingshiwushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 名士五十强 服务器""" - return await self. rank_statistical(event, "名士五十强", server) - - - async def laojianghuwushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 老江湖五十强 服务器""" - return await self. rank_statistical(event, "老江湖五十强", server) - - - async def bingjiacangjiawushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 兵甲藏家五十强 服务器""" - return await self. rank_statistical(event, "兵甲藏家五十强", server) - - - async def mingshiwushiqiang_mentor(self, event: AstrMessageEvent, server: str = ""): - """ 名师五十强 服务器""" - return await self. rank_statistical(event, "名师五十强", server) - - - async def zhengyingyingxiongwushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 阵营英雄五十强 服务器""" - return await self. rank_statistical(event, "阵营英雄五十强", server) - - - async def xinhuoxiangchuanwushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 薪火相传五十强 服务器""" - return await self. rank_statistical(event, "薪火相传五十强", server) - - - async def luyuanguangjiyibaiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 庐园广记一百强 服务器""" - return await self. rank_statistical(event, "庐园广记一百强", server) - - - async def haoqishenbingbaojiawushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 浩气神兵宝甲五十强 服务器""" - return await self. rank_statistical(event, "浩气神兵宝甲五十强", server) - - - async def erenshenbingbaojiawushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 恶人神兵宝甲五十强 服务器""" - return await self. rank_statistical(event, "恶人神兵宝甲五十强", server) - - - async def haoqiaixinbanghuiwushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 浩气爱心帮会五十强 服务器""" - return await self. rank_statistical(event, "浩气爱心帮会五十强", server) - - - async def erenaixinbanghuiwushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 恶人爱心帮会五十强 服务器""" - return await self. rank_statistical(event, "恶人爱心帮会五十强", server) - - - async def saijierenwushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 赛季恶人五十强 服务器""" - return await self. rank_statistical(event, "赛季恶人五十强", server) - - - async def saijihaoqiwushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 赛季浩气五十强 服务器""" - return await self. rank_statistical(event, "赛季浩气五十强", server) - - - async def shangzhouerenwushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 上周恶人五十强 服务器""" - return await self. rank_statistical(event, "上周恶人五十强", server) - - - async def shangzhouhaoqiwushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 上周浩气五十强 服务器""" - return await self. rank_statistical(event, "上周浩气五十强", server) - - - async def benzhouerenwushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 本周恶人五十强 服务器""" - return await self. rank_statistical(event, "本周恶人五十强", server) - - - async def benzhouhaoqiwushiqiang(self, event: AstrMessageEvent, server: str = ""): - """ 本周浩气五十强 服务器""" - return await self. rank_statistical(event, "本周浩气五十强", server) + async def jueshe(self, event: AstrMessageEvent,name: str, server: str = ""): @@ -634,9 +647,7 @@ class MessageBuilder: return await self.image_msg(event, lambda: self.jx3api.shuijimingpian(force,body, self.serverdefault(server))) - async def shuma(self, event: AstrMessageEvent,server: str = ""): - """ 刷马 服务器""" - return await self.plain_msg(event, lambda: self.jx3api.shuma( self.serverdefault(server))) + async def jinjia(self, event: AstrMessageEvent,server: str = "", limit:str = "15"): diff --git a/main.py b/main.py index 4300100..cc8c57d 100644 --- a/main.py +++ b/main.py @@ -198,56 +198,21 @@ class Jx3ApiPlugin(Star): self.command_map = { "功能": self. jx3cmd.helps, "日常": self. jx3cmd.richang, - "月历": self. jx3cmd.richangyuche, - "名望": self. jx3cmd.xingxiashijian, - "科举": self. jx3cmd.keju, - "花价": self. jx3cmd.huajia, - "装饰": self. jx3cmd.zhuangshi, - "器物": self. jx3cmd.qiwu, - "公告": self. jx3cmd.xinwen, - "维护": self. jx3cmd.weihu, - "区服": self. jx3cmd.qufu, - "开服": self. jx3cmd.kaifu, - "状态": self. jx3cmd.zhuangtai, - "技改": self. jx3cmd.jigai, - "小药": self. jx3cmd.xiaoyao, - "阵眼": self. jx3cmd.zhenyan, - "奇穴": self. jx3cmd.qixue, - "技能": self. jx3cmd.jineng, - "资历排行": self. jx3cmd.zilipaixing, - "全服资历排行": self. jx3cmd.zilipaihang, - "试炼排行": self. jx3cmd.shilianpaixing, - "骚话": self. jx3cmd.shaohua, - "资历": self. jx3cmd.zili, - "解密": self. jx3cmd.jiemi, - "沙盘": self. jx3cmd.shapan, - "攻略": self. jx3cmd.qiyugonglue, - "宏": self. jx3cmd.hong, - "配装": self. jx3cmd.peizhuang, - "百战": self. jx3cmd.baizhan, - "扶摇": self. jx3cmd.fuyaojjiutian, - "诛恶": self. jx3cmd.zhueevent, - "本日赤兔": self. jx3cmd.benrichitu, + "日常预测": self. jx3cmd.richangyuche, + "穹野卫": self. jx3cmd.qiongyewei, + "披风会": self. jx3cmd.pifenghui, + "云从社": self. jx3cmd.yunchongshe, + "楚天社": self. jx3cmd.chutianshe, + "关隘": self. jx3cmd.guanaishouling, + "赤兔": self. jx3cmd.benrichitu, "本周赤兔": self. jx3cmd.benzhouchitu, - "拍卖": self. jx3cmd.zhengyingpaimai, - "阵营事件": self. jx3cmd.zhenyingevent, - "关隘首领": self. jx3cmd.guanaishouling, - "帮战记录": self. jx3cmd.bangzhanjilu, - "统战": self. jx3cmd.tongzhanyy, - "的卢": self. jx3cmd.dilujilu, + "阵营奉献": self. jx3cmd.zhenyingevent, "烟花": self. jx3cmd.yanhuachaxun, - "骗子": self. jx3cmd.pianzhi, - "奇遇": self. jx3cmd.juesheqiyu, - "未做奇遇": self. jx3cmd.weizuoqiyu, - "奇遇统计": self. jx3cmd.qiyutongji, - "近期奇遇": self. jx3cmd.jinqiqiyu, - "奇遇汇总": self. jx3cmd.qiyuhuizong, + "刷马": self. jx3cmd.shuma, + "马场": self. jx3cmd.machang, "战绩": self. jx3cmd.zhanji, "名剑排行": self. jx3cmd.mingjianpaihang, "名剑统计": self. jx3cmd.mingjiantongji, - "招募": self. jx3cmd.tuanduizhaomu, - "拜师": self. jx3cmd.baishi, - "收徒": self. jx3cmd.shoutu, "名士五十强": self. jx3cmd.mingshiwushiqiang, "老江湖五十强": self. jx3cmd.laojianghuwushiqiang, "兵甲藏家五十强": self. jx3cmd.bingjiacangjiawushiqiang, @@ -265,12 +230,60 @@ class Jx3ApiPlugin(Star): "上周浩气五十强": self. jx3cmd.shangzhouhaoqiwushiqiang, "本周恶人五十强": self. jx3cmd.benzhouerenwushiqiang, "本周浩气五十强": self. jx3cmd.benzhouhaoqiwushiqiang, + "试炼排行": self. jx3cmd.shilianpaixing, + + + "科举": self. jx3cmd.keju, + "花价": self. jx3cmd.huajia, + "装饰": self. jx3cmd.zhuangshi, + "器物": self. jx3cmd.qiwu, + "公告": self. jx3cmd.xinwen, + "维护": self. jx3cmd.weihu, + "区服": self. jx3cmd.qufu, + "开服": self. jx3cmd.kaifu, + "状态": self. jx3cmd.zhuangtai, + "技改": self. jx3cmd.jigai, + "小药": self. jx3cmd.xiaoyao, + "阵眼": self. jx3cmd.zhenyan, + "奇穴": self. jx3cmd.qixue, + "技能": self. jx3cmd.jineng, + "资历排行": self. jx3cmd.zilipaixing, + "全服资历排行": self. jx3cmd.zilipaihang, + + "骚话": self. jx3cmd.shaohua, + "资历": self. jx3cmd.zili, + "解密": self. jx3cmd.jiemi, + "沙盘": self. jx3cmd.shapan, + "攻略": self. jx3cmd.qiyugonglue, + "宏": self. jx3cmd.hong, + "配装": self. jx3cmd.peizhuang, + "百战": self. jx3cmd.baizhan, + "扶摇": self. jx3cmd.fuyaojjiutian, + "诛恶": self. jx3cmd.zhueevent, + + "拍卖": self. jx3cmd.zhengyingpaimai, + + "帮战记录": self. jx3cmd.bangzhanjilu, + "统战": self. jx3cmd.tongzhanyy, + "的卢": self. jx3cmd.dilujilu, + + "骗子": self. jx3cmd.pianzhi, + "奇遇": self. jx3cmd.juesheqiyu, + "未做奇遇": self. jx3cmd.weizuoqiyu, + "奇遇统计": self. jx3cmd.qiyutongji, + "近期奇遇": self. jx3cmd.jinqiqiyu, + "奇遇汇总": self. jx3cmd.qiyuhuizong, + + "招募": self. jx3cmd.tuanduizhaomu, + "拜师": self. jx3cmd.baishi, + "收徒": self. jx3cmd.shoutu, + "角色": self. jx3cmd.jueshe, "名片": self. jx3cmd.jueshemingpian, "精耐": self. jx3cmd.jingnai, "所有名片": self. jx3cmd.shuoyoumingpian, "随机名片": self. jx3cmd.shuijimingpian, - "刷马": self. jx3cmd.shuma, + "金价": self. jx3cmd.jinjia, "物价": self. jx3cmd.wujia, "八卦": self. jx3cmd.bagua, diff --git a/templates/mingjiantongji.html b/templates/mingjiantongji.html index d976cd8..b01e1d1 100644 --- a/templates/mingjiantongji.html +++ b/templates/mingjiantongji.html @@ -95,8 +95,8 @@ 门派 - 当前赛季数量 - 上赛季数量 + 本周数量 + 上周数量 @@ -105,14 +105,14 @@
- {% if icons.sect.get(m.name) %} - {{ m.name }} + {% if icons.sect.get(m.forceName) %} + {{ m.forceName }} {% endif %} - {{ m.name }} + {{ m.forceName }}
- {{ m.this }} - {{ m.last }} + {{ m.thisWeek }} + {{ m.lastWeek }} {% endfor %} diff --git a/templates/rank_role.html b/templates/rank_role.html index b3d67c3..7ec587f 100644 --- a/templates/rank_role.html +++ b/templates/rank_role.html @@ -137,17 +137,17 @@ {{ loop.index }}
- {% if icons.sect.get(item.force_name) %} - {{ item.force_name }} + {% if icons.sect.get(item.forceName) %} + {{ item.forceName }} {% endif %} - {{ item.force_name }} + {{ item.forceName }}
- {{ item.role_name }} - {{ item.role_level }} - {{ item.camp_name }} - {{ item.tong_name }} - {{ item.total_score }} + {{ item.name }} + {{ item.level }} + {{ item.campName }} + {{ item.tongName }} + {{ item.totalScore }} {% endfor %} diff --git a/templates/rank_tong.html b/templates/rank_tong0.html similarity index 88% rename from templates/rank_tong.html rename to templates/rank_tong0.html index 177b998..8605dda 100644 --- a/templates/rank_tong.html +++ b/templates/rank_tong0.html @@ -126,11 +126,11 @@ {% for item in items %} {{ loop.index }} - {{ item.tong_name }} - {{ item.master_name }} - {{ item.castle_name }} - {{ item.now_count }}/{{ item.max_count }} - {{ item.total_score }} + {{ item.tongName }} + {{ item.masterName }} + {{ item.castleName }} + {{ item.memberCount }}/{{ item.maxMemberCount }} + {{ item.titlePoint }} {% endfor %} diff --git a/templates/rank_tong1.html b/templates/rank_tong1.html new file mode 100644 index 0000000..b2e23c4 --- /dev/null +++ b/templates/rank_tong1.html @@ -0,0 +1,139 @@ + + + + +帮会榜单 + + + + + +
+

{{ rank_name }}

+
{{ server }} · 更新时间:{{ update_time }}
+ + + + + + + + + + + + + + {% for item in items %} + + + + + + + + {% endfor %} + +
排名帮会名称帮主人数排行积分
{{ loop.index }}{{ item.tongName }}{{ item.masterName }}{{ item.maxLimit }}{{ item.totalScore }}
+
+ + + diff --git a/templates/rank_tong2.html b/templates/rank_tong2.html new file mode 100644 index 0000000..efd4c63 --- /dev/null +++ b/templates/rank_tong2.html @@ -0,0 +1,137 @@ + + + + +帮会榜单 + + + + + +
+

{{ rank_name }}

+
{{ server }} · 更新时间:{{ update_time }}
+ + + + + + + + + + + + + {% for item in items %} + + + + + + + {% endfor %} + +
排名帮会名称帮主排行积分
{{ loop.index }}{{ item.tongName }}{{ item.masterName }}{{ item.key }}
+
+ + + diff --git a/templates/yanhuan.html b/templates/yanhuan.html index ddeda54..33ccb3d 100644 --- a/templates/yanhuan.html +++ b/templates/yanhuan.html @@ -83,10 +83,10 @@ {% for m in list %} {{ m.server }} - {{ m.name }} - {{ m.map_name }} + {{ m.firework }} + {{ m.mapName }} {{ m.sender }} - {{ m.receive }} + {{ m.receiver }} {{ m.time }} {% endfor %} diff --git a/templates/zhanji.html b/templates/zhanji.html index 95f70bf..8426d05 100644 --- a/templates/zhanji.html +++ b/templates/zhanji.html @@ -275,24 +275,17 @@ tbody tr:nth-child(odd) { diff --git a/templates/zhenyingevent.html b/templates/zhenyingevent.html index 0ed27c7..63fc518 100644 --- a/templates/zhenyingevent.html +++ b/templates/zhenyingevent.html @@ -136,11 +136,11 @@ class="camp-haoqi" {% endif %} > - {{ item.camp_name }} - {{ item.fenxian_name }} - {{ item.friend_name }} - {{ item.role_name }} - {{ item.seize_time }} + {{ item.campName }} + {{ item.fenxianName }} + {{ item.friendName }} + {{ item.roleName }} + {{ item.seizeTime }} {% endfor %}