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) %}
- 
+ {% if icons.sect.get(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) %}
- 
+ {% if icons.sect.get(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 %}
+
+ | {{ loop.index }} |
+ {{ item.tongName }} |
+ {{ item.masterName }} |
+ {{ item.maxLimit }} |
+ {{ item.totalScore }} |
+
+ {% endfor %}
+
+
+
+
+
+
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 %}
+
+ | {{ loop.index }} |
+ {{ item.tongName }} |
+ {{ item.masterName }} |
+ {{ item.key }} |
+
+ {% endfor %}
+
+
+
+
+
+
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) {