功能补充
This commit is contained in:
@@ -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。
|
||||
|
||||
## 使用方式
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user