From 4b91ac2eac9583f8f602a62e98e3c848481f7731 Mon Sep 17 00:00:00 2001
From: qsc
Date: Sun, 25 Jan 2026 22:21:38 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=A2=9E=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
core/jx3_commands.py | 44 +++++++++
core/jx3_data.py | 102 ++++++++++++++++++-
data/api_config.json | 27 ++++++
main.py | 5 +-
templates/helps.html | 78 ++++++++-------
templates/huajia.html | 129 ++++++++++++++++++++++++
templates/xingxiashijian.html | 2 +-
templates/zhuangshi.html | 178 ++++++++++++++++++++++++++++++++++
8 files changed, 529 insertions(+), 36 deletions(-)
create mode 100644 templates/huajia.html
create mode 100644 templates/zhuangshi.html
diff --git a/core/jx3_commands.py b/core/jx3_commands.py
index ac3e641..d100419 100644
--- a/core/jx3_commands.py
+++ b/core/jx3_commands.py
@@ -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:
diff --git a/core/jx3_data.py b/core/jx3_data.py
index 5508e35..cc3efe2 100644
--- a/core/jx3_data.py
+++ b/core/jx3_data.py
@@ -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()
diff --git a/data/api_config.json b/data/api_config.json
index ccdf478..094ccf7 100644
--- a/data/api_config.json
+++ b/data/api_config.json
@@ -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",
diff --git a/main.py b/main.py
index f6b9704..753db09 100644
--- a/main.py
+++ b/main.py
@@ -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,
diff --git a/templates/helps.html b/templates/helps.html
index 39b5a34..15f9046 100644
--- a/templates/helps.html
+++ b/templates/helps.html
@@ -148,61 +148,73 @@
日常活动
查询指定服务器某天的日常任务
-
剑三 日常 [服务器] [天数]
+
日常 [服务器] [天数]
日常预测
查询30天范围内的大战和战场
-
剑三 日常预测
+
日常预测
名望事件
查询接下来10次对应名望的行侠事件
-
剑三 名望 [穹野卫]
+
名望 [穹野卫]
开服查询
查询服务器当前的开服状态及时间
-
剑三 开服 [服务器]
+
开服 [服务器]
-
区服状态
+
全服状态
查询所有服务器当前的状态
-
剑三 状态 [服务器]
+
全服状态 [服务器]
随机骚话
随机输出一条剑三骚话
-
剑三 骚话
+
骚话
最新技改
查看最新职业技能改动
-
剑三 技改
+
技改
阵营沙盘
查看服务器当前沙盘信息
-
剑三 沙盘 [服务器]
+
沙盘 [服务器]
奇遇统计
查询服务器某个奇遇的触发情况
-
剑三 奇遇统计 奇遇名称 [服务器]
+
奇遇统计 奇遇名称 [服务器]
奇遇攻略
查询服务器某个奇遇的触发情况
-
剑三 奇遇攻略 奇遇名称
+
奇遇攻略 奇遇名称
+
+
+
+
科举
+
查询科举的题目和答案
+
科举 内容
+
+
+
+
花价
+
查询各个地图的鲜花倍率
+
花价 名称 [服务器] [家园地图]
@@ -213,90 +225,90 @@
金价查询
查询指定服务器金价走势
-
剑三 金价 [服务器]
+
金价 [服务器]
外观物价
查询外观物品价格
-
剑三 物价 外观名称 [服务器]
+
物价 外观名称 [服务器]
区服交易行
查询交易行物品信息
-
剑三 交易行 物品名称 [服务器]
+
交易行 物品名称 [服务器]
角色名片
查看指定角色名片
-
剑三 名片 角色名 [服务器]
+
名片 角色名 [服务器]
随机名片
随机获取指定职业与体型的名片
-
剑三 随机名片 职业 体型 [服务器]
+
随机名片 职业 体型 [服务器]
烟花记录
查看角色烟花记录
-
剑三 烟花 角色名 [服务器]
+
烟花 角色名 [服务器]
的卢记录
查询的服务器的卢刷新捕获拍卖情况
-
剑三 的卢 [服务器]
+
的卢 [服务器]
副本招募
查询服务器副本招募信息
-
剑三 招募 副本名称 [服务器]
+
招募 副本名称 [服务器]
角色战绩
查询角色 PVP 战绩仅33
-
剑三 战绩 角色名 [服务器]
+
战绩 角色名 [服务器]
角色奇遇
查询角色已获得奇遇
-
剑三 奇遇 角色名 [服务器]
+
奇遇 角色名 [服务器]
阵营拍卖
查询阵营拍卖中某物品的所有信息
-
剑三 阵营拍卖 物品名称 [服务器]
+
阵营拍卖 物品名称 [服务器]
扶摇九天
查询服务器扶摇九天的开启时间
-
剑三 扶摇九天 [服务器]
+
扶摇九天 [服务器]
刷马
查询服务器马儿的刷新时间
-
剑三 刷马 [服务器]
+
刷马 [服务器]
骗子查询
通过用户的 QQ 号搜索其在贴吧上的行骗记录
-
剑三 骗子 QQ号
+
骗子 QQ号
八卦记录
随机搜索指定分类的贴吧帖子。类型:818 616 鬼网三 鬼网3 树洞 记录 教程 街拍 故事 避雷 吐槽 提问
-
剑三 八卦 类型
+
八卦 类型
@@ -307,31 +319,31 @@
开服监控
查看开服监控状态的后台运行状况
-
剑三 开服监控
+
开服监控
新闻推送
推送最新的官方新闻资讯
-
剑三 新闻推送
+
新闻推送
刷马推送
推送最新的刷马消息
-
剑三 刷马推送
+
刷马推送
赤兔推送
推送最新的赤兔消息
-
剑三 赤兔推送
+
赤兔推送
使用提示:
- 1. 所有指令均需以 “剑三” 作为前缀,前面还需添加唤醒词
- 2. 中括号参数为可选或推荐填写内容
- 3. 不填写服务器时将使用配置默认服务器
+ 1. 中括号参数为可选或推荐填写内容
+ 2. 不填写服务器时将使用配置默认服务器
+ 3. 基础指令不需要token可以直接使用
+
+
+
花价查询({{ server }})
+
+ {% for map_name in [
+ '九寨沟·镜海',
+ '枫叶泊·乐苑',
+ '浣花水榭',
+ '枫叶泊·天苑',
+ '广陵邑'
+ ] %}
+
+ {% if data.get(map_name) %}
+
{{ map_name }}
+
+
+
+
+ | 名称 |
+ 颜色 |
+ 倍率 |
+ 分线 |
+
+
+
+ {% for item in data[map_name] %}
+
+ | {{ item.name }} |
+
+ {% if item.color %}
+ {{ item.color }}
+ {% else %}
+ —
+ {% endif %}
+ |
+ {{ item.price }} |
+
+ {{ item.line | join('、') }}
+ |
+
+ {% endfor %}
+
+
+ {% endif %}
+
+ {% endfor %}
+
+
+
diff --git a/templates/huajia.html b/templates/huajia.html
new file mode 100644
index 0000000..fdd6eec
--- /dev/null
+++ b/templates/huajia.html
@@ -0,0 +1,129 @@
+
+
+