From 8e788dba5d1f9825a1e331391f868d35af453416 Mon Sep 17 00:00:00 2001 From: qsc20001102 Date: Fri, 19 Dec 2025 14:23:07 +0800 Subject: [PATCH] 11 --- _conf_schema.json | 18 ++++++++---- core/jx3_service.py | 68 +++--------------------------------------- main.py | 70 ++++++++++++++++++++++++++------------------ templates/wujia.html | 2 +- 4 files changed, 58 insertions(+), 100 deletions(-) diff --git a/_conf_schema.json b/_conf_schema.json index 400b80f..0f2e27d 100644 --- a/_conf_schema.json +++ b/_conf_schema.json @@ -1,4 +1,16 @@ { + "server": { + "description": "默认服务器", + "type": "string", + "default": "梦江南", + "hint": "在指令中未输入服务器时,默认查询的服务器" + }, + "jx3api_token": { + "description": "JX3API Token", + "type": "string", + "default": "v2aa6e74d48abb7b9", + "hint": "前往https://www.jx3api.com/注册并购买Token。" + }, "kfjk": { "description": "开服监控配置", "type": "object", @@ -26,11 +38,5 @@ "default": ["QQ:GroupMessage:768280021","QQ:GroupMessage:690665795"] } } - }, - "jx3api_token": { - "description": "JX3API Token", - "type": "string", - "default": "v2aa6e74d48abb7b9", - "hint": "前往https://www.jx3api.com/注册并获取Token。" } } \ No newline at end of file diff --git a/core/jx3_service.py b/core/jx3_service.py index fe16e45..e3262d3 100644 --- a/core/jx3_service.py +++ b/core/jx3_service.py @@ -271,7 +271,7 @@ class JX3Service: return return_data - async def qiyu(self, adventureName: str = "阴阳两界", serverName: str = "眉间雪") -> Dict[str, Any]: + async def qiyu(self, adventureName: str, serverName: str) -> Dict[str, Any]: """区服奇遇""" return_data = self._init_return_data() @@ -367,12 +367,10 @@ class JX3Service: return return_data - async def wujia(self, Name: str) -> Dict[str, Any]: + async def wujia(self, Name: str, server:str) -> Dict[str, Any]: """物价查询""" return_data = self._init_return_data() - # 1. 查询魔盒获取外观名称 (jx3box_exterior) - # 获取配置中的 Token token = self._config.get("jx3api_token", "") if token == "": @@ -381,16 +379,13 @@ class JX3Service: # 2. 确定外观名称和 ID - params_search = {"name": Name,"token": token} + params_search = {"name": Name,"token": token, "server": server} search_data: Optional[Dict[str, Any]] = await self._base_request("jx3_wujia", "GET", params=params_search) if not search_data: return_data["msg"] = "未找到改外观" return return_data - showName = search_data.get("name", "") - logger.info(showName) - return_data["data"] = search_data # 5. 加载模板 @@ -405,61 +400,6 @@ class JX3Service: return return_data - async def _get_wbl_data(self,showName): - """获取万宝楼数据(公示和在售)""" - try: - #在配置文件中获取接口配置 - #api_config = self._api_config["aijx3_wblwg"] - api_config = self._api_config["wbl_waiguan"] - #更新参数 - api_config["params"]["filter[role_appearance]"] = showName - # 获取公示数据 - api_config["params"]["filter[state]"] = "1" - datawblgs = await self._api.get(api_config["url"], api_config["params"], "data") - # 获取在售数据 - api_config["params"]["filter[state]"] = "2" - datawblzs = await self._api.get(api_config["url"], api_config["params"], "data") - - return { - "wblgs": await self._process_wbl_records(datawblgs.get("list", [])), - "wblzs": await self._process_wbl_records(datawblzs.get("list", [])) - } - except Exception as e: - logger.error(f"获取万宝楼数据出错: {e}") - return None - - - async def _process_wbl_records(self,records): - """处理万宝楼记录数据""" - processed = [] - for record in records: - try: - # 转换时间戳为可读格式 - timestamp = record.get("remaining_time", 0) - days = timestamp // 86400 # 每天有 86400 秒 - hours = (timestamp % 86400) // 3600 # 每小时有 3600 秒 - minutes = (timestamp % 3600) // 60 # 每分钟有 60 秒 - result = "" - if days > 0: - result = (f"{days}天") - if hours > 0: - result += (f"{hours}时") - if minutes > 0: - result += (f"{minutes}分钟") - single_unit_price = record.get("single_unit_price", 0) - processed.append({ - "priceNum": "{:.2f}".format( single_unit_price / 100), - "belongQf2": record.get("server_name", "无数据"), - "replyTime": result, - "discountRate": record.get("discountRate", 0.0), - }) - except Exception as e: - logger.error(f"处理万宝楼记录出错: {e}") - continue - - return processed - - async def jiaoyihang(self, Name: str , server: str) -> Dict[str, Any]: """区服交易行""" return_data = self._init_return_data() @@ -562,7 +502,7 @@ class JX3Service: ) if not data: - return_data["msg"] = "获取接口信息失败" + return_data["msg"] = "未找到该角色" return return_data # 3. 处理返回数据 (直接提取图片 URL) diff --git a/main.py b/main.py index 7467156..c129664 100644 --- a/main.py +++ b/main.py @@ -28,10 +28,13 @@ class Jx3ApiPlugin(Star): super().__init__(context) #获取配置 self.conf = config + # 本地数据存储路径 local_data_dir = StarTools.get_data_dir("astrbot_plugin_jx3") + # 插件数据文件路径 data_file_path = Path(__file__).parent / "data" + # --- 调用函数完成检查和复制 --- try: self.file_local_data = self.check_and_copy_db( @@ -43,12 +46,15 @@ class Jx3ApiPlugin(Star): # 处理默认文件丢失的严重错误 logger.critical(f"插件初始化失败:{e}") raise # 中断初始化 + # 读取API配置文件 self.api_file_path = Path(__file__).parent / "data" / "api_config.json" with open(self.api_file_path, 'r', encoding='utf-8') as f: - self.api_config = json.load(f) + self.api_config = json.load(f) + # 初始化数据 - #self.kf_task = asyncio.create_task(self.cycle_kaifjiankong()) + self.server = self.conf.get("server", "梦江南") + logger.info(f"配置加载默认服务器:{self.server}") logger.info("jx3api插件初始化完成") @@ -103,16 +109,22 @@ class Jx3ApiPlugin(Star): return target_file_path + async def serverdefault(self,server): + if server == None: + return self.server + return server + + @filter.command_group("剑三") def jx3(self): pass @jx3.command("日常") - async def jx3_richang(self, event: AstrMessageEvent,server: str = "梦江南",num: int = 0): + async def jx3_richang(self, event: AstrMessageEvent,server: str = None ,num: int = 0): """剑三 日常 服务器 天数""" try: - data= await self.jx3fun.richang(server,num) + data= await self.jx3fun.richang(await self.serverdefault(server),num) if data["code"] == 200: yield event.plain_result(data["data"]) else: @@ -124,10 +136,10 @@ class Jx3ApiPlugin(Star): @jx3.command("开服") - async def jx3_kaifu(self, event: AstrMessageEvent,server: str = "梦江南"): + async def jx3_kaifu(self, event: AstrMessageEvent,server: str = None): """剑三 开服 服务器""" try: - data= await self.jx3fun.kaifu(server) + data= await self.jx3fun.kaifu(await self.serverdefault(server)) if data["code"] == 200: yield event.plain_result(data["data"]) else: @@ -139,10 +151,10 @@ class Jx3ApiPlugin(Star): @jx3.command("沙盘") - async def jx3_shapan(self, event: AstrMessageEvent,server: str = "梦江南"): + async def jx3_shapan(self, event: AstrMessageEvent,server: str = None): """剑三 沙盘 服务器""" try: - data= await self.jx3fun.shapan(server) + data= await self.jx3fun.shapan(await self.serverdefault(server)) if data["code"] == 200: yield event.image_result(data["data"]) else: @@ -184,10 +196,10 @@ class Jx3ApiPlugin(Star): @jx3.command("金价") - async def jx3_jinjia(self, event: AstrMessageEvent,server: str = "梦江南", limit:str = "15"): + async def jx3_jinjia(self, event: AstrMessageEvent,server: str = None, limit:str = "15"): """剑三 金价 服务器""" try: - data= await self.jx3fun.jinjia(server,limit) + data= await self.jx3fun.jinjia(await self.serverdefault(server),limit) if data["code"] == 200: url = await self.html_render(data["temp"], data["data"], options={}) yield event.image_result(url) @@ -200,10 +212,10 @@ class Jx3ApiPlugin(Star): @jx3.command("奇遇") - async def jx3_qiyu(self, event: AstrMessageEvent,adventureName: str = "阴阳两界", serverName: str = "梦江南"): + async def jx3_qiyu(self, event: AstrMessageEvent,adventureName: str = "阴阳两界", server: str = None): """剑三 奇遇 奇遇名称 服务器""" try: - data= await self.jx3fun.qiyu(adventureName,serverName) + data= await self.jx3fun.qiyu(adventureName,await self.serverdefault(server)) if data["code"] == 200: url = await self.html_render(data["temp"], data["data"], options={}) yield event.image_result(url) @@ -216,10 +228,10 @@ class Jx3ApiPlugin(Star): @jx3.command("物价") - async def jx3_wujia(self, event: AstrMessageEvent,Name: str = "秃盒"): + async def jx3_wujia(self, event: AstrMessageEvent,Name: str = "秃盒", server: str = None): """剑三 物价 外观名称""" try: - data=await self.jx3fun.wujia(Name) + data=await self.jx3fun.wujia(Name,await self.serverdefault(server)) if data["code"] == 200: url = await self.html_render(data["temp"], data["data"], options={}) yield event.image_result(url) @@ -232,10 +244,10 @@ class Jx3ApiPlugin(Star): @jx3.command("交易行") - async def jx3_jiaoyihang(self, event: AstrMessageEvent,Name: str = "守缺式",server: str = "梦江南"): + async def jx3_jiaoyihang(self, event: AstrMessageEvent,Name: str = "守缺式",server: str = None): """剑三 交易行 物品名称 服务器""" try: - data=await self.jx3fun.jiaoyihang(Name,server) + data=await self.jx3fun.jiaoyihang(Name,await self.serverdefault(server)) if data["code"] == 200: url = await self.html_render(data["temp"], data["data"], options={}) yield event.image_result(url) @@ -273,10 +285,10 @@ class Jx3ApiPlugin(Star): @jx3.command("名片") - async def jx3_jueshemingpian(self, event: AstrMessageEvent,server: str = "梦江南", name: str = "飞翔大野猪"): - """剑三 名片 服务器 角色""" + async def jx3_jueshemingpian(self, event: AstrMessageEvent, name: str = "飞翔大野猪", server: str = None): + """剑三 名片 角色 服务器""" try: - data= await self.jx3fun.jueshemingpian(server,name) + data= await self.jx3fun.jueshemingpian(await self.serverdefault(server),name) if data["code"] == 200: chain = [ Comp.Plain(f"{data['data']['serverName']}--{data['data']['roleName']} \n"), @@ -292,10 +304,10 @@ class Jx3ApiPlugin(Star): @jx3.command("随机名片") - async def jx3_shuijimingpian(self, event: AstrMessageEvent,force: str = "万花", body: str = "萝莉", server: str = "梦江南"): - """剑三 随机名片 服务器 角色""" + async def jx3_shuijimingpian(self, event: AstrMessageEvent,force: str = "万花", body: str = "萝莉", server: str = None): + """剑三 随机名片 职业 体型 服务器""" try: - data= await self.jx3fun.shuijimingpian(force,body,server) + data= await self.jx3fun.shuijimingpian(force,body,await self.serverdefault(server)) if data["code"] == 200: chain = [ @@ -313,10 +325,10 @@ class Jx3ApiPlugin(Star): @jx3.command("烟花") - async def jx3_yanhuachaxun(self, event: AstrMessageEvent,server: str = "梦江南", name: str = "飞翔大野猪"): - """剑三 烟花 服务器 角色""" + async def jx3_yanhuachaxun(self, event: AstrMessageEvent,name: str = "飞翔大野猪", server: str = None): + """剑三 烟花 角色 服务器""" try: - data= await self.jx3fun.yanhuachaxun(server,name) + data= await self.jx3fun.yanhuachaxun(await self.serverdefault(server),name) if data["code"] == 200: url = await self.html_render(data["temp"], data["data"], options={}) yield event.image_result(url) @@ -329,10 +341,10 @@ class Jx3ApiPlugin(Star): @jx3.command("的卢") - async def jx3_dilujilu(self, event: AstrMessageEvent,server: str = "梦江南"): + async def jx3_dilujilu(self, event: AstrMessageEvent,server: str = None): """剑三 的卢 服务器""" try: - data= await self.jx3fun.dilujilu(server) + data= await self.jx3fun.dilujilu(await self.serverdefault(server)) if data["code"] == 200: url = await self.html_render(data["temp"], data["data"], options={}) yield event.image_result(url) @@ -345,10 +357,10 @@ class Jx3ApiPlugin(Star): @jx3.command("招募") - async def jx3_tuanduizhaomu(self, event: AstrMessageEvent,keyword: str = "25人普通会战弓月城", server: str = "梦江南"): + async def jx3_tuanduizhaomu(self, event: AstrMessageEvent,keyword: str = "25人普通会战弓月城", server: str = None): """剑三 招募 副本 服务器""" try: - data= await self.jx3fun.tuanduizhaomu(server,keyword) + data= await self.jx3fun.tuanduizhaomu(await self.serverdefault(server),keyword) if data["code"] == 200: url = await self.html_render(data["temp"], data["data"], options={}) yield event.image_result(url) diff --git a/templates/wujia.html b/templates/wujia.html index e03726c..bcdbf19 100644 --- a/templates/wujia.html +++ b/templates/wujia.html @@ -116,7 +116,7 @@

{{ desc }}

- 发布时间:{{ date }} + 发售时间:{{ date }} 参考价格:{{ cost }} 元