功能增加

This commit is contained in:
qsc
2026-01-25 22:21:38 +08:00
parent d8f0c63fab
commit 4b91ac2eac
8 changed files with 529 additions and 36 deletions
+44
View File
@@ -150,6 +150,50 @@ class JX3Commands(Star):
yield event.plain_result("猪脑过载,请稍后再试")
async def jx3_keju(self, event: AstrMessageEvent,subject: str, limit: int = 5):
"""剑三 科举"""
try:
data= await self.jx3fun.keju(subject,limit)
if data["code"] == 200:
yield event.plain_result(data["data"])
else:
yield event.plain_result(data["msg"])
return
except Exception as e:
logger.error(f"功能函数执行错误: {e}")
yield event.plain_result("猪脑过载,请稍后再试")
async def jx3_huajia(self, event: AstrMessageEvent, name: str= "", server: str = "", map: str= ""):
"""剑三 花价 名称 服务器 地图"""
try:
data= await self.jx3fun.huajia(self.serverdefault(server),name,map)
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_zhuangshi(self, event: AstrMessageEvent, name: str):
"""剑三 装饰 名称"""
try:
data= await self.jx3fun.zhuangshi(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:
+101 -1
View File
@@ -154,7 +154,7 @@ class JX3Service:
return_data["data"] = result_msg + luck_msg + card_msg + team_msg
return_data["code"] = 200
except Exception as e:
logger.error(f"richang 数据处理时出错: {e}")
logger.error(f"数据处理时出错: {e}")
return_data["msg"] = "处理接口返回信息时出错"
return return_data
@@ -235,6 +235,7 @@ class JX3Service:
# 3. 处理返回数据
try:
return_data["data"]["items"] = data
return_data["data"]["name"] = name
except Exception as e:
logger.error(f"richang 数据处理时出错: {e}")
return_data["msg"] = "处理接口返回信息时出错"
@@ -252,6 +253,105 @@ class JX3Service:
return return_data
async def keju(self,subject: str, limit: int) -> Dict[str, Any]:
"""科举"""
return_data = self._init_return_data()
# 1. 构造请求参数
params = {"subject": subject, "limit": limit}
# 2. 调用基础请求
data: Optional[Dict[str, Any]] = await self._base_request(
"jx3_keju", "GET", params=params
)
if not data:
return_data["msg"] = "未查询到相关题目"
return return_data
# 3. 处理返回数据
try:
# 格式化字符串,利用字典的 get 方法提供默认值
result_msg = ""
for m in data:
result_msg += f"{m['id']}.{m['question']}\n"
result_msg += f"答案:{m['answer']}\n\n"
return_data["data"] = result_msg
return_data["code"] = 200
except Exception as e:
logger.error(f"数据处理时出错: {e}")
return_data["msg"] = "处理接口返回信息时出错"
return return_data
async def huajia(self,server: str, name: str, map: str) -> Dict[str, Any]:
"""花价"""
return_data = self._init_return_data()
# 1. 构造请求参数
params = {"server": server, "name": name, "map": map}
# 2. 调用基础请求
data: Optional[Dict[str, Any]] = await self._base_request(
"jx3_huajia", "GET", params=params
)
if not data:
return_data["msg"] = "未查询到相关内容"
return return_data
# 3. 处理返回数据
try:
return_data["data"]["data"] = data
return_data["data"]["server"] = server
return_data["code"] = 200
except Exception as e:
logger.error(f"数据处理时出错: {e}")
return_data["msg"] = "处理接口返回信息时出错"
# 加载模板
try:
return_data["temp"] = await load_template("huajia.html")
except FileNotFoundError as e:
logger.error(f"加载模板失败: {e}")
return_data["msg"] = "系统错误:模板文件不存在"
return return_data
async def zhuangshi(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_zhuangshi", "GET", params=params
)
if not data:
return_data["msg"] = "未查询到相关内容"
return return_data
# 3. 处理返回数据
try:
return_data["data"]["data"] = data
return_data["code"] = 200
except Exception as e:
logger.error(f"数据处理时出错: {e}")
return_data["msg"] = "处理接口返回信息时出错"
# 加载模板
try:
return_data["temp"] = await load_template("zhuangshi.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()
+27
View File
@@ -240,6 +240,33 @@
"token": ""
}
},
"jx3_keju":{
"url":"https://www.jx3api.com/data/exam/answer",
"method":"GET",
"description":"此接口用于科举考试时的答案查询,支持模糊查询和拼音首字母查询。",
"params":{
"subject": "",
"limit": "5"
}
},
"jx3_huajia":{
"url":"https://www.jx3api.com/data/home/flower",
"method":"GET",
"description":"此接口用于查询家园系统中特定鲜花的最高价格及其对应的采集线路,包括区服和地图信息。",
"params":{
"server": "",
"name": "",
"map": ""
}
},
"jx3_zhuangshi":{
"url":"https://www.jx3api.com/data/home/furniture",
"method":"GET",
"description":"此接口用于查询家园系统中特定装饰的详细信息,包括来源、属性和外观等内容。",
"params":{
"name": ""
}
},
"jx3box_qiyugonglue":{
"url":"https://node.jx3box.com/serendipities",
"method":"GET",
+4 -1
View File
@@ -228,9 +228,12 @@ class Jx3ApiPlugin(Star):
"日常预测": self.jx3com.jx3_richangyuche,
"名望": self.jx3com.jx3_xingxiashijian,
"开服": self.jx3com.jx3_kaifu,
"状态": self.jx3com.jx3_zhuangtai,
"全服状态": self.jx3com.jx3_zhuangtai,
"骚话": self.jx3com.jx3_shaohua,
"技改": self.jx3com.jx3_jigai,
"科举": self.jx3com.jx3_keju,
"花价": self.jx3com.jx3_huajia,
"装饰": self.jx3com.jx3_zhuangshi,
"沙盘": self.jx3com.jx3_shapan,
"奇遇统计": self.jx3com.jx3_qufuqiyu,
"奇遇攻略": self.jx3com.jx3_qiyugonglue,
+45 -33
View File
@@ -148,61 +148,73 @@
<div class="command">
<div class="cmd-name">日常活动</div>
<div class="cmd-desc">查询指定服务器某天的日常任务</div>
<div class="cmd-usage">剑三 日常 [服务器] [天数]</div>
<div class="cmd-usage">日常 [服务器] [天数]</div>
</div>
<div class="command">
<div class="cmd-name">日常预测</div>
<div class="cmd-desc">查询30天范围内的大战和战场</div>
<div class="cmd-usage">剑三 日常预测</div>
<div class="cmd-usage">日常预测</div>
</div>
<div class="command">
<div class="cmd-name">名望事件</div>
<div class="cmd-desc">查询接下来10次对应名望的行侠事件</div>
<div class="cmd-usage">剑三 名望 [穹野卫]</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 class="cmd-usage">开服 [服务器]</div>
</div>
<div class="command">
<div class="cmd-name">服状态</div>
<div class="cmd-name">服状态</div>
<div class="cmd-desc">查询所有服务器当前的状态</div>
<div class="cmd-usage">剑三 状态 [服务器]</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 class="cmd-usage">骚话</div>
</div>
<div class="command">
<div class="cmd-name">最新技改</div>
<div class="cmd-desc">查看最新职业技能改动</div>
<div class="cmd-usage">剑三 技改</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 class="cmd-usage">沙盘 [服务器]</div>
</div>
<div class="command">
<div class="cmd-name">奇遇统计</div>
<div class="cmd-desc">查询服务器某个奇遇的触发情况</div>
<div class="cmd-usage">剑三 奇遇统计 奇遇名称 [服务器]</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 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>
@@ -213,90 +225,90 @@
<div class="command">
<div class="cmd-name">金价查询</div>
<div class="cmd-desc">查询指定服务器金价走势</div>
<div class="cmd-usage">剑三 金价 [服务器]</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 class="cmd-usage">物价 外观名称 [服务器]</div>
</div>
<div class="command">
<div class="cmd-name">区服交易行</div>
<div class="cmd-desc">查询交易行物品信息</div>
<div class="cmd-usage">剑三 交易行 物品名称 [服务器]</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 class="cmd-usage">名片 角色名 [服务器]</div>
</div>
<div class="command">
<div class="cmd-name">随机名片</div>
<div class="cmd-desc">随机获取指定职业与体型的名片</div>
<div class="cmd-usage">剑三 随机名片 职业 体型 [服务器]</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 class="cmd-usage">烟花 角色名 [服务器]</div>
</div>
<div class="command">
<div class="cmd-name">的卢记录</div>
<div class="cmd-desc">查询的服务器的卢刷新捕获拍卖情况</div>
<div class="cmd-usage">剑三 的卢 [服务器]</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 class="cmd-usage">招募 副本名称 [服务器]</div>
</div>
<div class="command">
<div class="cmd-name">角色战绩</div>
<div class="cmd-desc">查询角色 PVP 战绩仅33</div>
<div class="cmd-usage">剑三 战绩 角色名 [服务器]</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 class="cmd-usage">奇遇 角色名 [服务器]</div>
</div>
<div class="command">
<div class="cmd-name">阵营拍卖</div>
<div class="cmd-desc">查询阵营拍卖中某物品的所有信息</div>
<div class="cmd-usage">剑三 阵营拍卖 物品名称 [服务器]</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 class="cmd-usage">扶摇九天 [服务器]</div>
</div>
<div class="command">
<div class="cmd-name">刷马</div>
<div class="cmd-desc">查询服务器马儿的刷新时间</div>
<div class="cmd-usage">剑三 刷马 [服务器]</div>
<div class="cmd-usage">刷马 [服务器]</div>
</div>
<div class="command">
<div class="cmd-name">骗子查询</div>
<div class="cmd-desc">通过用户的 QQ 号搜索其在贴吧上的行骗记录</div>
<div class="cmd-usage">剑三 骗子 QQ号</div>
<div class="cmd-usage">骗子 QQ号</div>
</div>
<div class="command">
<div class="cmd-name">八卦记录</div>
<div class="cmd-desc">随机搜索指定分类的贴吧帖子。类型:818 616 鬼网三 鬼网3 树洞 记录 教程 街拍 故事 避雷 吐槽 提问</div>
<div class="cmd-usage">剑三 八卦 类型</div>
<div class="cmd-usage">八卦 类型</div>
</div>
</div>
</div>
@@ -307,31 +319,31 @@
<div class="command">
<div class="cmd-name">开服监控</div>
<div class="cmd-desc">查看开服监控状态的后台运行状况</div>
<div class="cmd-usage">剑三 开服监控</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 class="cmd-usage">新闻推送</div>
</div>
<div class="command">
<div class="cmd-name">刷马推送</div>
<div class="cmd-desc">推送最新的刷马消息</div>
<div class="cmd-usage">剑三 刷马推送</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 class="cmd-usage">赤兔推送</div>
</div>
</div>
</div>
<div class="tip">
<strong>使用提示:</strong><br>
1. 所有指令均需以 <strong>“剑三”</strong> 作为前缀,前面还需添加唤醒词<br>
2. 中括号参数为可选或推荐填写内容<br>
3. 不填写服务器时将使用配置默认服务器
1. 中括号参数为可选或推荐填写内容<br>
2. 不填写服务器时将使用配置默认服务器
3. 基础指令不需要token可以直接使用
</div>
</body>
+129
View File
@@ -0,0 +1,129 @@
<!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: 1400px;
margin: 0 auto;
}
h1 {
font-size: 32px;
margin-bottom: 30px;
color: #222;
font-weight: 800;
text-align: center;
}
h2 {
margin-top: 40px;
margin-bottom: 12px;
color: #d93939;
font-size: 26px;
font-weight: 700;
}
table {
width: 100%;
border-collapse: collapse;
background: white;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 4px 16px rgba(0,0,0,0.08);
margin-bottom: 20px;
}
thead {
background: #d93939;
color: white;
font-size: 16px;
}
th, td {
padding: 12px 14px;
border-bottom: 1px solid #eee;
font-size: 15px;
text-align: left;
}
tbody tr:hover {
background: #fff2f2;
}
.lines {
color: #555;
font-weight: 600;
}
.price {
color: #1e6bd6;
font-weight: 700;
}
.empty {
color: #999;
font-style: italic;
}
</style>
</head>
<body>
<div class="container">
<h1>花价查询({{ server }}</h1>
{% for map_name in [
'九寨沟·镜海',
'枫叶泊·乐苑',
'浣花水榭',
'枫叶泊·天苑',
'广陵邑'
] %}
{% if data.get(map_name) %}
<h2>{{ map_name }}</h2>
<table>
<thead>
<tr>
<th>名称</th>
<th>颜色</th>
<th>倍率</th>
<th>分线</th>
</tr>
</thead>
<tbody>
{% for item in data[map_name] %}
<tr>
<td>{{ item.name }}</td>
<td>
{% if item.color %}
{{ item.color }}
{% else %}
<span class="empty"></span>
{% endif %}
</td>
<td class="price">{{ item.price }}</td>
<td class="lines">
{{ item.line | join('、') }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{% endfor %}
</div>
</body>
</html>
+1 -1
View File
@@ -95,7 +95,7 @@ h1 {
<body>
<div class="container">
<h1>名望事件</h1>
<h1>名望事件({{ name }})</h1>
<div class="list">
{% for m in items %}
+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: 34px;
font-weight: 800;
margin-bottom: 30px;
color: #222;
}
.card {
display: flex;
background: #fff;
border-radius: 16px;
box-shadow: 0 6px 20px rgba(0,0,0,0.08);
margin-bottom: 24px;
overflow: hidden;
}
.card img {
width: 220px;
height: 220px;
object-fit: contain;
background: #fafafa;
padding: 16px;
}
.content {
flex: 1;
padding: 20px 24px;
}
.title {
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 {
color: #666;
font-size: 15px;
margin-bottom: 14px;
}
.meta span {
margin-right: 18px;
}
.tip {
background: #f8f9fb;
border-left: 4px solid #d93939;
padding: 10px 14px;
font-size: 14px;
color: #555;
margin-bottom: 16px;
}
.stats {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 12px;
}
.stat {
background: #fafafa;
border-radius: 10px;
padding: 10px;
text-align: center;
}
.stat-name {
font-size: 13px;
color: #777;
margin-bottom: 6px;
}
.stat-value {
font-size: 18px;
font-weight: 700;
color: #333;
}
.footer {
margin-top: 12px;
font-size: 14px;
color: #888;
}
</style>
</head>
<body>
<div class="container">
<h1>家园家具展示</h1>
{% for item in data %}
<div class="card">
<img src="{{ item.image }}" alt="{{ item.name }}">
<div class="content">
<div class="title 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="stats">
<div class="stat">
<div class="stat-name">观赏</div>
<div class="stat-value">{{ item.view }}</div>
</div>
<div class="stat">
<div class="stat-name">实用</div>
<div class="stat-value">{{ item.practical }}</div>
</div>
<div class="stat">
<div class="stat-name">坚固</div>
<div class="stat-value">{{ item.hard }}</div>
</div>
<div class="stat">
<div class="stat-name">风水</div>
<div class="stat-value">{{ item.geomantic }}</div>
</div>
<div class="stat">
<div class="stat-name">趣味</div>
<div class="stat-value">{{ item.interesting }}</div>
</div>
</div>
<div class="footer">
建筑适配:{{ item.architecture }} 
{% if item.produce %}
|可制作
{% else %}
|不可制作
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
</body>
</html>