diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c35be6..f9b8d4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## 更新记录 +### version: 2.0: + +接口地址调整 + + ### version: 1.2.4: 角色信息查询数据展示优化 diff --git a/core/jx3_data.py b/core/jx3_data.py index 0fa3c37..b9c602d 100644 --- a/core/jx3_data.py +++ b/core/jx3_data.py @@ -1,6 +1,7 @@ import json from datetime import datetime from typing import Dict, Any, Optional, List, Union +from collections import defaultdict from astrbot.api import logger from astrbot.api import AstrBotConfig @@ -144,7 +145,7 @@ class JX3Service: try: # 格式化字符串,利用字典的 get 方法提供默认值 result_msg = ( - f"{server}\n{data.get('date', '未知日期')}-星期{data.get('week', '未知')}\n" + f"{server}\n{data.get('date', '未知日期')} 星期{data.get('week', '未知')}\n" f"大战:{data.get('war', '无')}\n" f"战场:{data.get('battle', '无')}\n" f"阵营:{data.get('orecar', '无')}\n" @@ -159,7 +160,7 @@ class JX3Service: card = data.get('card', []) card_msg = f"【家园声望·加倍道具】\n{', '.join(card)}\n" team = data.get('team', [None, None, None]) - team_msg = f"【武林通鉴·公共任务】\n{team[0] or '无'}\n【武林通鉴·团队秘境】\n{team[2] or '无'}\n" + team_msg = f"【武林通鉴·公共任务】\n{team[0] or '无'}\n【武林通鉴·团队秘境】\n{team[1] or '无'}\n" return_data["data"] = result_msg + luck_msg + card_msg + team_msg return_data["code"] = 200 @@ -342,7 +343,7 @@ class JX3Service: async def zhuangshi(self,name: str) -> Dict[str, Any]: - """花价""" + """装饰""" return_data = self._init_return_data() # 1. 构造请求参数 @@ -416,31 +417,113 @@ class JX3Service: return return_data - async def shapan(self, server: str ) -> Dict[str, Any]: - """区服沙盘""" + async def xinwen(self, num:int) -> Dict[str, Any]: + """新闻资讯""" return_data = self._init_return_data() + + params = {"limit": num} + # 提取字段可能返回列表 + data: Optional[List[Dict[str, Any]]] = await self._base_request( + "jx3_xinweng", "GET", params=params) + if not data or not isinstance(data, list): + return_data["msg"] = "获取接口信息失败或数据格式错误" + return return_data + + try: + # + result = data[0] + return_data["status"] = result.get('id') + + result_msg = "新闻资讯推送\n" + # 仅展示前1条,避免消息过长 + for i, item in enumerate(data[:num], 1): + result_msg += f"{i}. 【{item.get('type', '无类型')}】\n" + result_msg += f"标题:{item.get('title', '未知时间')}\n" + result_msg += f"时间:{item.get('date', '未知时间')}\n" + result_msg += f"链接:{item.get('url', '无链接')}\n" + + return_data["data"] = result_msg + + except Exception as e: + logger.error(f"数据处理时出错: {e}") + return_data["msg"] = "处理接口返回信息时出错" + + return_data["code"] = 200 + + return return_data + + + async def weihu(self, num:int) -> Dict[str, Any]: + """维护""" + return_data = self._init_return_data() + + params = {"limit": num} + # 提取字段可能返回列表 + data: Optional[List[Dict[str, Any]]] = await self._base_request( + "jx3_weihu", "GET", params=params) + + if not data or not isinstance(data, list): + return_data["msg"] = "获取接口信息失败或数据格式错误" + return return_data + + try: + # + result = data[0] + return_data["status"] = result.get('id') + + result_msg = "维护推送\n" + # 仅展示前1条,避免消息过长 + for i, item in enumerate(data[:num], 1): + result_msg += f"{i}. 【{item.get('type', '无类型')}】\n" + result_msg += f"标题:{item.get('title', '未知时间')}\n" + result_msg += f"时间:{item.get('date', '未知时间')}\n" + result_msg += f"链接:{item.get('url', '无链接')}\n" + + return_data["data"] = result_msg + + except Exception as e: + logger.error(f"数据处理时出错: {e}") + return_data["msg"] = "处理接口返回信息时出错" + + return_data["code"] = 200 + + return return_data + + async def qufu(self,name: str) -> Dict[str, Any]: + """区服信息""" + return_data = self._init_return_data() + # 1. 构造请求参数 - params = {"serverName": server} - + params = {"name": name} + # 2. 调用基础请求 data: Optional[Dict[str, Any]] = await self._base_request( - "aijx3_shapan", "POST", params=params + "jx3_qufu", "GET", params=params ) - if not data: return_data["msg"] = "获取接口信息失败" return return_data + + # 3. 处理返回数据 + try: + # 格式化字符串,利用字典的 get 方法提供默认值 + result_msg = f"主服:{data.get('zone', '无')}-{data.get('name', '无')}\n" - # 3. 处理返回数据 (直接提取图片 URL) - pic_url = data.get("picUrl") - if pic_url: - return_data["data"] = pic_url - else: - return_data["msg"] = "接口未返回图片URL" + slave = data.get('slave', []) + slave_msg = f"区服:{', '.join(slave)}\n" + + alias = data.get('alias', []) + alias_msg = f"别名:{', '.join(alias)}\n" + + return_data["data"] = result_msg + slave_msg + alias_msg + return_data["code"] = 200 + except Exception as e: + logger.error(f"数据处理时出错: {e}") + return_data["msg"] = "处理接口返回信息时出错" return return_data - return_data["code"] = 200 + return_data["code"] = 200 return return_data @@ -450,11 +533,11 @@ class JX3Service: return_data = self._init_return_data() # 1. 构造请求参数 - params = {"server": server} + params = {"server": server,"type": "1"} # 2. 调用基础请求 data: Optional[Dict[str, Union[int, str]]] = await self._base_request( - "jx3_kaifu", "GET", params=params + "jx3_zhuangtai", "GET", params=params ) if not data: @@ -464,15 +547,17 @@ class JX3Service: # 3. 处理返回数据 try: status = data.get("status", 0) - timestamp = data.get("time", 0) + lasttime = data.get("lasttime", 0) + shuttime = data.get("shuttime", 0) - status_time = datetime.fromtimestamp(float(timestamp)).strftime("%Y-%m-%d %H:%M:%S") + lasttime_t = datetime.fromtimestamp(float(lasttime)).strftime("%Y-%m-%d %H:%M:%S") + shuttime_t = datetime.fromtimestamp(float(shuttime)).strftime("%Y-%m-%d %H:%M:%S") if status == 1: - status_str = f"{server}服务器已开服,快冲,快冲!\n开服时间:{status_time}" + status_str = f"{server}服务器已开服,快冲,快冲!\n开服时间:{lasttime_t}" status_bool = True else: - status_str = f"{server}服务器当前维护中,等会再来吧!\n维护时间:{status_time}" + status_str = f"{server}服务器当前维护中,等会再来吧!\n维护时间:{shuttime_t}" status_bool = False return_data["status"] = status_bool @@ -488,36 +573,15 @@ class JX3Service: return return_data - async def shaohua(self) -> Dict[str, Any]: - """骚话""" - return_data = self._init_return_data() - - # 因为没有参数,所以 params=None - data: Optional[Dict[str, Any]] = await self._base_request("jx3_shaohua", "GET") - - if not data: - return_data["msg"] = "获取接口信息失败" - return return_data - - text = data.get("text") - if text: - return_data["data"] = text - else: - return_data["msg"] = "接口未返回文本" - return return_data - - return_data["code"] = 200 - - return return_data - - async def zhuangtai(self) -> Dict[str, Any]: """区服状态""" return_data = self._init_return_data() + # 1. 构造请求参数 + params = {"server": "","type": "2"} - data: Optional[List[Dict[str, Any]]] = await self._base_request("jx3_zhuangtai", "GET") - + data: Optional[List[Dict[str, Any]]] = await self._base_request("jx3_zhuangtai", "GET", params=params) + if not data: return_data["msg"] = "获取接口信息失败" return return_data @@ -566,9 +630,9 @@ class JX3Service: return return_data try: - result_msg = "剑网三最近技改\n" - # 仅展示前1条,避免消息过长 - for i, item in enumerate(data[:1], 1): + result_msg = "最近技改\n" + + for i, item in enumerate(data[:3], 1): result_msg += f"{i}. {item.get('title', '无标题')}\n" result_msg += f"时间:{item.get('time', '未知时间')}\n" result_msg += f"链接:{item.get('url', '无链接')}\n\n" @@ -583,42 +647,120 @@ class JX3Service: return_data["code"] = 200 return return_data - - async def xinwen(self, num:int) -> Dict[str, Any]: - """新闻资讯""" + + async def xiaoyao(self) -> Dict[str, Any]: + """小药""" return_data = self._init_return_data() - - params = {"limit": num} - # 提取字段可能返回列表 - data: Optional[List[Dict[str, Any]]] = await self._base_request( - "jx3_xinweng", "GET", params=params) - if not data or not isinstance(data, list): - return_data["msg"] = "获取接口信息失败或数据格式错误" + data: Optional[List[Dict[str, Any]]] = await self._base_request("jx3_xiaoyao", "GET") + logger.debug(data) + if not data: + return_data["msg"] = "获取接口信息失败" return return_data + # 处理返回数据 try: - # - result = data[0] - return_data["status"] = result.get('id') + result = {} + + for item in data: + k = item["kungfu"] + color = item["color"] + cls = item["class"] + name = item["name"] + + if k not in result: + result[k] = { + "kungfu": k, + "purple": {}, + "blue": {} + } + + if color == "紫": + result[k]["purple"][cls] = name + else: + result[k]["blue"][cls] = name + + return_data["data"]["items"] = list(result.values()) + logger.debug(return_data["data"]) - result_msg = "新闻资讯推送\n" - # 仅展示前1条,避免消息过长 - for i, item in enumerate(data[:num], 1): - result_msg += f"{i}. {item.get('title', '无标题')}\n" - result_msg += f"时间:{item.get('date', '未知时间')}\n" - result_msg += f"链接:{item.get('url', '无链接')}\n" - - return_data["data"] = result_msg - except Exception as e: logger.error(f"数据处理时出错: {e}") return_data["msg"] = "处理接口返回信息时出错" + # 加载模板 + try: + return_data["temp"] = await load_template("xiaoyao.html") + except FileNotFoundError as e: + logger.error(f"加载模板失败: {e}") + return_data["msg"] = "系统错误:模板文件不存在" + return return_data + + return_data["code"] = 200 + + return return_data + + + async def shaohua(self) -> Dict[str, Any]: + """骚话""" + return_data = self._init_return_data() + + # 因为没有参数,所以 params=None + data: Optional[Dict[str, Any]] = await self._base_request("jx3_shaohua", "GET") + + if not data: + return_data["msg"] = "获取接口信息失败" + return return_data + + text = data.get("text") + if text: + return_data["data"] = text + else: + return_data["msg"] = "接口未返回文本" + return return_data + + return_data["code"] = 200 + + return return_data + + + async def shapan(self, server: str ) -> Dict[str, Any]: + """区服沙盘""" + return_data = self._init_return_data() + + # 1. 构造请求参数 + params = {"serverName": server} + + # 2. 调用基础请求 + data: Optional[Dict[str, Any]] = await self._base_request( + "aijx3_shapan", "POST", params=params + ) + + if not data: + return_data["msg"] = "获取接口信息失败" + return return_data + + # 3. 处理返回数据 (直接提取图片 URL) + pic_url = data.get("picUrl") + if pic_url: + return_data["data"] = pic_url + else: + return_data["msg"] = "接口未返回图片URL" + return return_data + return_data["code"] = 200 return return_data + + + + + + + + + + async def shuamamsg(self,server:str,type:str,subtype:str) -> Dict[str, Any]: diff --git a/core/message.py b/core/message.py index 9e964a5..1749d00 100644 --- a/core/message.py +++ b/core/message.py @@ -207,31 +207,6 @@ class MessageBuilder: return await self.T2I_image_msg(event, lambda: self.jx3api.xingxiashijian(name)) - async def jx3_kaifu(self, event: AstrMessageEvent,server: str = ""): - """剑三 开服 服务器""" - return await self.plain_msg(event, lambda: self.jx3api.kaifu(self.serverdefault(server))) - - - async def jx3_zhuangtai(self, event: AstrMessageEvent): - """剑三 状态""" - return await self.T2I_image_msg(event, self.jx3api.zhuangtai) - - - async def jx3_shaohua(self, event: AstrMessageEvent,): - """剑三 骚话""" - return await self.plain_msg(event, self.jx3api.shaohua) - - - async def jx3_jigai(self, event: AstrMessageEvent,): - """剑三 技改""" - return await self.plain_msg(event, self.jx3api.jigai) - - - async def jx3_xinwen(self, event: AstrMessageEvent,num:int = 5): - """剑三 新闻""" - return await self.plain_msg(event, lambda: self.jx3api.xinwen(num)) - - async def jx3_keju(self, event: AstrMessageEvent,subject: str, limit: int = 5): """剑三 科举""" return await self.plain_msg(event, lambda: self.jx3api.keju(subject,limit)) @@ -250,7 +225,47 @@ class MessageBuilder: async def jx3_qiwu(self, event: AstrMessageEvent, name: str): """剑三 器物 地图名称""" return await self.T2I_image_msg(event, lambda: self.jx3api.qiwu(name)) - + + + async def jx3_xinwen(self, event: AstrMessageEvent,num:int = 5): + """剑三 新闻""" + return await self.plain_msg(event, lambda: self.jx3api.xinwen(num)) + + + async def jx3_weihu(self, event: AstrMessageEvent,num:int = 5): + """剑三 维护""" + return await self.plain_msg(event, lambda: self.jx3api.weihu(num)) + + + async def jx3_qufu(self, event: AstrMessageEvent,name: str = "双梦镇"): + """剑三 区服""" + return await self.plain_msg(event, lambda: self.jx3api.qufu(name)) + + + async def jx3_kaifu(self, event: AstrMessageEvent,server: str = ""): + """剑三 开服 服务器""" + return await self.plain_msg(event, lambda: self.jx3api.kaifu(self.serverdefault(server))) + + + async def jx3_zhuangtai(self, event: AstrMessageEvent): + """剑三 状态""" + return await self.T2I_image_msg(event, self.jx3api.zhuangtai) + + + async def jx3_jigai(self, event: AstrMessageEvent,): + """剑三 技改""" + return await self.plain_msg(event, self.jx3api.jigai) + + + async def jx3_xiaoyao(self, event: AstrMessageEvent): + """剑三 小药""" + return await self.T2I_image_msg(event, self.jx3api.xiaoyao) + + + async def jx3_shaohua(self, event: AstrMessageEvent,): + """剑三 骚话""" + return await self.plain_msg(event, self.jx3api.shaohua) + async def jx3_shapan(self, event: AstrMessageEvent,server: str = ""): """剑三 沙盘 服务器""" diff --git a/data/api_config.json b/data/api_config.json index 0248fa6..41dc0ce 100644 --- a/data/api_config.json +++ b/data/api_config.json @@ -8,27 +8,102 @@ "num": 0 } }, - "jx3_shaohua":{ - "url":"https://www.jx3api.com/data/saohua/random", + "jx3_richangyuche":{ + "url":"https://www.jx3api.com/data/active/list/calendar", "method":"GET", - "description":"获取剑网三骚话", + "description":"该 API 用于预测每天的日常任务,您可以通过指定时间范围来获取相关任务数据。", "params":{ - "name": "万花" + "num": "30" + } + }, + "jx3_xingxiashijian":{ + "url":"https://www.jx3api.com/data/active/celebs", + "method":"GET", + "description":"查询当前时间的楚天社或云从社的进度。", + "params":{ + "name": "穹野卫" + } + }, + "jx3_keju":{ + "url":"https://www.jx3api.com/data/exam/search", + "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": "" + } + }, + "jx3_qiwu":{ + "url":"https://www.jx3api.com/data/home/travel", + "method":"GET", + "description":"此接口用于查询指定地图的装饰物品产出信息,包括装饰的属性、来源和外观等内容。", + "params":{ + "name": "" + } + }, + "jx3_xinweng":{ + "url":"https://www.jx3api.com/data/news/allnews", + "method":"GET", + "description":"此接口用于获取官方最新公告及新闻内容,包括新闻分类、标题及链接等信息。", + "params":{ + "limit": 1 + } + }, + "jx3_weihu":{ + "url":"https://www.jx3api.com/data/news/announce", + "method":"GET", + "description":"获取《剑网3》官方发布的最新维护与版本更新公告列表,包含公告标题、发布日期及原文链接", + "params":{ + "limit": 1 + } + }, + "jx3_qufu":{ + "url":"https://www.jx3api.com/data/master/search", + "method":"GET", + "description":"此接口用于根据区服简称搜索主服务器及其附属服务器的详细信息", + "params":{ + "name": "双梦镇" + } + }, + "jx3_zhuangtai":{ + "url":"https://www.jx3api.com/data/status/check", + "method":"GET", + "description":"此接口用于根据区服简称搜索主服务器及其附属服务器的详细信息", + "params":{ + "type": "", + "server": "" } }, "jx3_jigai":{ - "url":"https://www.jx3api.com/data/skills/records", + "url":"https://www.jx3api.com/data/skill/rework", "method":"GET", "description":"获取剑网三技能记录", "params":{ } }, - "jx3_kaifu":{ - "url":"https://www.jx3api.com/data/server/check", + "jx3_xiaoyao":{ + "url":"https://www.jx3api.com/data/school/foods", "method":"GET", - "description":"剑网三开服查询", + "description":"小药", "params":{ - "server": "梦江南" } }, "aijx3_shapan":{ @@ -39,6 +114,14 @@ "serverName": "眉间雪" } }, + "jx3_shaohua":{ + "url":"https://www.jx3api.com/data/saohua/random", + "method":"GET", + "description":"获取剑网三骚话", + "params":{ + "name": "万花" + } + }, "aijx3_qiyu":{ "url":"https://www.jianxiachaguan.cn/api2/aijx3-jxcg/game/get-adventure-record", "method":"POST", @@ -141,22 +224,6 @@ "token":"" } }, - "jx3_xinweng":{ - "url":"https://www.jx3api.com/data/news/allnews", - "method":"GET", - "description":"此接口用于获取官方最新公告及新闻内容,包括新闻分类、标题及链接等信息。", - "params":{ - "limit": 1 - } - }, - "jx3_weihu":{ - "url":"https://www.jx3api.com/data/news/announce", - "method":"GET", - "description":"此接口用于获取官方最新维护公告,包括公告标题、发布日期及链接等信息。", - "params":{ - "limit": 1 - } - }, "jx3_zhengyingpaimai":{ "url":"https://www.jx3api.com/data/auction/records", "method":"GET", @@ -196,30 +263,6 @@ "token": "" } }, - "jx3_zhuangtai":{ - "url":"https://www.jx3api.com/data/server/status", - "method":"GET", - "description":"此接口用于查询指定服务器的当前状态,包括 维护、正常、繁忙 和 爆满 等状态信息。", - "params":{ - "server": "" - } - }, - "jx3_richangyuche":{ - "url":"https://www.jx3api.com/data/active/list/calendar", - "method":"GET", - "description":"该 API 用于预测每天的日常任务,您可以通过指定时间范围来获取相关任务数据。", - "params":{ - "num": "30" - } - }, - "jx3_xingxiashijian":{ - "url":"https://www.jx3api.com/data/active/celebs", - "method":"GET", - "description":"查询当前时间的楚天社或云从社的进度。", - "params":{ - "name": "穹野卫" - } - }, "jx3_pianzhi":{ "url":"https://www.jx3api.com/data/fraud/detailed", "method":"GET", @@ -240,41 +283,6 @@ "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": "" - } - }, - "jx3_qiwu":{ - "url":"https://www.jx3api.com/data/home/travel", - "method":"GET", - "description":"此接口用于查询指定地图的装饰物品产出信息,包括装饰的属性、来源和外观等内容。", - "params":{ - "name": "" - } - }, "jx3box_qiyugonglue":{ "url":"https://node.jx3box.com/serendipities", "method":"GET", diff --git a/main.py b/main.py index 456c608..8b74103 100644 --- a/main.py +++ b/main.py @@ -16,7 +16,7 @@ from .core.fun_basic import load_as_base64 @register("astrbot_plugin_jx3", "fxdyz", "通过调用剑网三API接口获取游戏数据,处理发送。", - "1.2.4", + "2.0", "https://github.com/qsc20001102/astrbot_plugin_jx3api" ) class Jx3ApiPlugin(Star): @@ -188,15 +188,18 @@ class Jx3ApiPlugin(Star): "日常": self.jx3cmd.jx3_richang, "日常预测": self.jx3cmd.jx3_richangyuche, "名望": self.jx3cmd.jx3_xingxiashijian, - "开服": self.jx3cmd.jx3_kaifu, - "全服状态": self.jx3cmd.jx3_zhuangtai, - "骚话": self.jx3cmd.jx3_shaohua, - "技改": self.jx3cmd.jx3_jigai, - "公告": self.jx3cmd.jx3_xinwen, "科举": self.jx3cmd.jx3_keju, "花价": self.jx3cmd.jx3_huajia, "装饰": self.jx3cmd.jx3_zhuangshi, "器物": self.jx3cmd.jx3_qiwu, + "公告": self.jx3cmd.jx3_xinwen, + "维护": self.jx3cmd.jx3_weihu, + "区服": self.jx3cmd.jx3_qufu, + "开服": self.jx3cmd.jx3_kaifu, + "状态": self.jx3cmd.jx3_zhuangtai, + "技改": self.jx3cmd.jx3_jigai, + "小药": self.jx3cmd.jx3_xiaoyao, + "骚话": self.jx3cmd.jx3_shaohua, "沙盘": self.jx3cmd.jx3_shapan, "统计": self.jx3cmd.jx3_qufuqiyu, "攻略": self.jx3cmd.jx3_qiyugonglue, diff --git a/metadata.yaml b/metadata.yaml index 4772004..dc45582 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -1,6 +1,6 @@ name: astrbot_plugin_jx3 display_name: 剑网三游戏数据查询工具 desc: 通过接口调用剑网三API接口获取游戏数据,处理发送。 -version: v1.2.4 +version: v2.0 author: 飞翔大野猪 repo: https://github.com/qsc20001102/astrbot_plugin_jx3 diff --git a/templates/xiaoyao.html b/templates/xiaoyao.html new file mode 100644 index 0000000..e5d9bae --- /dev/null +++ b/templates/xiaoyao.html @@ -0,0 +1,119 @@ + + + + +小药表 + + + + + +
+

心法小药表

+ + + + + + + + + + + + + + + + + + + + + + + {% for m in items %} + + + + + + + + + + + + + + + + {% endfor %} + +
心法紫色小药蓝色小药
增强食品增强药品辅助食品辅助药品增强食品增强药品辅助食品辅助药品
{{ m.kungfu }}{{ m.purple["增强食品"] }}{{ m.purple["增强药品"] }}{{ m.purple["辅助食品"] }}{{ m.purple["辅助药品"] }}{{ m.blue["增强食品"] }}{{ m.blue["增强药品"] }}{{ m.blue["辅助食品"] }}{{ m.blue["辅助药品"] }}
+ +
+ + + \ No newline at end of file