This commit is contained in:
qsc
2025-12-25 22:39:11 +08:00
parent 694eb90e5b
commit 7e5d351e00
4 changed files with 182 additions and 3 deletions
+40
View File
@@ -235,6 +235,46 @@ class JX3Service:
return_data["msg"] = "接口未返回文本" return_data["msg"] = "接口未返回文本"
return return_data return return_data
async def zhuangtai(self) -> Dict[str, Any]:
"""区服状态"""
return_data = self._init_return_data()
data: Optional[Dict[str, Any]] = await self._base_request("jx3_zhuangtai", "GET")
if not data:
return_data["msg"] = "获取接口信息失败"
return return_data
server_wj = []
server_dx = []
server_sx = []
for itme in data:
if itme['zone'] == "无界区":
server_wj.append(itme)
elif itme['zone'] == "电信区":
server_dx.append(itme)
elif itme['zone'] == "双线区":
server_sx.append(itme)
return_data["data"]["server_wj"] = server_wj
return_data["data"]["server_dx"] = server_dx
return_data["data"]["server_sx"] = server_sx
# 加载模板
try:
return_data["temp"] = load_template("qufuzhuangtai.html")
except FileNotFoundError as e:
logger.error(f"加载模板失败: {e}")
return_data["msg"] = "系统错误:模板文件不存在"
return return_data
return_data["code"] = 200
return return_data
async def jigai(self) -> Dict[str, Any]: async def jigai(self) -> Dict[str, Any]:
+8
View File
@@ -195,5 +195,13 @@
"server": "梦江南", "server": "梦江南",
"token": "" "token": ""
} }
},
"jx3_zhuangtai":{
"url":"https://www.jx3api.com/data/server/status",
"method":"GET",
"description":"此接口用于查询指定服务器的当前状态,包括 维护、正常、繁忙 和 爆满 等状态信息。",
"params":{
"server": ""
}
} }
} }
+17 -3
View File
@@ -70,9 +70,6 @@ class Jx3ApiPlugin(Star):
await self.at.destroy() await self.at.destroy()
logger.error(f"功能示例初始化失败: {e}") logger.error(f"功能示例初始化失败: {e}")
return return
# 周期函数调用
# 初始化函数
logger.info("jx3api异步插件初始化完成") logger.info("jx3api异步插件初始化完成")
@@ -168,6 +165,23 @@ class Jx3ApiPlugin(Star):
yield event.plain_result("猪脑过载,请稍后再试") yield event.plain_result("猪脑过载,请稍后再试")
@jx3.command("状态")
async def jx3_zhuangtai(self, event: AstrMessageEvent,server: str = None):
"""剑三 开服 服务器"""
try:
data= await self.jx3fun.zhuangtai()
logger.info(data)
if data["code"] == 200:
url = await self.html_render(data["temp"], data["data"], options={})
yield event.image_result(url)
else:
yield event.plain_result(data["msg"])
return
except Exception as e:
logger.error(f"功能函数执行错误: {e}")
yield event.plain_result("猪脑过载,请稍后再试")
@jx3.command("沙盘") @jx3.command("沙盘")
async def jx3_shapan(self, event: AstrMessageEvent,server: str = None): async def jx3_shapan(self, event: AstrMessageEvent,server: str = None):
"""剑三 沙盘 服务器""" """剑三 沙盘 服务器"""
+117
View File
@@ -0,0 +1,117 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>区服状态面板</title>
<style>
body {
margin: 0;
padding: 24px;
background: #f5f7fb;
color: #2c2c33;
font-family: "Microsoft YaHei", Arial, sans-serif;
}
.section {
margin-bottom: 32px;
}
.section-title {
font-size: 32px;
font-weight: bold;
margin-bottom: 16px;
border-left: 4px solid #4f7cff;
padding-left: 10px;
color: #1f2a44;
}
.card-container {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
.card {
border-radius: 8px;
padding: 30px 12px;
text-align: center;
font-weight: 600;
font-size: 28px;
color: #ffffff;
}
/* 整块背景颜色控制 */
.爆满 {
background: #d9534f; /* 红 */
}
.拥挤 {
background: #f0ad4e; /* 橙 */
color: #3b2e00;
}
.正常, .顺畅 {
background: #4cae4c; /* 绿 */
}
.维护 {
background: #bfbfbf; /* 灰 */
color: #333333;
}
.empty {
color: #7a7f99;
font-size: 16px;
padding: 6px 0;
}
@media (max-width: 1000px) {
.card-container { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
.card-container { grid-template-columns: repeat(1, 1fr); }
}
</style>
</head>
<body>
<!-- 无界区 -->
<div class="section">
<div class="section-title">无界区({{ server_wj|length if server_wj else 0 }}</div>
{% if server_wj %}
<div class="card-container">
{% for item in server_wj %}
<div class="card {{ item.status }}">{{ item.server }}</div>
{% endfor %}
</div>
{% else %}
<div class="empty">暂无数据</div>
{% endif %}
</div>
<!-- 电信区 -->
<div class="section">
<div class="section-title">电信区({{ server_dx|length if server_dx else 0 }}</div>
{% if server_dx %}
<div class="card-container">
{% for item in server_dx %}
<div class="card {{ item.status }}">{{ item.server }}</div>
{% endfor %}
</div>
{% else %}
<div class="empty">暂无数据</div>
{% endif %}
</div>
<!-- 双线区 -->
<div class="section">
<div class="section-title">双线区({{ server_sx|length if server_sx else 0 }}</div>
{% if server_sx %}
<div class="card-container">
{% for item in server_sx %}
<div class="card {{ item.status }}">{{ item.server }}</div>
{% endfor %}
</div>
{% else %}
<div class="empty">暂无数据</div>
{% endif %}
</div>
</body>
</html>