From 3248bdbaf9782e79e43b19208fecca3968ac1e0c Mon Sep 17 00:00:00 2001 From: qsc Date: Wed, 28 Jan 2026 21:57:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=8F=E6=9F=A5=E6=89=BE?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/jx3_commands.py | 97 +++++++++++++------- core/jx3_data.py | 69 ++++++++++++++ data/api_config.json | 10 +++ templates/temp_test.html | 189 ++++++++++++++++----------------------- 4 files changed, 220 insertions(+), 145 deletions(-) diff --git a/core/jx3_commands.py b/core/jx3_commands.py index 55aff58..64553ef 100644 --- a/core/jx3_commands.py +++ b/core/jx3_commands.py @@ -274,44 +274,77 @@ class JX3Commands(Star): logger.error(f"功能函数执行错误: {e}") yield event.plain_result("猪脑过载,请稍后再试") - async def jx3_hong(self, event: AstrMessageEvent, name: str = "易筋经"): + + async def jx3_hong(self, event: AstrMessageEvent, kungfu: str = "易筋经"): """剑三 宏 心法""" - - macros = "已查询到的内容" - if not macros: - yield event.plain_result(f"未搜索到与【{name}】相关的宏") - return - - yield event.plain_result(macros) - - user_id = event.get_sender_id() - - - @session_waiter(timeout=10) - async def macro_select_waiter(controller: SessionController,event: AstrMessageEvent): - if event.get_sender_id() != user_id: - return - - msg = event.message_str.strip() - logger.debug(msg) - - await event.send( - MessageChain().message("收到") - ) - - controller.stop() + # 获取宏列表 try: - await macro_select_waiter(event) # type: ignore - return # ✅ 防止空 MessageChain + data = await self.jx3fun.hong1(kungfu) + if data["code"] == 200: + yield event.plain_result(data["msg"]) + else: + yield event.plain_result(f"未搜索到与【{kungfu}】相关的宏") + return + except Exception as e: + logger.error(f"功能函数执行错误: {e}") + yield event.plain_result("猪脑过载,请稍后再试") + + # 获取用户ID + user_id = event.get_sender_id() + # 等等用户回复 + @session_waiter(timeout=15) + async def macro_select_waiter(controller: SessionController,new_event: AstrMessageEvent): + if new_event.get_sender_id() != user_id: + return + + msg = new_event.get_message_str().strip() + + if not msg.isdigit(): + await new_event.send( + MessageChain().message("输入异常,结束会话") + ) + controller.stop() + return + + num = int(msg) + if num < 1 or num > data["data"]["num"]: + await new_event.send( + MessageChain().message("无效序号,结束会话") + ) + controller.stop() + return + + try: + data1 = await self.jx3fun.hong2(data["data"]["pid"][num]) + if data1["code"] != 200: + await new_event.send( + MessageChain().message("获取详细宏数据失败") + ) + controller.stop() + return + + url = await self.html_render(data1["temp"], {}, options={}) + msg_text = data1["data"] + + chain = MessageChain() + chain.url_image(url) + chain.message(msg_text) + await new_event.send(chain) + + except Exception as e: + logger.error(f"功能函数执行错误: {e}") + await new_event.send( + MessageChain().message("猪脑过载,请稍后再试") + ) + + controller.stop() + + try: + await macro_select_waiter(event) except TimeoutError: yield event.plain_result("选择宏超时,已取消") - return except Exception: logger.error("宏选择发生异常", exc_info=True) - return - - - async def jx3_jinjia(self, event: AstrMessageEvent,server: str = "", limit:str = "15"): diff --git a/core/jx3_data.py b/core/jx3_data.py index 0d566e0..efe1d99 100644 --- a/core/jx3_data.py +++ b/core/jx3_data.py @@ -1235,4 +1235,73 @@ class JX3Service: return_data["temp"] = content return_data["code"] = 200 + return return_data + + + async def hong1(self, kungfu: str) -> Dict[str, Any]: + """宏 心法""" + return_data = self._init_return_data() + + # 1. 构造请求参数 + params = {"kungfu": kungfu} + + # 2. 调用基础请求 + data: Optional[Dict[str, Any]] = await self._base_request( + "jx3box_hong", "GET", params=params, out_key="" + ) + logger.debug(data) + if not data: + return_data["msg"] = "未找到该心法一键宏" + return return_data + + # 提取ID + pid_list = [0] + msg = "" + n = 1 + try: + for m in data: + msg += f"{n}、{m['author']}\t{m['item_version']}\n" + pid_list.append(m["pid"]) + n += 1 + + return_data["msg"] = msg + return_data["data"]["pid"] = pid_list + return_data["data"]["num"] = n + return_data["code"] = 200 + except Exception as e: + logger.exception("处理返回数据失败") + return_data["msg"] = "处理返回数据失败" + + return return_data + + + async def hong2(self, pid: str) -> Dict[str, Any]: + """宏 心法""" + return_data = self._init_return_data() + + # 发起请求 + url = f"https://cms.jx3box.com/api/cms/post/{pid}" + logger.debug(f"获取宏接口地址:{url}") + data = await self._api.get(url, out_key="data") + # 验证数据 + if not data: + return_data["msg"] = "获取宏数据异常" + return return_data + + # 4. 处理数据 + try: + return_data["temp"] = data["post_content"] + msg = "" + for m in data["post_meta"]["data"]: + msg += f"宏名称:{m['name']}\n" + msg += f"使用说明:{m['desc']}\n" + msg += f"宏脚本:\n{m['macro']}\n\n" + + return_data["data"] = msg + return_data["code"] = 200 + except Exception as e: + logger.exception("处理返回数据失败") + return_data["msg"] = "处理返回数据失败" + + return return_data \ No newline at end of file diff --git a/data/api_config.json b/data/api_config.json index 935a897..7dcace4 100644 --- a/data/api_config.json +++ b/data/api_config.json @@ -297,5 +297,15 @@ "type": "horse", "subtype": "foreshow" } + }, + "jx3box_hong":{ + "url":"https://next2.jx3box.com/api/macro/tops", + "method":"GET", + "description":"魔盒获取宏推荐列表", + "params":{ + "kungfu": "易筋经", + "size": "10", + "client": "std" + } } } \ No newline at end of file diff --git a/templates/temp_test.html b/templates/temp_test.html index e9ea5cd..0601898 100644 --- a/templates/temp_test.html +++ b/templates/temp_test.html @@ -1,127 +1,90 @@ - - - - -未来战场日历 +
+{"version":"v20251030","xf":"易筋经","sq":"1,1,1,1,1,1,1,9,5,7","client":"std"}
+
- - - +

+ 434 + :1伤害 1目标数量 1持续时间 +

-

未来战场日历

+

+ 1508 + :3伤害 1会心 或者 2伤害 2会心(自己酌情选择) +

- +

+ 447 + :2伤害 2CD +

- - - - - - - - - - - - - - - {% for week in calendar_rows %} - - {% for cell in week %} - - {% endfor %} - - {% endfor %} - - -
周日周一周二周三周四周五周六
- {% if cell.date %} -
{{ cell.date }}
- {% for ev in cell.items %} -
-
{{ ev.war }}
-
{{ ev.battle }}
-
- {% endfor %} - {% endif %} -
- - - +

+ 445 + : + + 3持续 + + 1回豆效果(加速2段以上建议点,看个人手感) + + +