diff --git a/core/jx3_service.py b/core/jx3_service.py index d5e72ae..7d037ae 100644 --- a/core/jx3_service.py +++ b/core/jx3_service.py @@ -2,6 +2,7 @@ # pyright: reportArgumentType=false # pyright: reportAttributeAccessIssue=false # pyright: reportIndexIssue=false +# pyright: reportOptionalMemberAccess=false from datetime import datetime from typing import Dict, Any, Optional, List, Union @@ -1022,4 +1023,50 @@ class JX3Service: return_data["data"] = result_msg return_data["code"] = 200 + return return_data + + + async def qiyugonglue(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( + "jx3box_qiyugonglue", "GET", params=params, out_key="list" + ) + + if not data: + return_data["msg"] = "未找到该奇遇" + return return_data + + # 提取dwID + dwID = data[0]["dwID"] + url = f"https://node.jx3box.com/serendipity/{dwID}/achievement" + logger.debug(f"拼接URL:{url}") + + # 3. 获取奇遇攻略 + try: + # 获取achievement_id + data1 = await self._api.get(url) + url1 = f"https://cms.jx3box.com/api/cms/wiki/post/type/achievement/source/{data1['achievement_id']}" + logger.debug(f"拼接URL:{url1}") + # 获取奇遇攻略 + data2 = await self._api.get(url1, out_key="data") + except Exception as e: + logger.exception("获取奇遇攻略数据失败") + return_data["msg"] = "获取奇遇攻略数据失败" + + # 4. 处理数据 + try: + return_data["data"] = data2["post"]["title"] + content = data2["post"]["content"] + except Exception as e: + logger.exception("处理返回数据失败") + return_data["msg"] = "处理返回数据失败" + + return_data["temp"] = content + return_data["code"] = 200 return return_data \ No newline at end of file diff --git a/data/api_config.json b/data/api_config.json index bd1f653..ad126be 100644 --- a/data/api_config.json +++ b/data/api_config.json @@ -239,5 +239,16 @@ "limit": "10", "token": "" } + }, + "jx3box_qiyugonglue":{ + "url":"https://node.jx3box.com/serendipities", + "method":"GET", + "description":"魔盒根据名称查询对应奇遇dwID", + "params":{ + "name": "阴阳", + "per": "2", + "client": "std", + "page": "1" + } } } \ No newline at end of file diff --git a/main.py b/main.py index e6d3b47..637aefe 100644 --- a/main.py +++ b/main.py @@ -1,3 +1,5 @@ +# pyright: reportOptionalMemberAccess=false + import json import shutil import pathlib @@ -66,7 +68,7 @@ class Jx3ApiPlugin(Star): await self.at.init_tasks() except Exception as e: if hasattr(self, "at"): - await self.at.destroy() + await self.at.destroy() logger.error(f"功能模块初始化失败: {e}") raise @@ -258,9 +260,9 @@ class Jx3ApiPlugin(Star): yield event.plain_result("猪脑过载,请稍后再试") - @jx3.command("区服奇遇") + @jx3.command("奇遇统计") async def jx3_qufuqiyu(self, event: AstrMessageEvent,adventureName: str = "阴阳两界", server: str = ""): - """剑三 区服奇遇 奇遇名称 服务器""" + """剑三 奇遇统计 奇遇名称 服务器""" try: data= await self.jx3fun.qiyu(adventureName,self.serverdefault(server)) if data["code"] == 200: @@ -274,6 +276,26 @@ class Jx3ApiPlugin(Star): yield event.plain_result("猪脑过载,请稍后再试") + @jx3.command("奇遇攻略") + async def jx3_qiyugonglue(self, event: AstrMessageEvent,name: str): + """剑三 奇遇攻略 奇遇名称""" + try: + data= await self.jx3fun.qiyugonglue(name) + if data["code"] == 200: + url = await self.html_render(data["temp"], {}, options={}) + chain = [ + Comp.Plain(f"{data['data']} \n"), + Comp.Image.fromURL(f"{url}") + ] + yield event.chain_result(chain) + else: + yield event.plain_result(data["msg"]) + return + except Exception as e: + logger.error(f"功能函数执行错误: {e}") + yield event.plain_result("猪脑过载,请稍后再试") + + @jx3.command("金价") async def jx3_jinjia(self, event: AstrMessageEvent,server: str = "", limit:str = "15"): """剑三 金价 服务器""" diff --git a/templates/helps.html b/templates/helps.html index 872bcdf..a6fe058 100644 --- a/templates/helps.html +++ b/templates/helps.html @@ -194,9 +194,15 @@
-
区服奇遇
+
奇遇统计
查询服务器某个奇遇的触发情况
-
剑三 区服奇遇 奇遇名称 [服务器]
+
剑三 奇遇统计 奇遇名称 [服务器]
+
+ +
+
奇遇攻略
+
查询服务器某个奇遇的触发情况
+
剑三 奇遇攻略 奇遇名称