From 4efb1da95bb2af358fd73d2074b1ec3bbe29792e Mon Sep 17 00:00:00 2001 From: qsc Date: Mon, 22 Dec 2025 21:48:19 +0800 Subject: [PATCH] 111 --- _conf_schema.json | 32 +++++++++++++++-- core/async_task.py | 84 +++++++++++++++++++++++++++++++++++++-------- core/jx3_service.py | 12 ++++--- main.py | 3 +- 4 files changed, 109 insertions(+), 22 deletions(-) diff --git a/_conf_schema.json b/_conf_schema.json index 0f2e27d..4b5d2b2 100644 --- a/_conf_schema.json +++ b/_conf_schema.json @@ -33,9 +33,37 @@ "hint": "可以填写多个会话唯一ID。", "items": { "type": "string", - "description": "会话唯一ID" + "description": "会话唯一ID,可通过/std获取" }, - "default": ["QQ:GroupMessage:768280021","QQ:GroupMessage:690665795"] + "default": [] + } + } + }, + "xwzx": { + "description": "新闻资讯推送", + "type": "object", + "items": { + "enable": { + "description": "新闻资讯推送功能开关", + "type": "bool", + "default": false, + "hint": "是否启用剑网三开新闻资讯推送功能。" + }, + "time": { + "description": "获取最新资讯循环时间", + "type": "int", + "default": 280, + "hint": "请求最新资讯的循环时间,单位秒。" + }, + "umos": { + "description": "推送列表", + "type": "list", + "hint": "可以填写多个会话唯一ID。", + "items": { + "type": "string", + "description": "会话唯一ID,可通过/std获取" + }, + "default": [] } } } diff --git a/core/async_task.py b/core/async_task.py index 1177cf9..dce50ef 100644 --- a/core/async_task.py +++ b/core/async_task.py @@ -85,8 +85,13 @@ class AsyncTask: "time": conf.get("time", 10), "umos": conf.get("umos", []), } + # 状态记录 + self.kfjk = { + "state": False, + "state_new": False + } try: - self.kfjk_server_state = await self.get_local_data("kfjk") # 上一次查询的状态 + self.kfjk["state"] = await self.get_local_data("kfjk") # 上一次查询的状态 except Exception as e: logger.error(f"获取本地缓存数据失败: {e}") @@ -95,39 +100,88 @@ class AsyncTask: else: logger.info(f"开服监控功能关闭") return + while self.kfjk_conf["enable"]: try: # 获取最新服务状态 data = await self.jx3fun.kaifu("梦江南") - self.kfjk_server_state_new = data["status"] - logger.debug(f"开服监控功能循环中,上次询问服务器状态{self.kfjk_server_state},本次询问的服务器状态{self.kfjk_server_state_new}") + self.kfjk["state_new"] = data["status"] + logger.debug(f"开服监控功能循环中,上次询问服务器状态{self.kfjk['state']},本次询问的服务器状态{self.kfjk['state_new']}") # 判断状态是否变化 - if self.kfjk_server_state != self.kfjk_server_state_new: - logger.info(f"开服监控功能循环中,上次询问服务器状态{self.kfjk_server_state},本次询问的服务器状态{self.kfjk_server_state_new}") + if self.kfjk["state"] != self.kfjk["state_new"]: + logger.info(f"开服监控功能循环中,上次询问服务器状态{self.kfjk['state']},本次询问的服务器状态{self.kfjk['state_new']}") # 构建不同的推送小时 - if self.kfjk_server_state and not self.kfjk_server_state_new: - message_chain = MessageChain().message("剑网三服务器已关闭\n休息一会把,开服了喊你!") - if self.kfjk_server_state_new and not self.kfjk_server_state: - message_chain = MessageChain().message("剑网三服务器已开启\n快冲!快冲!") + message_chain = MessageChain().message(data.get("data")) # 推送消息 if self.kfjk_conf["umos"]: for umo in self.kfjk_conf["umos"]: await self.context.send_message(umo, message_chain) - await self.set_local_data("kfjk", self.kfjk_server_state_new) + await self.set_local_data("kfjk", self.kfjk["state_new"]) - self.kfjk_server_state = self.kfjk_server_state_new + self.kfjk["state"] = self.kfjk["state_new"] except Exception as e: logger.error(f"开服监控循环异常: {e}") - await asyncio.sleep(self.kfjk_conf["time"]) # 休眠指定时间 + await asyncio.sleep(self.kfjk_conf["time"]) async def get_kfjk_conf(self) -> str: """获取开服监控配置信息""" return_msg = f"开服监控后台状态:{self.kfjk_conf['enable']}\n" return_msg += f"周期询问时间:{self.kfjk_conf['time']}秒\n" - return_msg += f"上次询问服务器状态{self.kfjk_server_state}\n" - return_msg += f"本次询问的服务器状态{self.kfjk_server_state_new}\n" + return_msg += f"上次询问服务器状态{self.kfjk['state']}\n" + return_msg += f"本次询问的服务器状态{self.kfjk['state_new']}\n" return_msg += f"推送会话列表:\n{self.kfjk_conf['umos']}" - return return_msg \ No newline at end of file + return return_msg + + + async def cycle_xwzx(self): + """最新新闻资讯后台程序""" + # 获取配置信息 + conf = self.conf.get("xwzx", {}) + self.xwzx_conf = { + "enable": conf.get("enable", True), + "time": conf.get("time", 280), + "umos": conf.get("umos", []), + } + # 状态记录 + self.xwzx = { + "state": 0, + "state_new": 0 + } + + try: + self.xwzx["state"] = await self.get_local_data("xwzx") # 上一次查询的状态 + except Exception as e: + logger.error(f"获取本地缓存数据失败: {e}") + + if self.xwzx_conf["enable"]: + logger.info(f"新闻资讯推送功能开启") + else: + logger.info(f"新闻资讯推送功能关闭") + return + + while self.xwzx_conf["enable"]: + try: + # 获取最新服务状态 + data = await self.jx3fun.xinwei() + self.xwzx["state_new"] = data["status"] + logger.debug(f"新闻资讯推送功能循环中,上次最新资讯ID{self.xwzx['state']},本次最新资讯ID{self.xwzx['state_new']}") + # 判断状态是否变化 + if self.xwzx["state"] != self.xwzx["state_new"]: + logger.info(f"新闻资讯推送功能循环中,上次最新资讯ID{self.xwzx['state']},本次最新资讯ID{self.xwzx['state_new']}") + # 构建不同的推送小时 + message_chain = MessageChain().message(data.get("data")) + # 推送消息 + if self.xwzx_conf["umos"]: + for umo in self.xwzx_conf["umos"]: + await self.context.send_message(umo, message_chain) + + await self.set_local_data("xwzx", self.xwzx["state_new"]) + + self.xwzx["state"] = self.xwzx["state_new"] + + except Exception as e: + logger.error(f"开服监控循环异常: {e}") + await asyncio.sleep(self.xwzx_conf["time"]) \ No newline at end of file diff --git a/core/jx3_service.py b/core/jx3_service.py index 7a1bb60..c9e7425 100644 --- a/core/jx3_service.py +++ b/core/jx3_service.py @@ -255,19 +255,23 @@ class JX3Service: return_data = self._init_return_data() # 提取字段可能返回列表 - data: Optional[List[Dict[str, Any]]] = await self._base_request("jx3_jigai", "GET") + data: Optional[List[Dict[str, Any]]] = await self._base_request("jx3_xinweng", "GET") if not data or not isinstance(data, list): return_data["msg"] = "获取接口信息失败或数据格式错误" return return_data try: - result_msg = "剑网三最近技改\n" + # + result = data[0] + return_data["status"] = result.get('id') + + result_msg = "新闻资讯推送\n" # 仅展示前1条,避免消息过长 for i, item in enumerate(data[:1], 1): result_msg += f"{i}. {item.get('title', '无标题')}\n" - result_msg += f"时间:{item.get('time', '未知时间')}\n" - result_msg += f"链接:{item.get('url', '无链接')}\n\n" + result_msg += f"时间:{item.get('date', '未知时间')}\n" + result_msg += f"链接:{item.get('url', '无链接')}\n" return_data["data"] = result_msg return_data["code"] = 200 diff --git a/main.py b/main.py index 656dbf0..3ae26ec 100644 --- a/main.py +++ b/main.py @@ -67,7 +67,7 @@ class Jx3ApiPlugin(Star): # 周期函数调用 self.kf_task = asyncio.create_task(self.at.cycle_kfjk()) - + self.xw_task = asyncio.create_task(self.at.cycle_xwzx()) # 初始化函数 #data=await self.jx3fun.SearchData() #logger.info(data["msg"]) @@ -427,4 +427,5 @@ class Jx3ApiPlugin(Star): await self.db.close() # 后台z周期进程销毁 self.kf_task.cancel() + self.xw_task.cancel() logger.info("jx3api插件已卸载/停用") \ No newline at end of file