This commit is contained in:
2026-04-24 19:35:40 +08:00
parent a9edf2ee32
commit bac9fb8440
7 changed files with 205 additions and 16 deletions
+4 -1
View File
@@ -1,10 +1,13 @@
## 更新记录 ## 更新记录
### version: 2.1
接口地址调整
### version: 2.0 ### version: 2.0
接口地址调整 接口地址调整
### version: 1.2.4 ### version: 1.2.4
角色信息查询数据展示优化 角色信息查询数据展示优化
+26
View File
@@ -754,13 +754,39 @@ class JX3Service:
async def baizhan(self) -> Dict[str, Any]:
"""百战首领"""
return_data = self._init_return_data()
# 1. 构造请求参数
params = { "token": self.token}
data: Optional[Dict[str, Any]] = await self._base_request("jx3_baizhan", "GET", params=params)
if not data:
return_data["msg"] = "获取接口信息失败"
return return_data
# 处理返回数据
try:
return_data["data"] = data
return_data["data"]["start"] = datetime.fromtimestamp(float(data["start"])).strftime("%Y-%m-%d %H:%M:%S")
return_data["data"]["end"] = datetime.fromtimestamp(float(data["end"])).strftime("%Y-%m-%d %H:%M:%S")
except Exception as e:
logger.error(f"数据处理时出错: {e}")
return_data["msg"] = "处理接口返回信息时出错"
# 加载模板
try:
return_data["temp"] = await load_template("baizhan.html")
except FileNotFoundError as e:
logger.error(f"加载模板失败: {e}")
return_data["msg"] = "系统错误:模板文件不存在"
return return_data
return_data["code"] = 200
return return_data
async def shuamamsg(self,server:str,type:str,subtype:str) -> Dict[str, Any]: async def shuamamsg(self,server:str,type:str,subtype:str) -> Dict[str, Any]:
+5
View File
@@ -272,6 +272,11 @@ class MessageBuilder:
return await self.image_msg(event, lambda: self.jx3api.shapan(self.serverdefault(server))) return await self.image_msg(event, lambda: self.jx3api.shapan(self.serverdefault(server)))
async def jx3_baizhan(self, event: AstrMessageEvent):
"""剑三 百战"""
return await self.T2I_image_msg(event, self.jx3api.baizhan)
async def jx3_qufuqiyu(self, event: AstrMessageEvent,adventureName: str = "阴阳两界", server: str = ""): async def jx3_qufuqiyu(self, event: AstrMessageEvent,adventureName: str = "阴阳两界", server: str = ""):
"""剑三 奇遇统计 奇遇名称 服务器""" """剑三 奇遇统计 奇遇名称 服务器"""
return await self.T2I_image_msg(event, lambda: self.jx3api.qiyu(adventureName,self.serverdefault(server))) return await self.T2I_image_msg(event, lambda: self.jx3api.qiyu(adventureName,self.serverdefault(server)))
+12 -4
View File
@@ -106,6 +106,14 @@
"params":{ "params":{
} }
}, },
"jx3_shaohua":{
"url":"https://www.jx3api.com/data/saohua/random",
"method":"GET",
"description":"获取剑网三骚话",
"params":{
"name": "万花"
}
},
"aijx3_shapan":{ "aijx3_shapan":{
"url":"https://www.jianxiachaguan.cn/api2/aijx3-jxcg/game/get-sand-table-img", "url":"https://www.jianxiachaguan.cn/api2/aijx3-jxcg/game/get-sand-table-img",
"method":"POST", "method":"POST",
@@ -114,12 +122,12 @@
"serverName": "眉间雪" "serverName": "眉间雪"
} }
}, },
"jx3_shaohua":{ "jx3_baizhan":{
"url":"https://www.jx3api.com/data/saohua/random", "url":"https://www.jx3api.com/data/active/monster",
"method":"GET", "method":"GET",
"description":"获取剑网三骚话", "description":"获取本周百战异闻录玩法中刷新的首领列表及其特殊技能效果",
"params":{ "params":{
"name": "万花" "token":""
} }
}, },
"aijx3_qiyu":{ "aijx3_qiyu":{
+2 -1
View File
@@ -16,7 +16,7 @@ from .core.fun_basic import load_as_base64
@register("astrbot_plugin_jx3", @register("astrbot_plugin_jx3",
"fxdyz", "fxdyz",
"通过调用剑网三API接口获取游戏数据,处理发送。", "通过调用剑网三API接口获取游戏数据,处理发送。",
"2.0", "2.1",
"https://github.com/qsc20001102/astrbot_plugin_jx3api" "https://github.com/qsc20001102/astrbot_plugin_jx3api"
) )
class Jx3ApiPlugin(Star): class Jx3ApiPlugin(Star):
@@ -205,6 +205,7 @@ class Jx3ApiPlugin(Star):
"攻略": self.jx3cmd.jx3_qiyugonglue, "攻略": self.jx3cmd.jx3_qiyugonglue,
"": self.jx3cmd.jx3_hong, "": self.jx3cmd.jx3_hong,
"配装": self.jx3cmd.jx3_peizhuang, "配装": self.jx3cmd.jx3_peizhuang,
"百战": self.jx3cmd.jx3_baizhan,
"金价": self.jx3cmd.jx3_jinjia, "金价": self.jx3cmd.jx3_jinjia,
"物价": self.jx3cmd.jx3_wujia, "物价": self.jx3cmd.jx3_wujia,
"交易行": self.jx3cmd.jx3_jiaoyihang, "交易行": self.jx3cmd.jx3_jiaoyihang,
+1 -1
View File
@@ -1,6 +1,6 @@
name: astrbot_plugin_jx3 name: astrbot_plugin_jx3
display_name: 剑网三游戏数据查询工具 display_name: 剑网三游戏数据查询工具
desc: 通过接口调用剑网三API接口获取游戏数据,处理发送。 desc: 通过接口调用剑网三API接口获取游戏数据,处理发送。
version: v2.0 version: v2.1
author: 飞翔大野猪 author: 飞翔大野猪
repo: https://github.com/qsc20001102/astrbot_plugin_jx3 repo: https://github.com/qsc20001102/astrbot_plugin_jx3
+146
View File
@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>百战异闻录</title>
<style>
body {
font-family: 'Microsoft YaHei', Arial, sans-serif;
background: #f5f6fa;
margin: 0;
padding: 20px;
}
.container {
max-width: 1200px;
margin: 0 auto;
text-align: center;
}
h1 {
margin-bottom: 20px;
font-size: 32px;
font-weight: 800;
}
/* ===== 顶部信息 ===== */
.info-bar {
display: flex;
justify-content: space-between;
align-items: center;
background: white;
padding: 16px 20px;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0,0,0,0.08);
margin-bottom: 20px;
}
.time {
font-size: 18px;
font-weight: 600;
color: #333;
}
.boss-final {
font-size: 22px;
font-weight: 800;
color: #d63031;
}
/* ===== 网格 ===== */
.grid {
display: grid;
grid-template-columns: repeat(10, 1fr);
gap: 10px;
}
.cell {
background: white;
border-radius: 10px;
padding: 12px;
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
min-height: 110px;
/* 核心:全部居中 */
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
}
.index {
font-weight: bold;
font-size: 18px;
color: #333;
margin-bottom: 4px;
}
.boss {
color: #d63031;
font-weight: 700;
font-size: 16px;
margin-bottom: 6px;
}
.buff {
color: #0984e3;
font-size: 14px;
line-height: 1.5em;
word-break: break-word;
}
</style>
</head>
<body>
<div class="container">
<h1>百战异闻录</h1>
<!-- 顶部信息(同一行) -->
<div class="info-bar">
<div class="time">
开始时间:{{ start }} &nbsp;&nbsp;|&nbsp;&nbsp;
结束时间:{{ end }}
</div>
<div class="boss-final">
最终Boss{{ boss }}
</div>
</div>
<div class="grid">
{% for row in range(0, list|length, 10) %}
{% set slice = list[row:row+10] %}
{% if (row // 10) % 2 == 1 %}
{% set slice = slice[::-1] %}
{% endif %}
{% for item in slice %}
<div class="cell">
<div class="index">第{{ item.index }}层</div>
<div class="boss">{{ item.name }}</div>
{% if item.data.list %}
<div class="buff">
{% for b in item.data.list %}
{{ b }}{% if not loop.last %} / {% endif %}
{% endfor %}
</div>
{% else %}
<div class="buff"></div>
{% endif %}
</div>
{% endfor %}
{% endfor %}
</div>
</div>
</body>
</html>