功能补充

This commit is contained in:
qsc
2026-01-25 22:49:20 +08:00
parent 4b91ac2eac
commit 9b4779aeae
7 changed files with 252 additions and 4 deletions
+4 -4
View File
@@ -16,10 +16,10 @@
插件功能绝大部分都是用AI写的,又进行了调试。
目前此插件能够完成绝大部分的功能查询,其他功能有空再说。
目前此插件能够完成部分的功能查询,其他功能有空再说。
此插件的所有数据几乎全部依赖jx3api提供的API接口,所以进阶功能需要向其购买token才可使用。
部分进阶功能除了购买token以外还需要自己去抓包推栏app,获得推栏token才可使用。
此插件的所有数据几乎全部依赖jx3api提供的API接口,所以进阶功能需要向其购买token才可使用。普通功能是免token的。
部分进阶功能除了购买token以外还需要自己去抓包推栏app,获得推栏app的token才可正常使用。
## 更新记录
@@ -35,7 +35,7 @@ version: 1.0.0:大部分重要功能已经实现
要想正常使用插件,需要正常配置token和推栏标识。
下面两个推送功能可以手动开启或者关闭,配置询问的周期时间,以及消息要推送的对象,推送ID可在聊天中使用/std查看。
下面两个推送功能可以手动开启或者关闭,配置询问的周期时间,以及消息要推送的对象,推送ID可在聊天中使用/std查看。要平台的完整ID。
## 使用方式
+15
View File
@@ -194,6 +194,21 @@ class JX3Commands(Star):
yield event.plain_result("猪脑过载,请稍后再试")
async def jx3_qiwu(self, event: AstrMessageEvent, name: str):
"""剑三 器物 地图名称"""
try:
data= await self.jx3fun.qiwu(name)
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("猪脑过载,请稍后再试")
async def jx3_shapan(self, event: AstrMessageEvent,server: str = ""):
"""剑三 沙盘 服务器"""
try:
+34
View File
@@ -352,6 +352,40 @@ class JX3Service:
return return_data
async def qiwu(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_qiwu", "GET", params=params
)
if not data:
return_data["msg"] = "未查询到相关内容"
return return_data
# 3. 处理返回数据
try:
return_data["data"]["data"] = data
return_data["data"]["name"] = name
return_data["code"] = 200
except Exception as e:
logger.error(f"数据处理时出错: {e}")
return_data["msg"] = "处理接口返回信息时出错"
# 加载模板
try:
return_data["temp"] = await load_template("qiwu.html")
except FileNotFoundError as e:
logger.error(f"加载模板失败: {e}")
return_data["msg"] = "系统错误:模板文件不存在"
return return_data
async def shapan(self, server: str ) -> Dict[str, Any]:
"""区服沙盘"""
return_data = self._init_return_data()
+8
View File
@@ -267,6 +267,14 @@
"name": ""
}
},
"jx3_qiwu":{
"url":"https://www.jx3api.com/data/home/travel",
"method":"GET",
"description":"此接口用于查询指定地图的装饰物品产出信息,包括装饰的属性、来源和外观等内容。",
"params":{
"name": ""
}
},
"jx3box_qiyugonglue":{
"url":"https://node.jx3box.com/serendipities",
"method":"GET",
+1
View File
@@ -234,6 +234,7 @@ class Jx3ApiPlugin(Star):
"科举": self.jx3com.jx3_keju,
"花价": self.jx3com.jx3_huajia,
"装饰": self.jx3com.jx3_zhuangshi,
"器物": self.jx3com.jx3_qiwu,
"沙盘": self.jx3com.jx3_shapan,
"奇遇统计": self.jx3com.jx3_qufuqiyu,
"奇遇攻略": self.jx3com.jx3_qiyugonglue,
+12
View File
@@ -216,6 +216,18 @@
<div class="cmd-desc">查询各个地图的鲜花倍率</div>
<div class="cmd-usage">花价 名称 [服务器] [家园地图]</div>
</div>
<div class="command">
<div class="cmd-name">装饰</div>
<div class="cmd-desc">查询家园装饰的详细信息</div>
<div class="cmd-usage">装饰 名称 </div>
</div>
<div class="command">
<div class="cmd-name">器物</div>
<div class="cmd-desc">查询某地图可以获得的家园装饰物品信息</div>
<div class="cmd-usage">器物 地图名称 </div>
</div>
</div>
</div>
+178
View File
@@ -0,0 +1,178 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>地图装饰器物</title>
<style>
body {
font-family: 'Microsoft YaHei', Arial, sans-serif;
background: #f1f2f6;
margin: 0;
padding: 20px;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
h1 {
text-align: center;
font-size: 32px;
font-weight: 800;
margin-bottom: 28px;
color: #222;
}
.item {
display: flex;
background: #fff;
border-radius: 14px;
box-shadow: 0 6px 18px rgba(0,0,0,0.08);
margin-bottom: 22px;
overflow: hidden;
}
.item img {
width: 200px;
height: 200px;
object-fit: contain;
background: #fafafa;
padding: 14px;
}
.info {
flex: 1;
padding: 18px 22px;
}
.name {
font-size: 26px;
font-weight: 800;
margin-bottom: 6px;
}
/* 品质颜色 */
.q1 { color: #999; }
.q2 { color: #2ecc71; }
.q3 { color: #3498db; }
.q4 { color: #9b59b6; }
.q5 { color: #e67e22; }
.meta {
font-size: 15px;
color: #555;
margin-bottom: 12px;
}
.meta span {
margin-right: 16px;
}
.tip {
background: #f8f9fb;
border-left: 4px solid #d93939;
padding: 8px 12px;
font-size: 14px;
color: #555;
margin-bottom: 14px;
}
.attrs {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 10px;
}
.attr {
background: #fafafa;
border-radius: 10px;
padding: 10px;
text-align: center;
}
.attr-name {
font-size: 13px;
color: #777;
margin-bottom: 4px;
}
.attr-value {
font-size: 17px;
font-weight: 700;
color: #333;
}
.footer {
margin-top: 10px;
font-size: 14px;
color: #777;
}
</style>
</head>
<body>
<div class="container">
<h1>地图装饰器物({{ name }})</h1>
{% for item in data %}
<div class="item">
<img src="{{ item.image }}" alt="{{ item.name }}">
<div class="info">
<div class="name q{{ item.color }}">
{{ item.name }}
</div>
<div class="meta">
<span>来源:{{ item.source }}</span>
<span>数量限制:{{ item.limit }}</span>
<span>品质值:{{ item.quality }}</span>
</div>
{% if item.tip %}
<div class="tip">
{{ item.tip }}
</div>
{% endif %}
<div class="attrs">
<div class="attr">
<div class="attr-name">观赏</div>
<div class="attr-value">{{ item.view }}</div>
</div>
<div class="attr">
<div class="attr-name">实用</div>
<div class="attr-value">{{ item.practical }}</div>
</div>
<div class="attr">
<div class="attr-name">坚固</div>
<div class="attr-value">{{ item.hard }}</div>
</div>
<div class="attr">
<div class="attr-name">风水</div>
<div class="attr-value">{{ item.geomantic }}</div>
</div>
<div class="attr">
<div class="attr-name">趣味</div>
<div class="attr-value">{{ item.interesting }}</div>
</div>
</div>
<div class="footer">
建筑适配:{{ item.architecture }} 
{% if item.produce %}
|制作门派:{{ item.produce }}
{% else %}
|不可制作
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
</body>
</html>